Готовится к опубликованию новая сборка №48, которая выйдет в конце недели. Если у Вас есть интересные наработки для включения в новый релиз, то сейчас самое удобное время для их отправки мне
Кратко, что нового:
- исправление обнаруженных ошибок и неточностей кода; - новый класс HEADERIMAGE для Grid и Browse; - свойство Address в Hyperlink может теперь открывать папку или файл на диске; - добавлен NOTABSTOP класс для Browse; - поддержка пользовательских компонентов (заимствована из оффициального релиза); - расширения и исправления в библиотеках TsBrowse и PropGrid; - обновлены сборки Харбор и HMGS-IDE; - новые и обновленные старые примеры (как обычно ).
У меня большая система, чистку памяти делаю ври входе и выходе в TBROWSE, но всё равно прога ПЕРИОДИЧЕСКИ падает после 4-5 часов работы. Юзер постоянно открывает, то одну/другую/третью/четвертую таблицу. Связано ли это с утечкой памяти в TBROWSE ? Очистку от хендов иконок сделал уже.
Эти ресурсы должны очищаться с помощью метода Destroy() в классе TSBROWSE. Но этот метод НЕ срабатывает, поскольку TBROWSE не получает от системы сообщение WM_DESTROY. Я попытался сделать этот метод деструктором класса, но он все равно НЕ отрабатывает. Сейчас ищу другой способ запустить этот метод на выполнение призакрытии окна, которое содержит элемент управления TBROWSE.
SergKis
постоянный участник
Пост N: 4577
Зарегистрирован: 17.02.12
Отправлено: 26.05.24 15:01. Заголовок: gfilatov2002 пишет С..
gfilatov2002 пишет
цитата:
Сейчас ищу другой способ запустить этот метод на выполнение призакрытии окна, которое содержит элемент управления TBROWSE.
Так должен срабатывать цикл WM_DESTROY окна, т.е.
**************************************************************************** CASE WM_DESTROY ****************************************************************************
i := AScan ( _HMG_aFormHandles , hWnd )
IF i > 0
#ifndef __XHARBOUR__ // Remove All HMG_* Properties IF Len( EnumProps( hWnd ) ) > 0 EnumPropsEx( hWnd, {|hWnd, cPropName, hHandle| HB_SYMBOL_UNUSED( hHandle ), ; iif( hb_LeftEqI( cPropName, "HMG_" ), RemoveProp( hWnd, cPropName ), Nil ), .T. } ) ENDIF #endif // Remove Child Controls FOR EACH r IN _HMG_aControlParentHandles IF r == hWnd x := hb_enumindex ( r ) IF _HMG_aControlType [x] == "MESSAGEBAR" _ReleaseControl ( "StatusBar" , GetParentFormName( x ) ) ELSE _EraseControl ( x , i ) ENDIF ENDIF NEXT ...
_HMG_aControlType[ k ] := "TBROWSE" _HMG_aControlNames[ k ] := ControlName _HMG_aControlHandles[ k ] := ControlHandle _HMG_aControlParenthandles[ k ] := ParentFormHandle _HMG_aControlIds[ k ] := oBrw ... имеем, значит имеем и _HMG_aControlIds[ k ]:Destroy()
PS. Добавить в _EraseControl ( i, p ) обработку CASE t == 'TBROWSE'
RETURN ::hBrush Если поискать "CreateSolidBrush" в prg, то есть и др. места ...
PS. Если взять простой вариант окна MDI, то тоже остается BRUSH не освобожденный DEFINE WINDOW &cForm AT nY, nX WIDTH nW HEIGHT nH TITLE om:cTitle ; MINWIDTH nWm MINHEIGHT nHm ; MAIN MDI TOPMOST ; BACKCOLOR cBClr ; ON INIT _wPost( 0) ; ON RELEASE _wSend(90) ; ON INTERACTIVECLOSE ( _wSend(98), This.Cargo:lClose ) This.Cargo := oHmgData() ; oMain := This.Object
Отправлено: 26.05.24 17:30. Заголовок: gfilatov2002 пишет С..
gfilatov2002 пишет
цитата:
Сейчас остался не удаленным только один BRUSH
С ним, пока и не понятно, т.к. _TBROWSE(559) -> DEFINE TBROWSE &cBrw OBJ oBrw AT nY, nX WIDTH nW HEIGHT nH CELL ; ... BRUSH aBrush ; ... т.е. это FUNCTION _DefineTBrowse( ControlName, ParentFormName, nCol, nRow, nWidth, nHeight, ; ... и дальше параметр aBrush смотрим
Andrey
постоянный участник
Пост N: 7764
Зарегистрирован: 12.09.06
Отправлено: 26.05.24 22:20. Заголовок: Вопрос по теме удале..
:aColumns[2]:aBitMaps := oTsb:aBmp1[2] :aColumns[2]:uBmpCell := oTsb:aBmp1[3] // там далее смена картинки по алгоритму в myLoadBmpTsb(...) ....
То нафига НУЖНО удалять хендлы из oTsb:aBmp1 если эта переменная LOCAL и после закрытия этой функции переменная oTsb удалиться ????? Или я чего то не знаю ?
ELSE ... h_events.prg ------------ **************************************************************************** CASE WM_DESTROY **************************************************************************** ... // Remove Child Controls FOR EACH r IN _HMG_aControlParentHandles IF r == hWnd x := hb_enumindex ( r ) IF _HMG_aControlType [x] == "MESSAGEBAR" _ReleaseControl ( "StatusBar" , GetParentFormName( x ) ) ELSEIF _HMG_aControlType [x] == "TBROWSE" //!!! _HMG_aControlIds [x]:Destroy() //!!! ELSE _EraseControl ( x , i ) ENDIF ENDIF NEXT ...
Сборка примера Advanced\Tsb_oHmgData\demo.prg дает (OBJ удалил)Скрытый текст
Harbour 3.2.0dev (r2402161723) Copyright (c) 1999-2021, https://harbour.github.io/ Borland Resource Compiler Version 5.40 Copyright (c) 1990, 1999 Inprise Corporation. All rights reserved. OBJ\demo.c: OBJ\Column_TSB.c: OBJ\demo_tsb.c: OBJ\demo_menu.c: OBJ\demo_menu_find.c: OBJ\demo_print.c: OBJ\demos_util.c: OBJ\demos_about.c: OBJ\demos_use.c: OBJ\demo2_tsb_func.c: OBJ\util_button.c: OBJ\util_keychar.c: OBJ\cell_edit_memo.c: OBJ\_hbmkaut_demo.c: Turbo Incremental Link 5.69 Copyright (c) 1997-2005 Borland Error: Unresolved external '_HB_FUN__ADDNEWGLOBAL' referenced from C:\MINIGUIBCC58\LIB\MINIGUI.LIB|h_ini Error: Unresolved external '_HB_FUN__SETGETGLOBAL' referenced from C:\MINIGUIBCC58\LIB\MINIGUI.LIB|h_ini Error: Unresolved external '_HB_FUN_HMG_GET' referenced from C:\MINIGUIBCC58\LIB\MINIGUI.LIB|h_getbox Error: Unresolved external '_HB_FUN_CHECKSTATIC' referenced from C:\MINIGUIBCC58\LIB\MINIGUI.LIB|h_windows Error: Unresolved external '_HB_FUN__SETGETNAMESLIST' referenced from C:\MINIGUIBCC58\LIB\MINIGUI.LIB|h_pubfunc Error: Unresolved external '_HB_FUN_ALERTSTOP' referenced from C:\MINIGUIBCC58\LIB\MINIGUI.LIB|errorsys Error: Unresolved external '_HB_FUN_ALERTINFO' referenced from C:\MINIGUIBCC58\SAMPLES\_TEST\_TSB_OHMGDATA9\OBJ\DEMO2_TSB_FUNC.OBJ Error: Unresolved external '_HB_FUN_ALERTYESNO' referenced from C:\MINIGUIBCC58\SAMPLES\_TEST\_TSB_OHMGDATA9\OBJ\DEMO_TSB.OBJ Error: Unresolved external '_HB_FUN_ALERTOKCANCEL' referenced from C:\MINIGUIBCC58\SAMPLES\_TEST\_TSB_OHMGDATA9\OBJ\DEMO_MENU.OBJ hbmk2[demo]: Error: Running linker. 2
Беру версию hmg-24.04, повторяю правки, пересобираю примеры Advanced\Tsb_oHmgData -> все OK!
Я уже исправил эту утечку ресурсов похожим кодом. Заодно поправил код в классе TGetBox, чтобы освобождались ресурсы при выходе из режима редактирования полей.
Без выделенной строки сообщение BRUSH из txt файла не уходило, сделав DoEvents(), условную задержку, все стало работать. Поставил везде ::hBrush := NIL, как вариант принудительного сброса адреса и выполненных доп. команд.
Идея понятна, но после этих изменений начались проблемы с цветом заголовков и подвала - везде черный цвет. Вернул старый файл обратно - все стало нормально...
SergKis
постоянный участник
Пост N: 4584
Зарегистрирован: 17.02.12
Отправлено: 01.06.24 16:43. Заголовок: gfilatov2002 пишет н..
gfilatov2002 пишет
цитата:
начались проблемы с цветом заголовков и подвала - везде черный цвет.
Завершена подготовка новой сборки 24.06, которая будет опубликована на следующей неделе.
Что нового: - исправление обнаруженных ошибок; - добавлена новая функция HMG_GetUniqueName( [<NamePrefix>] ) и идентификатор пустого имени NUL для создания элемента управления без необходимости указания его имени (удобно, например, для безымянных меток Label); - важное обновление библиотеки TSBrowse (спасибо, Сергей!) - обновлены Харбор, библиотеки SqlRdd, PdfPrinter и Sqlite3; - добавлены новые и обновлены старые примеры для демонстрации новых возможностей библиотеки.
Все даты в формате GMT
3 час. Хитов сегодня: 103
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет