Форум » GUI » НwGUI, в окне Browse просмотра информации полосы прокрутки работают не корректно » Ответить

НwGUI, в окне Browse просмотра информации полосы прокрутки работают не корректно

Aleksandr_D: Добрый день! Использую HwGUI, в окне Browse просмотра информации полосы прокрутки (горизонтальная, вертикальная) работают не корректно. При "захвате" мышкой ползунка не происходит перемещение по записям. Подскажите в чем дело. Текст функции смю ниже. #include "hwgui.ch" #include "MAIN.h" #include "dbstruct.ch" #include "error.ch" #include "hbdyn.ch" #include "simpleio.ch" #include "hbgtinfo.ch" #include "setcurs.ch" #include 'wvtwin.ch' #define LeftToDetScr 24 #define x_BLUE 16711680 #define x_DARKBLUE 10027008 #define x_WHITE 16777215 #define x_CYAN 16776960 #define x_BLACK 0 #define x_RED 255 #define x_GREEN 32768 #define x_GRAY 8421504 #define x_YELLOW 65535 #include "windows.ch" #include "guilib.ch" &&*=▒░▒=**=▒░▒=**=▒░▒=**=▒░▒=**=▒░▒=**=▒░▒=**=▒░▒=**=▒░▒=**=▒░▒=**=▒░▒=**=▒░▒=* FUNCTION BBr_SpisSotr_GUI(pcWPOD , pcl_Work, pcName) &&********************************************************** LOCAL hChild := '' LOCAL fname := "Список сотрудников." LOCAL oWindow, oBrowse, i, nArea, kolf LOCAL oStyle := HStyle():New( { 0xffffff, 0xbbbbbb }, 1 ) LOCAL oStyle1 , oMsg LOCAL bPosChg := {|o| oBrowse:Refresh } LOCAL oToolbarbot1, oButton1, oCombobox1, oLabel1 LOCAL VAR_KEY LOCAL oPanel LOCAL oToolbartop1 LOCAL oOwnerbutton1, oOwnerbutton3, oOwnerbutton2, oOwnerbutton4, oOwnerbutton5 LOCAL oOwnerbutton6, oOwnerbutton7, oOwnerbutton8, oOwnerbutton9 LOCAL F1 LOCAL oEdGoto LOCAL nRec := 1 LOCAL nLast := 0 LOCAL nI Al_FL01 := S_Open(FN_Faces) (Al_FL01)->(DBGOTOP()) oIcon1 := HIcon():AddResource("MainIcon3") INIT DIALOG oDlg TITLE fname ; AT 0,25 SIZE 1500,740 ; ICON oIcon1 ; STYLE WS_SYSMENU+WS_SIZEBOX+WS_VISIBLE MENU OF oDlg MENU TITLE TRS("Список F1") MENUITEM TRS("Список F1") ACTION Help_F1() ENDMENU MENU TITLE TRS("Отчеты") MENUITEM TRS('[1] Отчет 1') ACTION {||PRT_SPIS_W() } BITMAP ExePath +"IMAGE\MENU_3.bmp" MENUITEM TRS('[2] Отчет 2') ACTION {||PRT_OKLAD_SOTR_W(.F.,.F.) } BITMAP ExePath +"IMAGE\MENU_3.bmp" MENUITEM TRS('[3] Отчет 3') ACTION {||PRT_OKLAD_SOTR_W(.F.,.T.) } BITMAP ExePath +"IMAGE\MENU_3.bmp" ENDMENU MENU TITLE TRS("Выход") MENUITEM TRS("Выход из режима") ACTION oDlg:Close() ENDMENU ENDMENU @ 0,0 PANEL oPanel OF oDlg ; SIZE oDlg:nWidth-2,45 ; ON SIZE ANCHOR_TOPABS + ANCHOR_LEFTABS + ANCHOR_RIGHTABS @ 10,12 OWNERBUTTON oOwnerbutton1 OF oPanel ; ON CLICK {|| LSC1_W() } ; SIZE 32,32 ; BITMAP "KEY_EDIT" FROM RESOURCE TRANSPARENT ; TOOLTIP "ПРосмотр информации" @ 90,12 OWNERBUTTON oOwnerbutton3 OF oPanel ; ON CLICK {|| Print_F6()} SIZE 32,32 ; FLAT BITMAP "KEY_PRINT" FROM RESOURCE TRANSPARENT COLOR 12632256 ; TOOLTIP TRS("Печать") @ 130,12 OWNERBUTTON oOwnerbutton5 OF oPanel ON CLICK {|| Help_F1() } ; SIZE 32,32 ; FLAT BITMAP "KEY_NASTR" FROM RESOURCE TRANSPARENT COLOR 12632256 ; TOOLTIP TRS("Список клавиш режима.") @ 1, 70 BROWSE oBrowse DATABASE SIZE 1480, 600; STYLE WS_VSCROLL + WS_HSCROLL ; ON SIZE ANCHOR_LEFTABS + ANCHOR_RIGHTABS + ; ANCHOR_TOPABS + ANCHOR_BOTTOMABS + ; ANCHOR_TOPREL + ANCHOR_LEFTREL + ; ANCHOR_BOTTOMREL + ANCHOR_RIGHTREL ; ON GETFOCUS {|o|dbSelectArea(o:alias)} oBrowse:htbcolor := 0x777777 oBrowse:bcolorSel := BCOLOR_SEL oBrowse:tcolorSel := TCOLOR_SEL oBrowse:oStyleHead := oStyle oBrowse:ofont := oBrwFont oBrowse:alias := Al_FL01 oBrowse:aColumns := {} nArea := SELECT() kolf := FCount() ADD COLUMN {|| (Al_FL01)->W68 } TO oBrowse HEADER 'Таб.N' ; TYPE 'C' LENGTH 4 ADD COLUMN {|| (Al_FL01)->W00 } TO oBrowse HEADER 'Номер.' ADD COLUMN {|| (Al_FL01)->W01 } TO oBrowse HEADER 'Фамилия.' ADD COLUMN {|| (Al_FL01)->W02 } TO oBrowse HEADER PADC('Имя.',25) ADD COLUMN {|| (Al_FL01)->W03 } TO oBrowse HEADER PADC('Отчество.',25) ADD COLUMN {|| DTOC((Al_FL01)->W22) } TO oBrowse HEADER 'Дата рожд.' ; TYPE 'C' LENGTH 10 DEC 0 ADD COLUMN {|| (Al_FL01)->W41 } TO oBrowse HEADER 'СНИЛС.' ; TYPE 'C' LENGTH 15 DEC 0 ADD COLUMN {|| (Al_FL01)->W65 } TO oBrowse HEADER 'ИНН сотрудника' ADD COLUMN {|| DTOC((Al_FL01)->W04) } TO oBrowse HEADER 'Дата.' oBrowse:bScrollPos := {|o,n,lEof,nPos|hwg_VScrollPos(o,n,lEof,nPos)} oBrowse:bHScrollPos := {|o,n,lEof,nPos|hwg_HScrollPos(o,n,lEof,nPos)} FOR nI := 1 TO LEN(oBrowse:aColumns) oBrowse:aColumns[nI]:bColorBlock := {|| IF( EMPTY((Al_FL01)->W41) ,; {x_RED , x_WHITE , x_CYAN , x_GRAY} ,; {x_BLUE, x_WHITE , x_BLACK, x_YELLOW }) ; } NEXT nI oDlg:Activate() S_CLOSE(FN_Faces) // FL01 RETURN IIF( lMdi, oDlg:handle, oTabMain:GetActivePage() )

