On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
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:....



Спасибо: 0 
Профиль
Ответов - 300 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]


SergKis
постоянный участник




Пост N: 1270
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.11.16 20:10. Заголовок: ММК пишет Иногда пом..


ММК пишет
 цитата:
Иногда помогало :)


Лишним такое переотображение не будет, согласен

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6090
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.11.16 22:28. Заголовок: SergKis пишет: Тут ..


SergKis пишет:

 цитата:
Тут изменения


Вариант понятен , снова править сырцы. Думал можно обойтись без этого.
Да и результат я так понял по сообщению выше , не всегда стабилен и может заглючить.
В любом случае , спасибо

Попробую основной бровс с TS переписать на обычный бровс , надеюсь там есть двойной курсор и его
раскраска.


Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1054
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 09.11.16 22:59. Заголовок: Дима, в подчиненом б..


Дима, в подчиненом бровсе сразу прорисовка( при смене строки) или по таймеру после прекращения навигации в главном?
Пишу с мобилы. Пока нет компа под рукой

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6091
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.11.16 23:01. Заголовок: Haz пишет: Дима, в ..


Haz пишет:

 цитата:
Дима, в подчиненом бровсе сразу прорисовка или по таймеру после прекращения навигации в главном.


Так по таймеру и делал с твоей подачи Игорь.

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1055
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 09.11.16 23:03. Заголовок: Попробуй задержку т..


Попробуй задержку таймера увеличить

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1056
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 09.11.16 23:06. Заголовок: У меня целый день по..


У меня целый день пользователь гоняет мышь вверх вниз от безделья. С тех пор как переделал на таймер все работает

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6092
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.11.16 23:08. Заголовок: Haz пишет: Попробу..


Haz пишет:

 цитата:

Попробуй задержку таймера увеличить


Хорошо , отпишу завтра.

Haz пишет:

 цитата:

У меня целый день пользователь гоняет мышь вверх вниз от безделья


У моего думаю так же , но не факт....

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1057
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 09.11.16 23:16. Заголовок: Еще при прорисовке п..


Еще при прорисовке подчиненного процедуру глянь.
У тебя там скорее scope и refresh используется.
Кажется мне если этот refresh закоментить то слом прекратиться, впрочем как и отображение scope
Я использую reset для перерисовки

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6093
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.11.16 23:59. Заголовок: Haz Завтра выложу к..


Haz
Завтра выложу кусок сырца , но там вроде все правильно.
У меня там RESET бровсу + серверный фильтр , Refresh нет

Спасибо: 0 
Профиль
Softlog86



Пост N: 329
Зарегистрирован: 03.12.08
ссылка на сообщение  Отправлено: 10.11.16 09:14. Заголовок: когда пошли первые н..


когда пошли первые непонятные подвисания и косяки с прорисовкой (пустые строки в середине таблицы) , сразу отказался от использования TSBROWSE
и ушел на стандартные BROWSE . Когда допилят - попробую снова . кроме SuperHeader и раскраски элементов ничего от них не нужно было ....


Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6094
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.11.16 09:46. Заголовок: Haz Вот сырцы , но ..


Haz
Вот сырцы , но там все гладко как бы. Ведь работает же первые 5-10 минут нормально.
Если не клацать ни чего в бровсе и не ездить по нему , то обе таблички могут висеть хоть
целый день и ни чего не ломается. Но стоит интенсивно поездить по ним какое то время ,
бровс начинает жить своей жизнью и может сломать жизнь другим окнам и контролам в программе.
Скрытый текст

*------------------------------------------------------
[pre2]
FUNC CheckRefresh( o )
IF ! _IsControlDefined ( o:cControlName + '_Timer', o:cParentWnd )
_DefineTimer ( o:cControlName + '_Timer' , o:cParentWnd , o:nDellay , { || OnChangeProcedure(o) } )
END
o:nNewRecord := o:nLogicPos()
RETURN NIL
*---------------------------------------------------
FUNC OnChangeProcedure( o )
if o:nOldRecord == o:nNewRecord

Myfilter(o,obrw4)

IF _IsControlDefined ( o:cControlName + '_Timer', o:cParentWnd )
Domethod( o:cParentWnd, o:cControlName + '_Timer' , 'Release')
ENDIF
endif
o:nOldRecord := o:nLogicPos()
RETURN NIL
*---------------------------------------------------------
Func MyFilter(o1,o2)

If o1:loBrw3Ready
Setproperty("SPR_REC","Message4","value","Загрузка данных.......")
Flogan('rid=='+ntoc((o1:cAlias)->rid) ,o2:cAlias) // серверный фильтр ADS
o2:Reset()
GetTotal(.t.,o2 )
Setproperty("SPR_REC","Message4","value",alltrim((o1:cAlias)->naim) )
Setproperty("SPR_REC","Message4","tooltip",alltrim((o1:calias)->prime))
Setproperty("SPR_REC","Message5","value",getuserfio() )


