Форум » GUI » Новая версия Расширенного релиза библиотеки MiniGUI (часть VI ) (продолжение) » Ответить

Новая версия Расширенного релиза библиотеки MiniGUI (часть VI ) (продолжение)

gfilatov: Начало темы находится здесь, а теперь АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Готовится к опубликованию новая сборка №48, которая выйдет в конце недели. Если у Вас есть интересные наработки для включения в новый релиз, то сейчас самое удобное время для их отправки мне Кратко, что нового: - исправление обнаруженных ошибок и неточностей кода; - новый класс HEADERIMAGE для Grid и Browse; - свойство Address в Hyperlink может теперь открывать папку или файл на диске; - добавлен NOTABSTOP класс для Browse; - поддержка пользовательских компонентов (заимствована из оффициального релиза); - расширения и исправления в библиотеках TsBrowse и PropGrid; - обновлены сборки Харбор и HMGS-IDE; - новые и обновленные старые примеры (как обычно ).

Ответов - 300, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All

gfilatov2002: SergKis пишет: при потере фокуса по кнопке или клику по main окну, modal должна убраться. Работает немного по-другому: модальное окно закрывается при вызове после него любого дочернего окна. Если свойство FlashExit у модального окна не определено, то оно не даст переключиться на новое окно и будет "мигать"

SergKis: gfilatov2002 пишет модальное окно закрывается при вызове после него любого дочернего окна Принимает только след. модальное wModal2 (wChild не проходит) и wModal не уходит, остается. С FlashExit, думалось, будет работать, как костыль на modal -> child, т.е. modal -> modlal2, при потере фокуса modal2 уходит, как child с ON LOSTFOCUS ThisWindow.Release. Исп. это при замене COMBOBOX на окно с TsBROWSE

SergKis: PS Не ту кнопку нажал. Текст примера [pre2] #include "Minigui.ch" ************* function MAIN ************* DEFINE WINDOW wMain AT 0 , 0 WIDTH 400 HEIGHT 300 TITLE "Main" MAIN DEFINE BUTTONEX ButtonEX_1 ROW 225 COL 79 WIDTH 100 HEIGHT 30 CAPTION "Modal" ICON NIL ACTION MODAL() END BUTTONEX DEFINE BUTTONEX ButtonEX_2 ROW 225 COL 219 WIDTH 100 HEIGHT 30 CAPTION "&Quit" ICON NIL ACTION ThisWindow.release END BUTTONEX END window wMain.center wMain.activate return NIL ************************* static function MODAL() ************************* DEFINE WINDOW wModal AT 0, 0 WIDTH 200 HEIGHT 200 TITLE "Modal" MODAL _HMG_aFormFocused [ This.Index ] := .T. DEFINE BUTTONEX ButtonEX_1 ROW 20 COL 40 WIDTH 100 HEIGHT 30 CAPTION "Modal 2" // CAPTION "Child" ICON NIL ACTION MODAL2() // ACTION CHILD() END BUTTONEX END window wModal.center wModal.activate return NIL ************************* static function MODAL2() ************************* DEFINE WINDOW wModal2 AT 0 , 0 WIDTH 100 HEIGHT 100 TITLE "Modal 2" MODAL END window wModal2.center wModal2.activate return NIL ************************* static function CHILD() ************************* DEFINE WINDOW wChild AT 0 , 0 WIDTH 100 HEIGHT 100 TITLE "Child" CHILD END window wChild.center wChild.activate return NIL [/pre2]