Ответов - 20

alkresin: Здравствуйте, должно работать. Попробуйте сделать короткий пример, который я мог бы воспроизвести. И укажите, что используете: версия HwGUI, windows или linux.

Aleksandr_D: Добрый день! Короткий пример и файл - https://disk.yandex.ru/d/36dU4gV9nO8L6Q "версия HwGUI" - windows. HWGUI 2.23 buld 2 (hwgui-2.23-b2.bcc). Компилятор C++ 5.5.1 #include "hwgui.ch" #include "MAIN.h" #include "dbstruct.ch" #include "error.ch" #include "hbdyn.ch" #include "simpleio.ch" #include "hbgtinfo.ch" #include "setcurs.ch" && GTWVT - вҐа¬Ё- « (б Ја дЁЄ®©) #include 'wvtwin.ch' #ifdef __UNIX__ #define DEF_SEP '/' #else #define DEF_SEP '\' #endif &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& FUNCTION TEST_1() &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& LOCAL hChild := '' LOCAL fname := TRS('‘Їа ў®з-ЁЄ - «®Ј®ўле ўлзҐв®ў') LOCAL oWindow, oBrowse, i, nArea, kolf LOCAL oStyle := HStyle():New( { 0xffffff, 0xbbbbbb }, 1 ) LOCAL oMsg LOCAL bCol1 := {|o,h,x1,y1,x2,y2| oStyle:Draw( h,x1,y1,x2,y2 ) RETURN Nil } LOCAL bPosChg := {|o| oBrowse:Refresh() } LOCAL oToolbarbot1, oButton1, oCombobox1, oLabel1 LOCAL VAR_KEY LOCAL oPanel LOCAL oToolbartop1 LOCAL oOwnerbutton1, oOwnerbutton3, oOwnerbutton2, oOwnerbutton4, oOwnerbutton5 LOCAL F1 PUBLIC aBrwFont := { "MS Sans Serif", "0", "-13" }, oBrwFont, oMainFont PUBLIC lMdi := .T. gl_CpageRU1251 := "RU1251" hb_cdpSelect( gl_CpageRU1251 ) // gl_CpageRU1251 := "RU1251" / gl_CpageRU866 := "RU866" Use 'SNV' Shared Alias SNV al_NalV := ALIAS() (al_NalV)->(DBSETORDER()) // KODNV oIcon1 := HIcon():AddResource("MainIcon3") oBrwFont := HFont():Add( aBrwFont[1], Val(aBrwFont[2]), Val(aBrwFont[3]) ) INIT DIALOG oDlg TITLE fname ; AT 0,25 SIZE 1500,600 ; ICON oIcon1 ; STYLE WS_SYSMENU+WS_SIZEBOX+WS_VISIBLE SET KEY 0,VK_F6 TO RK_BRSNALV(2) SET KEY 0,VK_F5 TO hwg_Msginfo("F5") SET KEY 0,VK_F7 TO RK_BRSNALV(10) @ 0,0 PANEL oPanel OF oDlg ; SIZE oDlg:nWidth-2,45 ; ON SIZE ANCHOR_TOPABS + ANCHOR_LEFTABS + ANCHOR_RIGHTABS @ 10,12 OWNERBUTTON oOwnerbutton1 OF oPanel ; ON CLICK {|| RK_BRSNALV(3)}; SIZE 32,32 ; BITMAP "KEY_EDIT" FROM RESOURCE TRANSPARENT ; TOOLTIP TRS("ђҐ¤ ЄвЁа®ў -ЁҐ") @ 1, 70 BROWSE oBrowse DATABASE OF oDlg ; ON SIZE {|o,x,y|o:Move( ,,x,y-38 ) } oBrowse:bPosChanged := bPosChg oBrowse:htbcolor := 0x777777 oBrowse:bcolorSel := BCOLOR_SEL oBrowse:tcolorSel := TCOLOR_SEL oBrowse:oStyleHead := oStyle oBrowse:ofont := oBrwFont nArea := Select() kolf := FCount() oBrowse:alias := ALIAS() oBrowse:aColumns := {} ADD COLUMN {|| field->KODNV } TO oBrowse ; HEADER TRS('Љ®¤') ; TYPE 'C' LENGTH 3 DEC 0 ; COLORBLOCK {|| _COLOR_() } ADD COLUMN {|| field->NAME } TO oBrowse ; HEADER PADC(TRS('Ќ Ё¬Ґ-®ў -ЁҐ Є®¤  - «®Ј®ў®Ј® ўлзҐв '),55) ; TYPE 'C' LENGTH 55 DEC 0 ; COLORBLOCK {|| _COLOR_() } ADD COLUMN {|| field->SUM_NV } TO oBrowse ; HEADER PADC(TRS('‘㬬  ўлзҐв '),17) ; JUSTIFY LINE DT_RIGHT ; PICTURE '999 999 999.99' ; COLORBLOCK {|| _COLOR_() } ADD COLUMN {|| DTOC(field->DAT_BEG) } TO oBrowse ; HEADER TRS('„ в  - з.') ; COLORBLOCK {|| _COLOR_() } ADD COLUMN {|| DTOC(field->DAT_END) } TO oBrowse ; HEADER TRS('„ в  § ў.') ; TYPE 'C' LENGTH 10 DEC 0 ; COLORBLOCK {|| _COLOR_() } oBrowse:lAppable := .T. oBrowse:bScrollPos := {|o,n,lEof,nPos|hwg_VScrollPos(o,n,lEof,nPos)} oBrowse:lInFocus := .T. oBrowse:freeze := 1 oBrowse:Refresh() //*- Refresh() oDlg:Activate() (al_NalV)->( dbCloseArea() ) gl_CpageRU866 := "RU866" hb_cdpSelect( gl_CpageRU866 ) RETURN IIF( lMdi, oDlg:handle, oTabMain:GetActivePage() ) //*- RETURN hwg_EndWindow() &&*=±°±=**=±°±=**=±°±=**=±°±=**=±°±=**=±°±=**=±°±=**=±°±=**=±°±=**=±°±=**=±°±=* STATIC FUNCTION RK_BRSNALV(pnKey) &&********************************************************** IF pnKey = 3 hwg_msgInfo( TRS("Ќ ¦ в  Є« ўЁи  3 ") ) ELSE hwg_msgInfo( TRS("Ќ ¦ в  Є« ўЁи  ... ") ) ENDIF RETURN .T. &&*=±°±=**=±°±=**=±°±=**=±°±=**=±°±=**=±°±=**=±°±=**=±°±=**=±°±=**=±°±=**=±°± FUNCTION TRS( pcString ) &&********************************************************** &&PUBLIC gl_CpageRU1251 := "RU1251" &&PUBLIC gl_CpageRU866 := "RU866" && LOCAL RetVal := '' RetVal := hb_Translate( pcString , "RU866", "RU1251" ) RETURN RetVal &&*=±°±=**=±°±=**=±°±=**=±°±=**=±°±=**=±°±=**=±°±=**=±°±=**=±°±=**=±°±=**=±°±=* STATIC FUNCTION _COLOR_() &&********************************************************** /* #define x_BLUE 16711680 #define x_DARKBLUE 10027008 #define x_WHITE 16777215 #define x_CYAN 16776960 #define x_BLACK 0 #define x_RED 255 #define x_GREEN 32768 #define x_GRAY 8421504 #define x_YELLOW 65535 */ LoCAL RetVal := {} IF (al_NalV)->SUM_NV <= 0 ; RetVal := {x_RED, x_WHITE, x_CYAN, x_GRAY} ELSE ; RetVal := {x_BLUE, x_WHITE , x_BLACK, x_YELLOW } ENDIF RETURN RetVal

