Форум » GUI » Новая версия Расширенного релиза библиотеки MiniGUI (часть VI ) (продолжение) » Ответить
Новая версия Расширенного релиза библиотеки MiniGUI (часть VI ) (продолжение)
gfilatov: Начало темы находится здесь, а теперь АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Готовится к опубликованию новая сборка №48, которая выйдет в конце недели. Если у Вас есть интересные наработки для включения в новый релиз, то сейчас самое удобное время для их отправки мне Кратко, что нового: - исправление обнаруженных ошибок и неточностей кода; - новый класс HEADERIMAGE для Grid и Browse; - свойство Address в Hyperlink может теперь открывать папку или файл на диске; - добавлен NOTABSTOP класс для Browse; - поддержка пользовательских компонентов (заимствована из оффициального релиза); - расширения и исправления в библиотеках TsBrowse и PropGrid; - обновлены сборки Харбор и HMGS-IDE; - новые и обновленные старые примеры (как обычно ).
SergKis: gfilatov2002 Может вместо STATIC PROCEDURE AddIfUnique( aList, cName ) сделать (полезная ф-я)[pre2] *-----------------------------------------------------------------------------* FUNCTION HMG_AddIfUnique( aList, cName ) *-----------------------------------------------------------------------------* IF ! Empty( cName ) .AND. AScan( aList, cName, , , .T. ) == 0 AAdd( aList, cName ) RETURN .T. ENDIF RETURN .F. [/pre2]
gfilatov2002: SergKis пишет: Может вместо STATIC PROCEDURE AddIfUnique( aList, cName ) сделать Да, конечно. Благодарю за предложение
SergKis: и еще добавить в h_dbf_aux *-----------------------------------------------------------------------------* FUNCTION HMG_ConvertType( uVal, cTypeDst ) *-----------------------------------------------------------------------------* RETURN ConvertType( uVal, cTypeDst )
SergKis: gfilatov2002 На ftp положил предложение, комментарий в demo.prg
SergKis: gfilatov2002 Можно сделать в ф-ях: SetProperty( Arg1 , ... ) GetProperty( Arg1 , ... ) DoMethod ( Arg1 , ... ) Default Arg1 := _HMG_ThisFormName Для использования в блоках кода, получаемых b := &("{|| ... }"), т.к. имя тек. формы не известно - получается динамически от FormName := HMG_GetUniqueName("..."), например
gfilatov2002: SergKis пишет: Default Arg1 := _HMG_ThisFormName Думаю, это можно записать таким образом: IF ! Empty( _HMG_ThisFormName ) Default Arg1 := _HMG_ThisFormName ENDIF Благодарю за предложение
SergKis: gfilatov2002 пишет IF ! Empty( _HMG_ThisFormName ) Это не имеет смысла, т.к. пишем SetProperty(, ...), т.е. будет прерывание при Empty( _HMG_ThisFormName ) и не заданном Arg1, надо использовать SET WINDOW THIS TO ... до исп. SetProperty(, ...). использование в оконных событиях и при _wPost(...), _wSend(...) событиях все будет ok!
gfilatov2002: SergKis пишет: Это не имеет смысла Понял, спасибо за разъяснение.
SergKis: gfilatov2002 Внес изменения в hmg 25.09 (ранее на ftp давал, сейчас свежие), положил на ftp, MDI пока не трогал В demo.prg варианты использования. Default Arg1 := _HMG_ThisFormName сделал
SergKis: gfilatov2002 Положил расширенный вариант примера на ftp
gfilatov2002: SergKis пишет: Положил расширенный вариант примера OK
SergKis: gfilatov2002 Предложение добавить [pre2] SetProperty( Arg1 , ... ) ... Default Arg1 := _HMG_ThisFormName IF PCount() > 3 Default Arg2 := _HMG_ThisControlName ENDIF ... GetProperty( Arg1 , ... ) DoMethod ( Arg1 , ... ) ... Default Arg1 := _HMG_ThisFormName IF PCount() > 2 Default Arg2 := _HMG_ThisControlName ENDIF ... для вариантов ... ON MOUSEHOVER {|| SetProperty(,, 'Backcolor', GetProperty(,, 'Cargo', aBtnBClr2)) , SetProperty(,, 'Fontcolor', GetProperty(,, 'Cargo', aBtnFClr2)) } ; ON MOUSELEAVE {|| SetProperty(,, 'Backcolor', GetProperty(,, 'Cargo', aBClr)), SetProperty(,, 'Fontcolor', GetProperty(,, 'Cargo', aFClr) } ; ... [/pre2]
gfilatov2002: SergKis пишет: Предложение добавить Принято. Благодарю за помощь
Andrey: Andrey пишет: Версия МиниГуи 25.06Pro MsgDebug() портит текущий АЛИАС базы !!! Разобрался с такой ошибкой ! Если в ТСБ назначить клавиши F3, F4, ... на не существующие события на окне, то происходит такая фигня. Лечится только перепроверкой своего кода.
SergKis: gfilatov2002 Положил на ftp вариант и для MDI с примерами
SergKis: gfilatov2002 Предложение отключать VerifyControlDefined(), возникающая ошибка, достаточно, понятна и без доп. контроля[pre2] STATIC s_lVerifyControl := .T. ... FUNCTION GetProperty ( Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8 ) ... LOCAL cHeader, nAlignHeader, cFooter, nAlingFooter, nState IF IsLogical( Arg1 ) ; RETURN s_lVerifyControl ENDIF Default Arg1 := _HMG_ThisFormName ... PROCEDURE SetProperty( Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8 ) ... LOCAL cMacro, cProc #endif IF IsLogical( Arg1 ) ; s_lVerifyControl := Arg1 ; RETURN ENDIF Default Arg1 := _HMG_ThisFormName ... STATIC PROCEDURE VerifyControlDefined ( cParentName , cControlName ) *-----------------------------------------------------------------------------* IF s_lVerifyControl .AND. ! Empty ( cControlName ) ; .AND. ! _IsControlDefined ( cControlName , cParentName ) MsgMiniGuiError ( "Control: " + cControlName + " Of " + cParentName + " Not defined." ) ENDIF RETURN [/pre2]
SergKis: PS. В готовом модуле, такая проверка не нужна (лишняя), в ini всегда можно иметь настройку [COM] ... lVerifyControl = .T. ; .T. - ON , .F. - OFF ... и команду SetProperty(App.Cargo:oIni:COM:lVerifyControl) в INIT PROCEDURE ...
gfilatov2002: SergKis пишет: В готовом модуле, такая проверка не нужна (лишняя) Переписал эту функцию таким образом: [pre2] *-----------------------------------------------------------------------------* STATIC PROCEDURE VerifyControlDefined ( cParentName , cControlName ) *-----------------------------------------------------------------------------* IF Set( _SET_DEBUG ) .AND. !Empty ( cControlName ) .AND. !_IsControlDefined ( cControlName , cParentName ) MsgMiniGuiError ( "Control: " + cControlName + " Of " + cParentName + " Not defined." ) ENDIF RETURN [/pre2] Теперь можно управлять этой функцией с помощью установки отладочного режима в приложении: AltD( 1 )
SergKis: gfilatov2002 пишет AltD(1) Это немного не то. Если на окне ~50 LABEL+GETBOX, то будет поиск по списку контролов, как минимум, 2-а раза 1. VerifyControlDefined ( cParentName , cControlName ) 2. Для запрошенного действия над контролом. И это может быть не единственное окно и список контролов достаточно большой. В отлаженной программе 1-ый пункт не нужен - лишний прогон поиска, по мне, это приобретение ф-ии не лучшее. В версии hmg от 2012 года не было VerifyControlDefined (...) совсем и все OK! сообщения будут ~ такими, достаточно однотипными, что для отлаженной программы (редкое срабатывание) [pre2] Error BASE/1132 Переполнение массива: Неверное количество аргументов Args: [1] = A { ... } length: 24 [2] = N 0 Called from _SETVALUE(287) in module: h_controlmisc.prg Called from SETPROPERTY(4397) in module: h_controlmisc.prg Called from (b)MAIN(124) in module: demo.prg ...[/pre2] вполне читаемо
gfilatov2002: gfilatov2002 пишет: можно управлять этой функцией с помощью установки отладочного режима Видимо, я высказался непонятно. Теперь в отлаженной программе НЕ будет такой проверки. Если потребуется делать такую проверку, то это возможно в режиме отладки, который включается с помощью вызова AltD(1)
полная версия страницы