gfilatov2002: SergKis пишет: Принимает только след. модальное wModal2 (wChild не проходит) У меня работает с wChild такой пример (немного переработанный): [pre2] #include "Minigui.ch" ************* function MAIN ************* DEFINE WINDOW wMain AT 0 , 0 WIDTH 400 HEIGHT 300 TITLE "Main" MAIN DEFINE BUTTONEX ButtonEX_1 ROW 225 COL 79 WIDTH 100 HEIGHT 30 CAPTION "Modal" ICON NIL ACTION MODAL() END BUTTONEX DEFINE BUTTONEX ButtonEX_2 ROW 225 COL 219 WIDTH 100 HEIGHT 30 CAPTION "&Quit" ICON NIL ACTION ThisWindow.release END BUTTONEX END window wMain.center wMain.activate return NIL ************************* static function MODAL() ************************* DEFINE WINDOW wModal AT 0, 0 WIDTH 200 HEIGHT 200 TITLE "Modal" MODAL _HMG_aFormFocused [ This.Index ] := .T. DEFINE BUTTONEX ButtonEX_1 ROW 20 COL 40 WIDTH 100 HEIGHT 30 // CAPTION "Modal 2" CAPTION "Child" ICON NIL // ACTION MODAL2() ACTION CHILD() END BUTTONEX END window wModal.center wModal.activate return NIL ************************* static function MODAL2() ************************* DEFINE WINDOW wModal2 AT 0 , 0 WIDTH 100 HEIGHT 100 TITLE "Modal 2" MODAL END window wModal2.center wModal2.activate return NIL ************************* static function CHILD() ************************* if IsWindowDefined(wChild) doMethod("wChild", "HIDE") doMethod("wChild", "SHOW") doMethod("wChild", "SETFOCUS") return NIL endif DEFINE WINDOW wChild AT 0 , 0 WIDTH 100 HEIGHT 100 TITLE "Child" CHILD ; NOMAXIMIZE NOMINIMIZE define timer t_1 interval 50 action doMethod("wChild", "SETFOCUS") once END window wChild.center activate window wChild NOWAIT DO MESSAGELOOP return NIL [/pre2]

SergKis: gfilatov2002 пишет работает с wChild такой пример Работает Вот тот же пример с костылем (child окно на модал и на main) [pre2] #include "Minigui.ch" ************* function MAIN ************* SET OOP ON DEFINE WINDOW wMain AT 0 , 0 WIDTH 400 HEIGHT 300 TITLE "Main" MAIN DEFINE BUTTONEX ButtonEX_1 ROW 225 COL 79 WIDTH 100 HEIGHT 30 CAPTION "Modal" ICON NIL ACTION MODAL() END BUTTONEX DEFINE BUTTONEX ButtonEX_2 ROW 225 COL 219 WIDTH 100 HEIGHT 30 // CAPTION "&Quit" CAPTION "Child" ICON NIL ACTION CHILD2( This.Name ) // ACTION ThisWindow.release END BUTTONEX END window wMain.center wMain.activate return NIL ************************* static function MODAL() ************************* DEFINE WINDOW wModal AT 0, 0 WIDTH 200 HEIGHT 200 TITLE "Modal" MODAL // _HMG_aFormFocused [ This.Index ] := .T. DEFINE BUTTONEX ButtonEX_1 ROW 20 COL 40 WIDTH 100 HEIGHT 30 // CAPTION "Modal 2" CAPTION "Child" ICON NIL // ACTION MODAL2() ACTION CHILD2( This.Name ) END BUTTONEX END window wModal.center wModal.activate return NIL ************************* static function MODAL2() ************************* DEFINE WINDOW wModal2 AT 0 , 0 WIDTH 100 HEIGHT 100 TITLE "Modal 2" MODAL END window wModal2.center wModal2.activate return NIL ************************* static function CHILD() ************************* if IsWindowDefined(wChild) doMethod("wChild", "HIDE") doMethod("wChild", "SHOW") doMethod("wChild", "SETFOCUS") return NIL endif DEFINE WINDOW wChild AT 0 , 0 WIDTH 100 HEIGHT 100 TITLE "Child" CHILD ; NOMAXIMIZE NOMINIMIZE define timer t_1 interval 50 action doMethod("wChild", "SETFOCUS") once END window wChild.center activate window wChild NOWAIT DO MESSAGELOOP return NIL ************************* static function CHILD2( cFocusName ) ************************* LOCAL oParent := ThisWindow.Object LOCAL lM LOCAL hM If oParent:Type == 'M' lM := _HMG_IsModalActive hM := _HMG_ActiveModalHandle _HMG_IsModalActive := .F. _HMG_ActiveModalHandle := 0 Endif DEFINE WINDOW wChild AT 0 , 0 WIDTH 100 HEIGHT 100 TITLE "Child" CHILD ; NOMAXIMIZE NOMINIMIZE END window wChild.center wChild.activate If oParent:Type == 'M' _HMG_IsModalActive := lM _HMG_ActiveModalHandle := hM Endif oParent:SetFocus(cFocusName) return NIL [/pre2]