alkresin: Вы сами пробовали откомпилировать и запустить этот prg? Main.h не приложен. Я его закомментировал, но теперь куча предупреждений о необъявленных переменных. > HWGUI 2.23 buld 2 А свежую версию не пробовали? У меня build 2 и не осталось, чтобы именно с ним проверить


Aleksandr_D: Александр, добрый день! Аналогичная ситуация с версией HWGUI 2.23 bild 7 (hwgui-2.23-b7) В поставке hwgui-2.23-b7.bcc в директории LIB отсутствует файл HWGUIMT.lib

alkresin: Ну все-таки приведите в порядок prg, чтобы я мог его нормально откомпилировать

Aleksandr_D: Файл main.h /* * $Id: dbchw.h 2718 2018-12-05 06:30:40Z alkresin $ */ #define AF_LEN 10 #define AF_NAME 1 #define AF_EXCLU 2 #define AF_RDONLY 3 #define AF_DRIVER 4 #define AF_LOCAL 5 #define AF_PASS 6 #define AF_ALIAS 7 #define AF_LFLT 8 #define AF_BRW 9 #define AF_CP 10 #define OPENED_FILES_LIMIT 15 #define LOCAL_SERVER 1 #define REMOTE_SERVER 2 #define BCOLOR_SEL 0xDDDDDD #define TCOLOR_SEL 0