FreshFoots(o2)

if n_fltrecept==2
Setproperty(obrw3:cParentWnd,"Button_1","Enabled",FALSE)
endif

if kaka("recept") .or. idrec_user==(o1:calias)->n_user

obrw3:SetDeleteMode( if (n_fltrecept==2,.f.,.t.) ,.f.,{|| del_x:=(obrw3:calias)->rid,isdel(obrw3)} , {||ClearSpec(del_x) , x:=obrw3:bchange,obrw3:bchange:=nil,obrw3:Gotorec((obrw3:calias)->(recno())),obrw3:bchange:=x,eval(obrw3:bchange) } )
obrw4:SetDeleteMode( if (n_fltrecept==2,.f.,.t.) ,.f.,{|| if( (obrw4:calias)->itg==0,msgokCancel("Удалить "+alltrim(getspr(oBrw4,"naim"))+" ?","Внимание"),FALSE) },{|| Gettotal(.t.,obrw4),FreshFoots(obrw4)} )
Setproperty(obrw3:cParentWnd,"Button_2","Enabled",if(n_fltrecept==2,FALSE, TRUE) )
Setproperty(obrw3:cParentWnd,"Button_2","Enabled",if(n_fltrecept==2,FALSE, TRUE) )
Setproperty(obrw3:cParentWnd,"Button_3","Enabled",if(n_fltrecept==2,FALSE, TRUE) )
Setproperty(obrw4:cParentWnd,"Button_1x","Enabled",if(n_fltrecept==2,FALSE, TRUE) )
Setproperty(obrw4:cParentWnd,"Button_2x","Enabled",if(n_fltrecept==2,FALSE, TRUE) )
Setproperty(obrw4:cParentWnd,"Button_3x","Enabled",if(n_fltrecept==2,FALSE, TRUE) )
Setproperty(obrw4:cParentWnd,"Button_4x","Enabled",if(n_fltrecept==2,FALSE, TRUE) )
Setproperty(obrw4:cParentWnd,"Button_6x","Enabled",if(n_fltrecept==2,FALSE, TRUE) )
Setproperty(obrw4:cParentWnd,"Button_7x","Enabled",if(n_fltrecept==2,FALSE, TRUE) )
Setproperty(obrw4:cParentWnd,"Button_8x","Enabled",if(n_fltrecept==0,kaka("prnrecept"),.t. ))

else

obrw3:SetDeleteMode( .f.,.f.,{|| del_x:=(obrw3:calias)->rid,isdel(obrw3)} , {||ClearSpec(del_x) , obrw3:Gotorec((obrw3:calias)->(recno())) } )
obrw4:SetDeleteMode( .f.,.f.,{|| if( (obrw4:calias)->itg==0,msgokCancel("Удалить "+alltrim(getspr(oBrw4,"naim"))+" ?","Внимание"),FALSE) },{|| Gettotal(.t.,obrw4),FreshFoots(obrw4)} )
Setproperty(obrw3:cParentWnd,"Button_2","Enabled",FALSE )
Setproperty(obrw3:cParentWnd,"Button_3","Enabled",FALSE )
DoMethod ( "SPR_REC" , "Button_5" , 'Hide' )
Setproperty(obrw4:cParentWnd,"Button_1x","Enabled",FALSE )
Setproperty(obrw4:cParentWnd,"Button_2x","Enabled",FALSE )
Setproperty(obrw4:cParentWnd,"Button_3x","Enabled",FALSE )
Setproperty(obrw4:cParentWnd,"Button_4x","Enabled",FALSE )
Setproperty(obrw4:cParentWnd,"Button_6x","Enabled",FALSE )
Setproperty(obrw4:cParentWnd,"Button_7x","Enabled",FALSE )
Setproperty(obrw4:cParentWnd,"Button_8x","Enabled",if(n_fltrecept==0,kaka("prnrecept"),.t. ))

endif
endif

return nil
*--------------------------------------------------------
func Flogan(ceri,alik)
hb_default(@alik,alias())

if (alik)->(Rddname())=="ADSCDX"
(alik)->(AdsSetAof(ceri,2))
else
(alik)->(dbsetfilter({|| &(ceri)},ceri))
endif
return nil

*---------------------------------------------------------




