Автор | Сообщение |
Vlad04
|
| постоянный участник
|
Пост N: 420
Зарегистрирован: 13.10.05
|
|
Отправлено: 19.12.13 18:16. Заголовок: TsBrowse в Минигуи (продолжение)
TsBrows определяется в виде строки ПАРМЕТРОВ объекта и их значений К примеру цитата: | DEFINE TBROWSE oBrw2 ; AT 60,450 ; ALIAS cAlias ; OF Form1 ; WIDTH 330 ; HEIGHT 340 ; FONT "Verdana" ; SIZE 9 ; ON DBLCLICK CopyRec(); ON GOTFOCUS fModelo_Hab(2) ; AUTOFILTER ; CELLED EDIT; VALUE nRec; GRID |
| Здесь я собрал параметры из разных tBrows Можно или нет и какие парметры заменить выражением ( и каким) ? oBrw2:.... oBrw2:....
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
SergKis
|
| постоянный участник
|
Пост N: 1276
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.11.16 13:13. Заголовок: надо читать левый уб..
надо читать левый убежал и что то ставить, а правый еще в прошлых установках, спутался чуть чуть, сори
|
|
|
Dima
|
| |
Пост N: 6097
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.11.16 13:23. Заголовок: SergKis Убедил. Тол..
SergKis Убедил. Только пока не совсем четко представляю как это все правильно переделать , с Минигуи работаю наскоками.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1277
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.11.16 13:48. Заголовок: Dima Схематично мож..
Dima Схематично можно делать так Скрытый текст
DEFINE WINDOW ... @ 0, 0 LABEL Buf VALUE '' WIDTH 2 HEIGHT 2 INVISIBLE This.Buf.Cargo := 0 // тут к примеру oBrw3, oBrw4 TsBrowse создаем SetProperty(ThisWindow.Name, 'oBrw4', 'Cargo', 0) DEFINE TIMER MyTimer INTERVAL 1000 ACTION DoTimer(oBrw4) This.MyTimer.Enabled := .F. END WINDOW FUNC CheckRefresh( o ) SetProperty(o:cParentWnd, 'Buf', 'Cargo', (o:cAlias)->( RecNo() )) // если есть кнопки к левому тсб, их можно тут поставить в Enabled := <что надо> RETURN NIL FUNC DoTimer( o ) LOCAL nNew := GetProperty(o:cParentWnd, 'Buf' , 'Cargo') LOCAL nOld := GetProperty(o:cParentWnd, 'oBrw4', 'Cargo') If empty(nNew) RETURN NIL EndIf If nNew != nOld SetProperty(o:cParentWnd, 'MyTimer', 'Enabled', .F.) // тут перепоказ правого тсб // ставим scope\filter и .... SetProperty(o:cParentWnd, 'oBrw4', 'Cargo', nNew) SetProperty(o:cParentWnd, 'MyTimer', 'Enabled', .T.) EndIf RETURN NIL
|
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1278
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.11.16 13:50. Заголовок: PS забыл, после гот..
PS забыл, после готовности окна (тсб) к работе вкл. This.MyTimer/Enabled := .T.
|
|
|
Dima
|
| |
Пост N: 6098
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.11.16 14:14. Заголовок: SergKis Сделал так ..
SergKis Сделал так FUNC DoTimer( o3,o4 ) LOCAL nNew := GetProperty(o3:cParentWnd, 'Buf' , 'Cargo') LOCAL nOld := GetProperty(o3:cParentWnd, 'oBrw3', 'Cargo') If o3:loBrw3Ready If empty(nNew) RETURN NIL EndIf If nNew != nOld SetProperty(o3:cParentWnd, 'MyTimer', 'Enabled', .F.) Myfilter(o3,o4) // тут перепоказ правого тсб // ставим scope\filter и .... SetProperty(o3:cParentWnd, 'oBrw3', 'Cargo', nNew) SetProperty(o3:cParentWnd, 'MyTimer', 'Enabled', .T.) EndIf endif RETURN NIL Когда двигаюсь по бровсу o3 (главный) , то в правом o4 ни чего не меняется , так и надо. Но вот когда остановился , правый бровс начинает все время обновляться и моргать. Что не так сделал ? Где то нужно остановить таймер , не пойму где..
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1279
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.11.16 14:22. Заголовок: Dima пишет Где то ну..
Dima пишет цитата: | Где то нужно остановить таймер , не пойму где.. |
| Timer останавливать не надо, должно срабатывать nNew == nOld и выход из DoTimer надо проверить, что там
|
|
|
Dima
|
| |
Пост N: 6099
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.11.16 14:23. Заголовок: Мой косяк , баловалс..
Мой косяк , баловался сам с таймером и забыл убрать свой. В общем , после того как я перестал двигаться по бровсу , правый бровс не обновился почему то
|
|
|
Dima
|
| |
Пост N: 6100
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.11.16 14:26. Заголовок: SergKis пишет: Time..
SergKis пишет: цитата: | Timer останавливать не надо, должно срабатывать nNew == nOld и выход из DoTimer |
| Понял , сделал так FUNC DoTimer( o3,o4 ) LOCAL nNew := GetProperty(o3:cParentWnd, 'Buf' , 'Cargo') LOCAL nOld := GetProperty(o3:cParentWnd, 'oBrw3', 'Cargo') If o3:loBrw3Ready If empty(nNew) RETURN NIL EndIf If nNew != nOld //SetProperty(o3:cParentWnd, 'MyTimer', 'Enabled', .F.) Myfilter(o3,o4) // тут перепоказ правого тсб // ставим scope\filter и .... SetProperty(o3:cParentWnd, 'oBrw3', 'Cargo', nNew) // SetProperty(o3:cParentWnd, 'MyTimer', 'Enabled', .t.) EndIf endif RETURN NIL Но правый бровс не обновляется после как я перестал двигаться по левому
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1280
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.11.16 14:29. Заголовок: Dima пишет Но правый..
Dima пишет цитата: | Но правый бровс не обновляется после как я перестал двигаться по левому |
| так и задумано, работай теперь с правым (по правым кнопкам) сместишь левый - получишь новый правый и т.д. разве не так надо было ?
|
|
|
Dima
|
| |
Пост N: 6101
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.11.16 14:32. Заголовок: я кажется понял в че..
я кажется понял в чем дело Поставил заглушку на Bchange )) Переделал на oBrw3:bChange := {|| SetProperty(obrw3:cParentWnd, 'Buf', 'Cargo', (obrw3:cAlias)->( RecNo() ))}
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1281
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.11.16 14:37. Заголовок: PS Если не двигаемся..
PS Если не двигаемся, но через время надо перечитать с сервера, надо стелать чсетчик сек. и обновлять nOld := 0 : FUNC DoTimer( o3,o4 ) LOCAL nNew := GetProperty(o3:cParentWnd, 'Buf' , 'Cargo') LOCAL nOld := GetProperty(o3:cParentWnd, 'oBrw3', 'Cargo') STATIC nRefr := 0 ... nRefr += 1 If nRefr > 5 nOld := 0 EndIf If nNew != nOld ...
|
|
|
|
Dima
|
| |
Пост N: 6102
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.11.16 14:43. Заголовок: Вообще была идея вык..
Вообще была идея выключать Таймер в Bchange , вот только не понятно когда его включить , если этого не сделать и двигаться зажав кнопку вниз , правый бровс все равно будет обновляться НО с интервалом уставленным в таймере
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1282
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.11.16 14:49. Заголовок: Dima пишет правый бр..
Dima пишет цитата: | правый бровс все равно будет обновляться НО с интервалом уставленным в таймере |
| По мне, это приемлемо - видно что все работает (главное правый тсб автономно сам ставит что надо) Реакция отображения правого тсб 1-2 сек. - это нормально
|
|
|
Dima
|
| |
Пост N: 6103
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.11.16 14:53. Заголовок: SergKis пишет: Реак..
SergKis пишет: цитата: | Реакция отображения правого тсб 1-2 сек. - это нормально |
| Мне показалось это время не приемлемо большим и поставил 200 мс
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1283
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.11.16 15:01. Заголовок: Dima пишет Мне показ..
Dima пишет цитата: | Мне показалось это время не приемлемо большим и поставил 200 мс |
| Думаю, ты очень горячися и подгоняешь клиента к убыстренной работе, ему некогда подумать, попить чаю\кофе ...
|
|
|
Dima
|
| |
Пост N: 6104
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.11.16 15:13. Заголовок: Когда таймер жил пря..
Когда таймер жил прямо в бровсе , понятно что были с этим проблемы , но по крайней мере при движении по главному бровсу , подчиненный молчал как партизан. Остановил движение и правый обновился.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1284
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.11.16 15:55. Заголовок: Dima пишет подчиненн..
Dima пишет цитата: | подчиненный молчал как партизан. Остановил движение и правый обновился. |
| Так тут тоже можно сделать такое, отображать не при nNew != nOld, а при nNew == nOld по счетчику входов, типа 3 раза вошли по тимер и nNew == nOld отображаем, надо немного усложнить тимер, мне всегда было лениво
|
|
|
Dima
|
| |
Пост N: 6106
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.11.16 16:05. Заголовок: SergKis Понял. Спас..
SergKis Понял. Спасибо !
|
|
|
Haz
|
| |
Пост N: 1059
Зарегистрирован: 20.02.11
|
|
Отправлено: 10.11.16 23:31. Заголовок: Дима, глянул твои ис..
Дима, глянул твои исходники внимательно и почитал все что написали. Сорь раньше не мог. Есть пару мыслей.... Во первых таймер не убивается каждые 50 мс а лишь тогда когда юзер оторвет палец от колеса. Проблема с утечкой памяти... Возможно и есть , но у себя не наблюдаю глюков. А главная проблема мне кажется в исходнике - процедура myfilter не успевает выполниться за 50 мс и не происходит выравнивания номера записи и логикпос., это приводит к следующему тику таймера ит д.. Уверен если задержку сделать 200 и перенести майфильтр в конец ( перед return) то основная причина глюка уйдет. Что касается утечки, то можно на каждую 10 прорисовку второго бровса повесить сборщик мусора. Сори за мой французский, пишу с мобилы. У себя оставлю пока так. Позже переделаю на флаги, таймер инициализировать буду по инит бровса, а убивать при закрытии бровсе. Тогда и утечек не будет.
|
|
|
Dima
|
| |
Пост N: 6111
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.11.16 23:36. Заголовок: Haz пишет: Сори за ..
Haz пишет: цитата: | Сори за мой французский, пишу с мобилы. |
| Игорь все нормально , кажется проблема решена. Пошел по пути как посоветовал Сергей. Отдал клиенту , если что то он будет стучать в рельсу. Я сам долго ездил после доработки по бровсу , проблем не увидел. Haz пишет: цитата: | Проблема с утечкой памяти... |
| Может и так , но мне этот гимор надоел. Нужно было просто сделать рабочий вариант что бы ни чего не глючило. Вроде получилось.
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|