alkresin: По-прежнему куча предупреждений: test.prg(72) Warning W0002 Ambiguous reference, assuming memvar 'ABRWFONT' test.prg(73) Warning W0002 Ambiguous reference, assuming memvar 'LMDI' test.prg(75) Warning W0001 Ambiguous reference 'GL_CPAGERU1251' test.prg(76) Warning W0001 Ambiguous reference 'GL_CPAGERU1251' test.prg(79) Warning W0001 Ambiguous reference 'AL_NALV' test.prg(81) Warning W0001 Ambiguous reference 'AL_NALV' test.prg(83) Warning W0001 Ambiguous reference 'OICON1' test.prg(85) Warning W0002 Ambiguous reference, assuming memvar 'ABRWFONT' test.prg(85) Warning W0002 Ambiguous reference, assuming memvar 'ABRWFONT' test.prg(85) Warning W0002 Ambiguous reference, assuming memvar 'ABRWFONT' test.prg(85) Warning W0001 Ambiguous reference 'OBRWFONT' test.prg(90) Warning W0001 Ambiguous reference 'OICON1' test.prg(90) Warning W0001 Ambiguous reference 'ODLG' test.prg(98) Warning W0001 Ambiguous reference 'ODLG' test.prg(98) Warning W0001 Ambiguous reference 'ODLG' test.prg(107) Warning W0001 Ambiguous reference 'ODLG' test.prg(114) Warning W0001 Ambiguous reference 'OBRWFONT' test.prg(154) Warning W0001 Ambiguous reference 'ODLG' test.prg(156) Warning W0001 Ambiguous reference 'AL_NALV' test.prg(158) Warning W0001 Ambiguous reference 'GL_CPAGERU866' test.prg(159) Warning W0001 Ambiguous reference 'GL_CPAGERU866' test.prg(161) Warning W0001 Ambiguous reference 'LMDI' test.prg(161) Warning W0001 Ambiguous reference 'ODLG' test.prg(161) Warning W0001 Ambiguous reference 'OTABMAIN' test.prg(206) Warning W0001 Ambiguous reference 'AL_NALV' test.prg(206) Warning W0001 Ambiguous reference 'X_RED' test.prg(206) Warning W0001 Ambiguous reference 'X_WHITE' test.prg(206) Warning W0001 Ambiguous reference 'X_CYAN' test.prg(206) Warning W0001 Ambiguous reference 'X_GRAY' test.prg(207) Warning W0001 Ambiguous reference 'X_BLUE' test.prg(207) Warning W0001 Ambiguous reference 'X_WHITE' test.prg(207) Warning W0001 Ambiguous reference 'X_BLACK' test.prg(207) Warning W0001 Ambiguous reference 'X_YELLOW' На X_BLUE программа и вылетает. Вы все-таки проверяйте код перед тем, как посылать его

Aleksandr_D: Собрал отдельно - все работает. А вот в составе системы наблюдаются вышеуказанные ошибки. В чём могут быть проблемы? Тексты. Сборка: hbmk2 TEST.hbp Ссылка: https://disk.yandex.ru/d/Rjbf5aKiB1zNaA

alkresin: Aleksandr_D пишет: Собрал отдельно - все работает. А вот в составе системы наблюдаются вышеуказанные ошибки Даже не знаю... Раз проблемы при работе в составе системы, то надо это в составе системы и проверять. Может, hwg_VScrollPos() где-нибудь переопределена. Я бы еще проверил, не оказалось ли почему-то пустым oBrowse:bScrollPos - на кнопку повесил бы проверку. И постарайтесь избавиться от предупреждений.

Aleksandr_D: Спасибо за советы. Буду проверять.

Aleksandr_D: alkresin пишет: Раз проблемы при работе в составе системы, то надо это в составе системы и проверять. Может, hwg_VScrollPos() где-нибудь переопределена. Я бы еще проверил, не оказалось ли почему-то пустым oBrowse:bScrollPos - на кнопку повесил бы проверку. Функция hwg_VScrollPos() не переопределена. Есть не пустая проверка oBrowse:bScrollPos := {|o,n,lEof,nPos|hwg_VScrollPos(o,n,lEof,nPos)} Убрал параметр: "STYLE WS_VSCROLL + WS_HSCROLL " из строки "@ ... BROWSE ... " и режим заработал. "До" @ 1, 70 BROWSE oBrowse DATABASE OF oDlg SIZE 1480, 600 ; STYLE WS_VSCROLL + WS_HSCROLL ; ON SIZE {|o,x,y|o:Move( ,,x,y-3 ) } "После" @ 1, 70 BROWSE oBrowse DATABASE OF oDlg SIZE 1480, 600 ; ON SIZE {|o,x,y|o:Move( ,,x,y-3 ) }

alkresin: Aleksandr_D пишет: Убрал параметр: "STYLE WS_VSCROLL + WS_HSCROLL " из строки "@ ... BROWSE ... " и режим заработал. Более чем странно, такого не должно быть. Стиль WS_VSCROLL ставится по умолчанию, его можно не указывать - но если указать - не помешает.

Aleksandr_D: Редко возникают вот такие ошибки см. ниже. Как получены: на вертикальной полосе прокрутки мышкой захватываю бегунок. Затем начинаю перемещать его. Вверх-вниз. После 8-15 -ти перемещений , иногда, возникают ошибки. ------------------------------------------------------------------------ Error BASE/1004 No exported method: ADD Called from (b)HWG_ERRSYS(20) Called from ADD(0) Called from HBROWSE:LINEOUT(1120) Called from HBROWSE:PAINT(819) Called from HBROWSE:ONEVENT(317) Called from HWG_DLGBOXINDIRECT(0) Called from HDIALOG:ACTIVATE(176) Called from BBR_SPISSOTR_GUI(714) Called from BBR_SPISSOTR_GUI_V(65) Called from (b)MAIN(522) Called from ONCOMMAND(645) Called from (b)HMAINWINDOW(302) Called from HMAINWINDOW:ONEVENT(408) Called from HWG_ACTIVATEMDIWINDOW(0) Called from HMAINWINDOW:ACTIVATE(390) Called from MAIN(1023) HWGUI 2.23 Build 7 Date:25/01/2024 Time:14:14:35 ------------------------------------------------------------------------ Application Internal Error - K:\ROUNDN\RABM_1\ZZPP_W.exe Terminated at: 2024-01-25 14:04:44 Unrecoverable error 9001: Error recovery failure Called from HBROWSE:LINEOUT(1117) in source\winapi\hbrowse.prg Called from HBROWSE:PAINT(794) in source\winapi\hbrowse.prg Called from HBROWSE:ONEVENT(317) in source\winapi\hbrowse.prg Called from HWG_DLGBOXINDIRECT(0) Called from HDIALOG:ACTIVATE(176) in source\winapi\hdialog.prg Called from SPR_NAL_V_GUI(173) in SPRNALVW.PRG Called from (b)MAIN(893) in MAIN.prg Called from ONCOMMAND(645) in source\winapi\hwindow.prg Called from (b)HMAINWINDOW(302) in source\winapi\hwindow.prg Called from HMAINWINDOW:ONEVENT(408) in source\winapi\hwindow.prg Called from HWG_ACTIVATEMDIWINDOW(0) Called from HMAINWINDOW:ACTIVATE(390) in source\winapi\hwindow.prg Called from MAIN(1023) in MAIN.prg ------------------------------------------------------------------------