`

Вот видео что выслал клиент.
Я позже у себя тоже плотно поюзал и выпал на похожие глюки (писал выше)
Скрытый текст


Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 1271
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.11.16 11:02. Заголовок: Dima пишет Вот сырцы..


Dima пишет
 цитата:
Вот сырцы


Может не так понял, но создавать тимер в CheckRefresh и удалять в блоке кода { || OnChangeProcedure(o) } это слишком круто (через 50 млсек.)
1. По мне тимер надо вешать на окно и приостанавливать его работу на время выборок, делая тимеру Enabled := .F. и
запуская на отслеживание изменения позиции\ключа данных Enabled := .T.
2. SetDeletedMode тоже поставить один раз на obrw3,obrw4 и внутри отслеживать что там надо
3. Сам тимер в работе должен ТОЛЬКО отследить, что сменился ключ\позиция (рассогласование obrw3, obrw4) и включить прорисовку obrw4,
причем время реакции\работы тимер не менее 700 млсек. (в VO ставил 1000 млсек.).

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 1272
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.11.16 11:08. Заголовок: PS процедура CheckRe..


PS
процедура CheckRefresh в obrw3, должна только показывать, что сменился ключ\позиция, при перемещении, а
тимер, срабатывая (через сек.) переотображать, если ключ\позиция изменились
Это, конечно, если правильно понял идею по тексту

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1058
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 10.11.16 11:29. Заголовок: SergKis удалять в ..


SergKis

 цитата:
удалять в блоке кода { || OnChangeProcedure(o) } это слишком круто (через 50 млсек.)


Согласен , была мысль поселить таймер в бровсе и управлять прорисовкой флагами . Но до реализации не дошло.
То что дал Дима , это временное решение . и как все временное живет уже почти год
Идея ты понял правильно - незачем рисовать дочерний бровс пока пользователь не оторвал палец от клавиатуры или не перестал крутить колесо.

Dima

 цитата:
Вот сырцы


только если смену фокуса на дочерний бровс перед прорисовкой и восстановить на главный после

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1028
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 10.11.16 11:46. Заголовок: SergKis пишет: тиме..


SergKis пишет:

 цитата:
тимер надо вешать на окно и приостанавливать его работу на время выборок, делая тимеру Enabled := .F. и
запуская на отслеживание изменения позиции\ключа данных Enabled := .T.


Полностью согласен - это оптимальный путь

В противном случае каждые 50 мсек создается PUBLIC переменная для нового таймера, что и приводит к утечке памяти у Димы.
Рекомендую также увеличить время срабатывания таймера минимум в 3 раза (можно и больше )

Кстати, для периодической чистки памяти по таймеру на форуме HMG рекомендуют команду

DEFINE TIMER Tmr_1 INTERVAL 5000 ACTION (RELEASE MEMORY) // только для WinVista и выше

Dima пишет:

 цитата:
Вот сырцы , но там все гладко как бы.


Не совсем гладко, выходит...

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6095
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.11.16 12:36. Заголовок: Не думал что таймер ..


Не думал что таймер может так поднасрать )))
Сделал без таймера.
В Bchange главного бровса o:Reset() прибил , так как при частом вызове это может привести к зависанию бровса.
Вместо него сделал o:Refresh(.t.) +o:Gotop()+ o:upstable()
Испытываю езду по бровсу , пока не виснет и не глючит
Но посмотрим....

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 1273
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.11.16 12:49. Заголовок: Dima пишет Вместо не..


Dima пишет
 цитата:
Вместо него сделал o:Refresh(.t.) + o:upstable()
Испытываю езду по бровсу , пока не виснет и не глючит


От timer не отказывайся, по левому тсб бегают\остановились, а правый через 1 сек. переотображает (если сменилось),
это лучше, чем на каждой смене левой записи переотображать правый тсб.

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6096
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.11.16 12:58. Заголовок: SergKis пишет: это ..


SergKis пишет:

 цитата:
это лучше, чем на каждой смене левой записи переотображать правый тсб.


Я понимаю это , но вот езжу туда сюда уже 30 минут и все нормально , косяков нет.
Правый бровс думаю не умрет , ведь перед показом там идут некоторые расчеты , что и дает некую задержку.
Когда там жил RESET() , могло зависнуть.

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 1274
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.11.16 13:08. Заголовок: Dima пишет Правый бр..


Dima пишет
 цитата:
Правый бровс думаю не умрет , ведь перед показом там идут некоторые расчеты , что и дает некую задержку.


Т.е. получается правый тсб расчитывает потом показывает (с задержкой),
а левй убежал уже куда то, т.к. на нем крутим колесо мыши, не уверен, что это правильно

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 1275
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.11.16 13:11. Заголовок: PS Если правильно по..


PS
Если правильно понимию от правого тсб ставится scope\filter и получается правый убежал и что то ставит,
а левый еще где то в прошлых установках

Спасибо: 0 
Профиль
Ответов - 300 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 87
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет