Форум » GUI » Какой-то глюк в TsBrowse » Ответить

Какой-то глюк в TsBrowse

AM: Товарищи! Кто поможет? Определяю TBrowse в неглавном окне, с одним или более столбцами, неважно. При попытке изменить границы столбцов (при наведении мыши на разделитель заголовков появляется двунаправленная стрелка), при щелчке на этой стрелке происходит вылет: Error BASE/1066 Argument error: conditional Called from (b)TCONTROL(193) Called from TSBROWSE:RELEASEDC(0) Called from TSBROWSE:VERTLINE(10615) Called from TSBROWSE:LBUTTONDOWN(6102) Called from TCONTROL:HANDLEEVENT(903) Called from TSBROWSE:HANDLEEVENT(6531) Called from EVENTS(263) Called from _DOMESSAGELOOP(0) Called from _ACTIVATEWINDOW(1273) *Called from DB_BROWSE(786) *Called from (b)MAIN_WIND(273) Called from _DOCONTROLEVENTPROCEDURE(1552) Called from EVENTS(1582) *Called from MYEVENTS(35) Called from _DOMESSAGELOOP(0) Called from _ACTIVATEWINDOW(1273) *Called from MAIN_WIND(300) *Called from MAIN(105) Звёздочками я отметил мои функции. Просмотр исходников TsBrowse никакой полезной информации мне лично не дал. Кто может что подсказать?

Ответов - 10

fil: А в предыдущем окне случаем не броуз сидит ?

AM: fil пишет: А в предыдущем окне случаем не броуз сидит ? Нет, броуз один во всей программе.

fil: Тогда подробнее. Лучше фрагмент текста процедуры до броузера (включая его самого)


AM: Вот такой фрагмент. А по-старому, через BROWSE, с этим проблем не было. Правда, DATA в колонках сейчас определены криво, но это неважно, до редактирования не доходит. DEFINE WINDOW TabForm AT 12,36 WIDTH 740 HEIGHT 450; TITLE hea CHILD ON LOSTFOCUS THISWINDOW.RELEASE NOMINIMIZE NOMAXIMIZE @ 4,60 LABEL LCAPT2 SIZE 12; BACKCOLOR WHITE WIDTH 495 HEIGHT 20 VALUE ' '+hea2 DRAW RECTANGLE IN WINDOW TabForm AT 4,30; TO 24,60 PENCOLOR WHITE FILLCOLOR WHITE //легенда (окошко) DRAW LINE IN WINDOW TabForm AT 13,35; //легенда - dbBrowse() TO 13,55 PENCOLOR ccurves[section] PENWIDTH ccurves[section,4] DRAW PANEL IN WINDOW TabForm AT 28,10 TO 375,727 /* СТАРОЕ @ 34, 20 BROWSE Browse_1a WIDTH 580 HEIGHT 300; ON DBLCLICK THISWINDOW.RELEASE; HEADERS {'Номер записи','Дата-время','Значение'}; WIDTHS {100,150,150} WORKAREA &('curve'+str_0(section,2)); FIELDS {'recno()','if(value="********","<КОНЕЦ СЕАНСА>",dt2000(datetime))',; 'if(value="********","",float_str(ctof(value),9))'} //JUSTIFY {2,1,000} */ DEFINE TBROWSE Browse_1a AT 34,20 /*GRID*/ ; ALIAS 'curve'+str_0(section,2); WIDTH 580 HEIGHT 300 COLORS {CLR_BLACK, CLR_BLUE} //; MESSAGE "oBrw:lNoHScroll, eliminates horizontal scroll bar." ADD COLUMN TO Browse_1a WIDTH 100 HEADER 'Номер записи'; DATA {|x| recno()} EDITABLE MOVE DT_MOVE_RIGHT ADD COLUMN TO Browse_1a WIDTH 150 HEADER 'Дата-время'; DATA {|x| if(x=nil,dt2000(datetime),datetime:=' ')} EDITABLE MOVE DT_MOVE_RIGHT ADD COLUMN TO Browse_1a WIDTH 150 HEADER 'Значение'+cr+'"'+SectName+'"'; DATA {|x| if(x=nil,float_str(ctof(value),9),float_str(ctof(value),9))} EDITABLE MOVE DT_MOVE_RIGHT END TBROWSE //ряд кнопок (справа от таблицы) ....... END WINDOW CENTER WINDOW TabForm TabForm.Browse_1a.Setfocus() ACTIVATE WINDOW TabForm Пробовал убрать и DRAW, и кнопки - оставить в окне только броуз - не помогает.

fil: Ну так с виду вроде похоже на правду. Возьми sbtest.prg и посмотри, там как раз MDI окна с TsBrowse рассмотрены

AM: То есть обязательно д.б. MDI? Но у меня, к сожалению, тогда многое придётся переделать. Если просто добавить слово "MDI", то изменяется порядок всякой инициализации и начинаются вылеты на несуществующих переменных. Правда, переделывать всё равно много надо, так что уж заодно. В общем, работать и работать...

fil: Да нет, совершенно не обязательно MDI - любое окно. А в TBrowse перехвати клик bRClick

AM: Как-то сложно. А где описано, как это делать? И в samples\advanced\tsbrowse обходится же без этого. Правда, там и без MyEvents тоже - может, в этом дело?

fil: Причем тут MyEvents ? oBr:=TSBroswe():New() ....................... oBr:bRClick:={||МояФункция()}

AM: Да, oBr:bRClick - нашёл, что такое. Но это не то. Во-первых- для перемещения границ колонок используется левая кнопка. Во-вторых - в примерах-то ничего подобного нет, как-то обходятся без этого. Я пытался изменить мою программу, чтобы добиться отсутствия вылетов, пытался и изменить пример, чтобы как раз добиться вылета - не получается. Ладно, пока не до этого, т.к. появились более срочные дела. Есть, правда, подозрение, что дело не только в самих программах, но в разных методах сборки.



полная версия страницы