alkresin: Что до hwguimt.lib, то вместо нее можно смело использовать hwgui.lib - разницы нет. Когда-то кто-то включил в makefile для bcc строки, чтобы собирать hwguimt.lib, но какого-то специального кода для mt в HwGUI нет. На мой взгляд, нет большого смысла в том, чтобы создавать/использовать элементы интерфейса в разных потоках. Интерфейс может быть в главном потоке, а какие-то длительные вычисления, параллельные запросы в Интернет можно запускать в других потоках. У меня так сделан, например, rss reader.

alkresin: Aleksandr_D пишет: на вертикальной полосе прокрутки мышкой захватываю бегунок. Затем начинаю перемещать его. Вверх-вниз. После 8-15 -ти перемещений , иногда, возникают ошибки. Хм... Не наблюдал такого. Сейчас специально запустил dbchw (utils/dbc), открыл файл, долго возил бегунок - все нормально. И в той строчке стоит HBrush():Add()- т.е., No exported method: ADD говорит о том, что у класса HBrush (не объекта) нет метода Add. Если бы речь шла об объекте, можно было бы предположить, что в переменной оказался не тот объект или вообще не объект. А в данном случае имеет место что-то глубоко внутри (internal error)

Aleksandr_D: Убрал библиотеку hwguimt.lib и опцию при сборке -mt - работает стабильно. Ещё раз проверил проверил метод ADD для класса HBrush - не корректностей не нашёл. Тем более, что при обычной, штатной работе с бегунком режим работает стабильно. "... а какие-то длительные вычисления, параллельные запросы в Интернет можно запускать в других потоках. У меня так сделан, например, rss reader." - Спасибо за ссылку.

Aleksandr_D: Александр, добрый день! Не подскажите как лучше в HWGUI при построении Browse() перемещение по записям заданными индексным выражением. Пример (реализация в терминальной версии): cKod := Код выборки Открываю файл. Индекс KOD + …. (Код выборки + …) DBGOTOP() IF DBSEEK(cKod) oTbl := TBrowseDB(10,1,MaxRow(),MaxCol())параметры oTbl:skipBlock := {|x| Skipbb(x,{|| !(field->KOD=cKOD) } ) } oTbl:goBottomBlock := { || BOT(cKOD) } oTbl:goTopBlock := { || TOP(cKOD) } ………… ENDIF FUNCTION skipbb(n,f_lt) &&********************************************************** && Функция листания. Сверху определен код-блок для определения границ local i := 0 if ( lastrec() != 0 ) if (n == 0) dbskip(0) //обновим запись if !eof().and.eval(f_lt) //если удовлетворяет код-блоку dbgoto(-1) //посылаем на lastrec()+1=>bof()==eof()==.t. endif return 0 endif if (n > 0) //необходимо переместиться вниз if eof() return 0 endif while i < n dbskip() //перемещаемся вниз пока удовл-ем условиям if eof().or.eval(f_lt) dbskip(-1) exit //возврат на сколько смогли переместиться endif i++ enddo else //( n < 0 )необходимо переместиться вверх while ( i > n ) dbskip(-1) if bof().or.eval(f_lt) if(bof(),,dbskip()) exit endif i-- enddo endif endif return (i) FUNCTION bot(x) &&********************************************************** && Функция конца файла: Передается постоянная часть индекса if empty(x) dbgobottom() else dbseek(addascii(x,1)) dbskip(-1) if &(indexkey()) != x dbgoto(-1) //Go LASTREC()+1 endif endif return nil function top(x) &&********************************************************** && Функция начала файла: Передается постоянная часть индекса if empty(x) dbgotop() else if(dbseek(x),,dbgoto(-1)) endif return (nil)

alkresin: Если я правильно понял то, что вы имели ввиду, то вам надо просто установить scope на "постоянную часть индекса" с помощью функции ordscope().

alkresin: Если без scope, можно переопределить кодоблоки bSkip, bGoTo, bGoTop, bGoBot, bEof, bBof, bRcou, bRecno, bRecnoLog - примерно как в вашем примере. oBrowse:bSkip := ... Другой вариант, я его использовал еще в клипперовские времена, это обойти все записи, входящие в выбранный диапазон и построить массив, содержащий номера записей, а потом сделать browse array.

Aleksandr_D: Ясно. Спасибо за информацию.



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