SergKis: PS в CHILD2 добавить (обработка потери фокуса)[pre2] DEFINE WINDOW wChild AT 0 , 0 WIDTH 100 HEIGHT 100 TITLE "Child" CHILD ; NOMAXIMIZE NOMINIMIZE ; ON LOSTFOCUS do_Obj(This.Handle, {|ow| ow:Release() }) [/pre2]

gfilatov2002: SergKis пишет: тот же пример с костылем Так каков вердикт? Нужен этот новый clause FlashExit или достаточно костыля

SergKis: gfilatov2002 пишет Нужен этот новый clause FlashExit или достаточно костыля Не понимаю, надо осознать . Народ подтянуть. Если активировать в примере строку[pre2] DEFINE WINDOW wModal AT 0, 0 WIDTH 200 HEIGHT 200 TITLE "Modal" MODAL // _HMG_aFormFocused [ This.Index ] := .T. [/pre2] модальное окно уберется, с др. стороны есть др. способы убрать модал. Я

Andrey: SergKis пишет: Не понимаю, надо осознать . Народ подтянуть. Читаю как про инопланетян... Для чего это хоть делаете ? На пальцах объясните, по простому, по русски...

SergKis: Andrey Работаем на модальном окне, заменяем combobox модальным окном с тсб списком выбора (без заголовков, с Х). Все работает, кроме клика за пределами окна-списка (только Х завершает). Child окно из под модального - ку-ку. На нем можно делать lostfocus. Вот вокруг запуска окна child из под модального и сыр-бор. С FlashExit child запускается, модал убирается ВСЕГДА. С костылем, child запускается, модал остается (сам убирай). Клик за пределами child и ON LOSTFOCUS окно child убирает.

SergKis: PS в CHILD2 добавить (блокировку X окна wModal), иначе валится при его нажатии и наличии окна child[pre2] ************************* static function CHILD2( cFocusName ) ************************* LOCAL oParent := ThisWindow.Object LOCAL lM LOCAL hM oParent:Action := .F. If oParent:Type == 'M' ... Endif oParent:Action := .T. oParent:SetFocus(cFocusName) return NIL и в функцию добавить ************************* static function MODAL() ************************* DEFINE WINDOW wModal AT 0, 0 WIDTH 200 HEIGHT 200 TITLE "Modal" MODAL ; ON INTERACTIVECLOSE (This.Object):Action ... [/pre2]

gfilatov2002: Выпущена новая сборка 18.06 для BCC 5.51 для компиляторов Harbour и xHarbour Базовый дистрибутив-инсталлятор находится по адресу http://hmgextended.com/files/CONTRIB/hmg-18.06-setup.exe Рекомендуется к использованию Также имеются в наличии готовые сборки для: - MinGW 8.1.0 32-bit для Harbour 3.2.0dev; - MinGW 8.1.0 64-bit для Harbour 3.4.0dev; - MS VisualC 2017 32-bit для Harbour 3.2.0dev; - Borland/Embarcadero C++ 7.3 (32-bit) для Harbour 3.2.0dev. Благодарю за Ваше внимание и поддержку P.S. Доступно зеркало домашней страницы по адресу http://hmgextended.org P.S. 2 Выпуск новых сборок приостановлен на неопределенное время по материальным причинам

Haz: SergKis пишет: Работаем на модальном окне, заменяем combobox модальным окном с тсб списком выбора Сергей, я свой вариант на классе допиливаю потихоньку . У меня с заголовками, но без [X] все работает. В своих проектах заменяю сомбик везде. Для вызова используется oCol:PrevEdit() где обрабатывается примерно такой код [pre2] CASE cCol == "ID_CURR" SQL("T1", "SELECT * FROM CNT_CUR") // Это из под ADS , в стандарте тупо меняется на USE cBase ALIAS 'T1' T1->(OrdSetFocus("NAME")) xLbx := LBX():New() // Создать объект xLbx:cAlias := "T1" // Какой алиас в нем показать xLbx:cRetField := "ID" // какое поле вернуть xLbx:aHeaders := {'A', 'B'} // как назвать заголовки xLbx:aWidth := {35, 100} // ширина колонок xLbx:aAlign := {DT_CENTER, DT_LEFT} // как выровнять xLbx:aField := {'NAME', 'FULLNAME'} // какие поля показать xLbx:nHeightCell := 20 // соответствующие размеры xLbx:nHeightHead := 0 xLbx:nHeightFoot := 0 xLbx:bPostBlock := {|| NIL } // блок который выполнить после выбора xLbx:bSearch := {|| NIL } // блок поиска в таблице объекта xLbx:ListBox( oBrw, xVal ) // непосредственно показ T1->(DBCloseArea()) // убирается за собой lRet := FALSE // не пускаем в режим редактирования [/pre2] click here Предусмотрены футинги и их выравнивание , но пока не делал Если интересно , могу сюда сбросить скомпилированный пример, как это выглядит и исходники разумеется. PS. у дураков мысли сходятся , у меня точно такие же переменные для отлова модала lM и hM

SergKis: Haz пишет Если интересно , могу сюда сбросить скомпилированный пример, как это выглядит и исходники разумеется. Конечно интересно. В итоге может стать заменителем родного ComboBox. у дураков мысли сходятся , у меня точно такие же переменные для отлова модала lM и hM Мне больше нравиться "краткость - сестра таланта" (c) Свои переменные с именем > 4 символов напрягают. "Лень двигатель прогресса" (c) Так что совпадения обоснованные Для вызова используется oCol:PrevEdit() где обрабатывается примерно такой код Аналогично поступаю, только через сообщение, тогда отрываемся от блока :bPrevEdit, имеем среду окна (можно контрола) This, По мне более свободен в действиях, т.к. тсб "свободна" для приема др. сообщений.

Haz: SergKis пишет: Конечно интересно тут спрятал PS. При сборке половина инклюдов в исходнике класса не нужна, просто дернул как есть из проекта в поиске косячек с прорисовкой, только заметил. Сам использую ADS там другая логика. Но как предварительный пример как сделать поиск по справочнику сойдет, тем более что поиск скорее будет у каждого свой. Для исправления достаточно в процедуре поиска добавить [pre2] oBrw:Reset() oBrw:GoTop() oBrw:Refresh(TRUE) [/pre2]

Vlad04: Вызов справочников ввиде TsBrows давно применяю , как основной способ. Combox так же имеет право на существование, смотря по обстоятельствам. Окно модальное немодальное есть некоторые проблемы. Мысль, изложенная выше,закрывать окно справочника при потери фокуса - можно попробовать, но лучше, чтобы окно могло вести как модальное(при установке соответствующего параметра). Описание справочника делаю в текстовом файле, из которого считываются параметры создания окна. В функционале вызов справочника из формы предельно лаконичный .. if ControlName == 'BtnTxt_IM' .or. ControlName == 'BtnTxt_IM_O' Select IM if !empty(sValue) Seek Upper(sValue) if Found() nR:=Recno() endif endif if CreaTBrows('IM.UKS',nR) EditLudi.&(ControlName).Value:=IM->IM endif ... Из Tbrows через :bPrevEdit

SergKis: gfilatov2002 Небольшая правка[pre2] METHOD KeyDown( nKey, nFlags ) CLASS TSBrowse ... line 6912 // uVal := Eval( ::aColumns[ nCol ]:bData ) uVal := ::bDataEval(::aColumns[ nCol ]) uVal := Eval( ::aColumns[ nCol ]:bPrevEdit, uVal, Self ) ... [/pre2]

gfilatov2002: SergKis пишет: Небольшая правка Принято. Благодарю за помощь

SergKis: gfilatov2002 Из этой же темы[pre2] METHOD LDblClick( nRowPix, nColPix, nKeyFlags ) CLASS TSBrowse ... line 7469 ::nColSpecHd := 0 // If ValType( Eval( ::aColumns[ nCol ]:bData ) ) == "L" .and. ; If ValType( ::bDataEval( ::aColumns[ nCol ] ) ) == "L" .and. ; ::aColumns[ nCol ]:lCheckBox // virtual checkbox ::PostMsg( WM_CHAR, VK_SPACE, 0 ) ElseIf ::aColumns[ nCol ]:oEdit != Nil ... [/pre2]

gfilatov2002: SergKis пишет: Из этой же темы



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