Автор | Сообщение |
gfilatov
|
| модератор
|
Пост N: 699
Зарегистрирован: 25.05.05
|
|
Отправлено: 29.01.08 13:59. Заголовок: Новая версия Расширенного релиза библиотеки MiniGUI (часть VI ) (продолжение)
Начало темы находится здесь, а теперь АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Готовится к опубликованию новая сборка №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
[только новые]
|
|
SergKis
|
| постоянный участник
|
Пост N: 1874
Зарегистрирован: 17.02.12
|
|
Отправлено: 13.06.18 16:16. Заголовок: gfilatov2002 Поправ..
gfilatov2002 Поправил в своей lib *------------------------------------------------------------------------------* FUNC Do_Obj( nHandle, bBlock, p1, p2, p3 ) *------------------------------------------------------------------------------* LOCAL o If empty (nHandle) ; nHandle := _HMG_ThisFormName ElseIf HB_ISOBJECT(nHandle) If nHandle:ClassName == 'TSBROWSE'; nHandle := nHandle:cParentWnd Else ; nHandle := nHandle:Name EndIf EndIf If HB_ISCHAR(nHandle) ; nHandle := GetFormHandle( nHandle ) EndIf If hmg_IsWindowObject(nHandle) o := hmg_GetWindowObject(nHandle) If HB_ISCHAR(bBlock); bBlock := hb_macroblock( bBlock ) EndIf If HB_ISBLOCK(bBlock) IF o:IsWindow; RETURN Do_WindowEventProcedure ( bBlock, o:Index, o, p1, p2, p3 ) ELSE ; RETURN Do_ControlEventProcedure ( bBlock, o:Index, o, p1, p2, p3 ) ENDIF EndIf Endif RETURN o Для исп. в командах (короче писать), к прмеру #translate doObj( <blk> ) => Do_Obj ( nil , <"blk"> ) #translate doObj( <blk> , <wnd> ) => Do_Obj ( <"wnd">, <"blk"> ) #translate _doObj( <blk> ) => Do_Obj ( nil , <"blk"> ) #translate _doObj( <blk> , <wnd> ) => Do_Obj ( <wnd> , <"blk"> ) #translate wObj( ) => _WindowObj ( _HMG_ThisFormName ) #translate wObj( <wnd> ) => _WindowObj ( <"wnd"> ) #translate _wObj( ) => _WindowObj ( _HMG_ThisFormName ) #translate _wObj( <wnd> ) => _WindowObj ( <wnd> ) #translate gObj( <ctl> ) => _ControlObj( <"ctl">, _HMG_ThisFormName ) #translate gObj( <ctl> , <wnd> ) => _ControlObj( <"ctl">, <wnd> ) #translate _gObj( <ctl> ) => _ControlObj( <ctl> , _HMG_ThisFormName ) #translate _gObj( <ctl> , <wnd> ) => _ControlObj( <ctl> , <wnd> )
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1302
Зарегистрирован: 11.02.10
|
|
Отправлено: 13.06.18 20:53. Заголовок: SergKis пишет: Попр..
SergKis пишет: Благодарю за внимание! Мы уже обсуждали, что подготовкой входных параметров в идеале должна заниматься вызывающая функция Это позволяет делать функции в ядре компактными По этой причине не принято...
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1875
Зарегистрирован: 17.02.12
|
|
Отправлено: 13.06.18 21:05. Заголовок: gfilatov2002 пишет Э..
gfilatov2002 пишет цитата: | Это позволяет делать функции в ядре компактными |
|
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1303
Зарегистрирован: 11.02.10
|
|
Отправлено: 15.06.18 11:28. Заголовок: Всем кому это интере..
Всем кому это интересно Подготовил beta 3 для новой сборки библиотеки со следующим списком изменений Скрытый текст
* Fixed: Missed 'XObject' property reference in the GetProperty() function. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demos in folder \samples\Advanced\GoogleCharts) * Modified: Added Min and Max range for the NON CLIENT attributes of windows according to the Windows requirements. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Enhanced: Added the useful function EnumChildWindows( hWnd [, lExt] ) for retrieving of array of the child windows for a parent window handle. This implementation is compatible with Official HMG if a second parameter is false (default value). Based upon a contribution of Petr Chornyj <myorg63/at/gmail.com>. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see SumatraPDF.prg in folder \samples\Advanced\PdfView) * Updated: Synchronized Extended HMG for compatibility with Official HMG: - New: SET DIALOGBOX POSITION: Sets the position of the dialog boxes (GetColor, GetFile, GetFolder, GetFont, MessageBoxTimeout, MsgXXX, PutFile, SELECT PRINTER, etc.) Added the following commands: - SET DIALOGBOX [ POSITION ] ROW <nRow>|<@VarCodeBlockRow>|<NIL> ; COL <nCol>|<@VarCodeBlockCol>|<NIL> - SET DIALOGBOX [ POSITION ] CENTER OF PARENT - SET DIALOGBOX [ POSITION ] CENTER OF <hWnd> - SET DIALOGBOX [ POSITION ] CENTER OF DESKTOP - SET DIALOGBOX [ POSITION ] DISABLE Based upon a contribution of Claudio Soto <srvet@adinet.com.uy>. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\MoveDialogBox) * Updated: 'MiniGUI Extended Edition Common Commands' list: - added the recent entered commands. Contributed by Grigory Filatov <gfilatov@inbox.ru> (look at commands.txt in folder \Doc) * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - New: added the optional OBJ clause in DEFINE TBROWSE command. - New: added the optional ALIAS clause in DEFINE COLUMN command and the variable :cField in TSColumn class. - New: methods DefColor()(), DefFont() and Clone() in TSColumn class. - New: methods SaveProperty() and RestProperty() in TSColumn class. - New: methods SetProperty() and GetProperty() in TSColumn class. - Updated: improved the methods GetValue(xCol) and SetValue(xCol, xVal). - Updated: improved a colors processing with using of aColors items number, f.e. { CLR_TEXT, RGB( fontcolor[1], fontcolor[2], fontcolor[3] ) } { CLR_PANE, RGB( backcolor[1], backcolor[2], backcolor[3] ) }. Suggested and contributed by Sergej Kiselev (see demo in folder \samples\Advanced\APP_OOPCOLUMNS) * New: 'Using DEFINE COLUMN commands as container for design of TBROWSE' sample. Contributed by Sergej Kiselev (see in folder \samples\Advanced\APP_OOPCOLUMNS) * New: 'Get Tasks' sample is based on calling of EnumChildWindows() function. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\GETTASKS) * New: 'Google Charts' samples: using of a static image and a html file. Based upon a contribution of HMG user Edward. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\GoogleCharts) * New: 'TSBrowse Export data to XLS/XML/DOC/DBF files with a coloring' sample. Contributed by Verchenko Andrey <verchenkoag@gmail.com> (see in folder \samples\Advanced\Tsb_Export) * Updated: 'Move a standard dialog box in the screen' sample: - added an example of centering of the GetFolder() dialog related to an application's window. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\MoveDialogBox) * Updated: The following samples are revised for compatibility with the recent Minigui modification: - demo2.prg in folder \samples\Advanced\ExternalApp_3; - demo3.prg in folder \samples\Basic\TaskDialogs\TTaskDialog. Contributed by Grigory Filatov <gfilatov@inbox.ru>
| Благодарю за Ваше внимание Особая благодарность Сергею Киселеву за неоценимую помощь в развитии библиотеки TsBrowse
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1876
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.06.18 15:34. Заголовок: gfilatov2002 Если м..
gfilatov2002 Если модальному окну добавить свойство lFocusBreack := [.F.]\.T. Добавить в место, где обработка потери фокуса мод. окном с морганием, проверку lFocusBreack. Если .T., не моргать, а завершать мод.окно (как по X), будет похоже на child поведение под модал родителем
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1877
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.06.18 16:05. Заголовок: PS В команду #comman..
PS В команду #command ADD [ COLUMN ] TO [ TBROWSE ] <oBrw> ; ... надо добавить ALIAS, тогда в команде ADD COLUMN ... DATA hb_macroblock(...) ... ALIAS ... поведение аналогично DEFINE COLUMN будет
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1304
Зарегистрирован: 11.02.10
|
|
Отправлено: 15.06.18 16:35. Заголовок: SergKis пишет: надо..
SergKis пишет: цитата: | надо добавить ALIAS, тогда в команде ADD COLUMN |
| Да, это было сделано сразу при модификации SergKis пишет: цитата: | Если модальному окну добавить свойство lFocusBreack |
| Предложение интересное, но требуется небольшой пример для проверки этого нового свойства
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1878
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.06.18 18:28. Заголовок: gfilatov2002 пишет т..
gfilatov2002 пишет цитата: | требуется небольшой пример |
| Свойство условное, имел ввиду такое FUNCTION _DefineModalWindow ( FormName, Caption, x, y, w, h, Parent, nosize, nosysmenu, nocaption, aMin, aMax, ; ... NoAutoRelease, InteractiveCloseProcedure, MoveProcedure, DropProcedure, clientwidth, clientheight, lLostExit ) ... _HMG_aFormMiscData1 [ k ] := {lLostExit} ... В обработчике, при потере фокуса на окне типа 'M' проверить разрешен выход или нет.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1879
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.06.18 18:32. Заголовок: PS в команду #xcom..
PS в команду #xcommand DEFINE WINDOW <w> ; добавить [ <helpbutton: HELPBUTTON> ] ; [ <FocusExit: FOCUSEXIT> => ; DECLARE WINDOW <w> ;; ... к примеру
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1305
Зарегистрирован: 11.02.10
|
|
Отправлено: 15.06.18 20:56. Заголовок: SergKis пишет: Свой..
SergKis пишет: Решил назвать это свойство модального окна FLASHEXIT и сохранять его в элементе массива _HMG_aFormFocused [ i ] У меня уже работает следующий пример: #include "Minigui.ch" ************* function MAIN ************* DEFINE WINDOW cDlgMain AT 0 , 0 WIDTH 400 HEIGHT 300 TITLE "Main" MAIN DEFINE BUTTONEX ButtonEX_1 ROW 225 COL 79 WIDTH 100 HEIGHT 30 CAPTION "Child&Modal" ICON NIL ACTION CHILD_MODAL() END BUTTONEX DEFINE BUTTONEX ButtonEX_2 ROW 225 COL 219 WIDTH 100 HEIGHT 30 CAPTION "&Quit" ICON NIL ACTION cDlgMain.release END BUTTONEX END window cDlgMain.center cDlgMain.activate return NIL ************************* static function CHILD_MODAL ************************* IF iswindowdefined(cDlgChild1) doMethod( "cDlgChild1", "SETFOCUS" ) return NIL ENDIF DEFINE WINDOW cDlgChild1 AT 0 , 0 WIDTH 400 HEIGHT 300 TITLE "Child" CHILD ; ON GOTFOCUS iif((i := GetFormIndex( "cDlgModal1" )) > 0, _HMG_aFormFocused [ i ] := .T., THIS.TITLE := "GOTFOCUS") END window DEFINE WINDOW cDlgModal1 AT 0 , 0 WIDTH 100 HEIGHT 100 TITLE "Modal" MODAL ; ON LOSTFOCUS cDlgChild1.TITLE := "FLASHEXIT" END window cDlgChild1.center activate window cDlgModal1, cDlgChild1 return NIL Прошу проверить и подтвердить, что я двигаюсь в правильном направлении
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1306
Зарегистрирован: 11.02.10
|
|
Отправлено: 15.06.18 21:03. Заголовок: P.S. В файле h_event..
P.S. В файле h_events.prg сделал такую вставку ... IF iswinnt() .OR. _HMG_aFormType [ i ] != 'M' BringWindowToTop ( _HMG_ActiveModalHandle ) FOR x := 1 TO Len ( _HMG_aFormHandles ) IF _HMG_aFormHandles [x] == _HMG_ActiveModalHandle .AND. _HMG_aFormFocused [x] PostMessage( _HMG_ActiveModalHandle, WM_CLOSE, 0, 0 ) ENDIF NEXT x ENDIF ...
|
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1880
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.06.18 23:49. Заголовок: gfilatov2002 пишет П..
gfilatov2002 пишет Более наглядный пример (по мне) Скрытый текст
#include "Minigui.ch" ************* function MAIN ************* SET OOP ON DEFINE WINDOW cDlgMain AT 0 , 0 WIDTH 400 HEIGHT 300 TITLE "Main" MAIN WITH OBJECT This.Object // ---- Window events :Event( 01, {|ow | Modal_1(ow) } ) :Event( 99, {|ow | ow:Release() } ) END WITH // ---- Window events DEFINE BUTTONEX ButtonEX_1 ROW 225 COL 79 WIDTH 100 HEIGHT 30 CAPTION "Modal 1" ICON NIL ACTION (ThisWindow.Object):PostMsg(1) END BUTTONEX DEFINE BUTTONEX ButtonEX_2 ROW 225 COL 219 WIDTH 100 HEIGHT 30 CAPTION "&Quit" ICON NIL ACTION (ThisWindow.Object):PostMsg(99) END BUTTONEX END window cDlgMain.center cDlgMain.activate return NIL ************************* static function MODAL_1( oParent ) ************************* LOCAL y := App.Row+40 LOCAL x := App.Col+40 DEFINE WINDOW cModal1 AT y, x WIDTH 400 HEIGHT 300 TITLE "Modal 1" MODAL WITH OBJECT This.Object // ---- Window events :Event( 01, {|ow | _HMG_aFormFocused [ ow:Index ] := .F., ; Modal_2(ow) } ) :Event( 02, {|ow | _HMG_aFormFocused [ ow:Index ] := .T., ; oParent:SetFocus('ButtonEX_1') } ) :Event( 99, {|ow | ow:Release() } ) END WITH // ---- Window events DEFINE BUTTONEX ButtonEX_1 ROW 225 COL 79 WIDTH 100 HEIGHT 30 CAPTION "Modal 2" ICON NIL ACTION (ThisWindow.Object):PostMsg(1) END BUTTONEX DEFINE BUTTONEX ButtonEX_2 ROW 225 COL 219 WIDTH 100 HEIGHT 30 CAPTION "Focus Main" ICON NIL ACTION (ThisWindow.Object):PostMsg(2) END BUTTONEX END window Activate window cModal1 return NIL ************************* static function MODAL_2( oParent ) ************************* LOCAL y := App.Row+80 LOCAL x := App.Col+80 DEFINE WINDOW cModal2 AT y, x WIDTH 400 HEIGHT 300 TITLE "Modal 2" MODAL WITH OBJECT This.Object // ---- Window events :Event( 01, {|ow| _HMG_aFormFocused [ ow:Index ] := .T., ; oParent:SetFocus('ButtonEX_1') } ) :Event( 99, {|ow| ow:Release() } ) END WITH // ---- Window events DEFINE BUTTONEX ButtonEX_1 ROW 225 COL 79 WIDTH 100 HEIGHT 30 CAPTION "Focus Modal 1" ICON NIL ACTION (ThisWindow.Object):PostMsg(1) END BUTTONEX END window Activate window cModal2 return NIL
| С модал 1 фокус на маин окно и с маин 2 фокус на маин 1. Если нажав на модал 1 кнопку Focus Main, переключить на far и обратно - срабатывает, модал 1 уходит.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1881
Зарегистрирован: 17.02.12
|
|
Отправлено: 16.06.18 00:07. Заголовок: SergKis пишет С мода..
SergKis пишет цитата: | С модал 1 фокус на маин окно и с маин 2 фокус на маин 1. |
| читать С модал 1 фокус на маин окно и с модал 2 фокус на модал 1.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1882
Зарегистрирован: 17.02.12
|
|
Отправлено: 16.06.18 12:28. Заголовок: gfilatov2002 Такой ..
gfilatov2002 Такой манипуляцией, запустил child окно под modal ************************* static function MODAL_2( oParent ) ************************* LOCAL y := App.Row+80 LOCAL x := App.Col+80 LOCAL m := _HMG_IsModalActive LOCAL h := _HMG_ActiveModalHandle _HMG_IsModalActive := .F. _HMG_ActiveModalHandle := 0 DEFINE WINDOW cModal2 AT y, x WIDTH 400 HEIGHT 300 TITLE "Modal 2" CHILD ON GOTFOCUS This.Release ...
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1883
Зарегистрирован: 17.02.12
|
|
Отправлено: 16.06.18 14:34. Заголовок: SergKis пишет Такой ..
SergKis пишет цитата: | Такой манипуляцией, запустил child окно под modal |
| Работающий вариант с modal окна запустить child окно (это против системы). Функция на замену к примеру выше Скрытый текст
************************* static function MODAL_2( oParent ) ************************* LOCAL y := App.Row+80 LOCAL x := App.Col+80 LOCAL lM := _HMG_IsModalActive LOCAL hM := _HMG_ActiveModalHandle _HMG_IsModalActive := .F. _HMG_ActiveModalHandle := 0 DEFINE WINDOW cModal2 AT y, x WIDTH 400 HEIGHT 300 TITLE "Child" CHILD ; ON LOSTFOCUS do_Obj(ThisWindow.Handle, {|ow| ow:PostMsg(99) }) WITH OBJECT This.Object // ---- Window events :Event( 01, {|ow| oParent:SetFocus('ButtonEX_1') } ) :Event( 99, {|ow| ow:Release() } ) END WITH // ---- Window events DEFINE BUTTONEX ButtonEX_1 ROW 225 COL 79 WIDTH 100 HEIGHT 30 CAPTION "Focus Modal 1" ICON NIL ACTION (ThisWindow.Object):PostMsg(01) END BUTTONEX END window Activate window cModal2 _HMG_IsModalActive := lM _HMG_ActiveModalHandle := hM oParent:SetFocus('ButtonEX_1') return NIL
|
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1884
Зарегистрирован: 17.02.12
|
|
Отправлено: 19.06.18 11:55. Заголовок: gfilatov2002 Сделал..
gfilatov2002 Сделал в своей версии CLASS TSColumn ... DATA bSeek // ... METHOD DrawLine( xRow ) CLASS TSBrowse ... If ::lIsArr .and. ( ::lAppendMode .or. ::nAt > Len( ::aArray ) ) uData := "" // append mode for arrays Elseif cColAls != Nil If Valtype( oColumn:bSeek ) == 'B' ( cColAls )->( Eval( oColumn:bSeek, Self, nJ ) ) EndIf uData := ( cColAls )->( Eval( oColumn:bData ) ) Else If Valtype( oColumn:bSeek ) == 'B' Eval( oColumn:bSeek, Self, nJ ) EndIf uData := Eval( oColumn:bData ) EndIf ... METHOD DrawSelect( xRow, lFoot ) CLASS TSBrowse ... If ::lIsArr .and. ( ::lAppendMode .or. ::nAt > Len( ::aArray ) ) uData := "" // append mode for arrays Elseif cColAls != Nil If Valtype( oColumn:bSeek ) == 'B' ( cColAls )->( Eval( oColumn:bSeek, Self, nJ ) ) EndIf uData := ( cColAls )->( Eval( oColumn:bData ) ) Else If Valtype( oColumn:bSeek ) == 'B' Eval( oColumn:bSeek, Self, nJ ) EndIf uData := Eval( oColumn:bData ) EndIf ... Может полезно будет. Без relation, сечас, в блоке :bData делаем подвод, с :bSeek можно разделить подвод и :bData : oBrw:aColumns[5]:bSeek := {|obr| iif( obr:cAlias->FLD_3 == STAT, .T., dbSeek( obr:cAlias->FLD_3 ) ) }
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1307
Зарегистрирован: 11.02.10
|
|
Отправлено: 19.06.18 13:22. Заголовок: SergKis пишет: Може..
SergKis пишет: Добавил, поскольку Вы находите это полезным Благодарю за помощь
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1885
Зарегистрирован: 17.02.12
|
|
Отправлено: 19.06.18 16:06. Заголовок: Григорий, чем у Вас ..
Григорий, чем у Вас завершилось цитата: | свойство модального окна FLASHEXIT |
| У меня срабатывало, при уст. фокуса на внешнее приложении, к примеру Far. На своих окнах hmg -> не срабатывало. Завершил костылем, modal -> child, похожий костыль работает MDI child -> modal давно и стабильно.
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1308
Зарегистрирован: 11.02.10
|
|
Отправлено: 19.06.18 16:40. Заголовок: SergKis пишет: чем ..
SergKis пишет: Завершилось тем, что переписал этот кусок следующим образом: цитата: | ... IF _HMG_IsModalActive .AND. Empty ( _HMG_InplaceParentHandle ) .AND. ; ( _HMG_aFormVirtualWidth [ i ] == 0 .OR. _HMG_aFormVirtualHeight [ i ] == 0 ) .AND. ; _HMG_SplitLastControl != "TOOLBAR" IF _HMG_aFormType [ i ] != 'M' IF iswinnt() IF ! _OnFlashExit () BringWindowToTop ( _HMG_ActiveModalHandle ) // Form's caption blinking if a top window is not Modal window FlashWindowEx ( _HMG_ActiveModalHandle, 1, 5, 60 ) ENDIF ELSE IF ! _OnFlashExit () BringWindowToTop ( _HMG_ActiveModalHandle ) ENDIF ENDIF ENDIF ENDIF ... *-----------------------------------------------------------------------------* STATIC FUNCTION _OnFlashExit () *-----------------------------------------------------------------------------* LOCAL x, lExit := .F., nFormCount := Len ( _HMG_aFormNames ) FOR x := 1 TO nFormCount IF _HMG_aFormHandles [x] == _HMG_ActiveModalHandle .AND. _HMG_aFormFocused [x] PostMessage ( _HMG_ActiveModalHandle, WM_CLOSE, 0, 0 ) lExit := .T. EXIT ENDIF NEXT x RETURN lExit |
| Критика принимается...
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1886
Зарегистрирован: 17.02.12
|
|
Отправлено: 19.06.18 17:36. Заголовок: gfilatov2002 пишет п..
gfilatov2002 пишет цитата: | переписал этот кусок следующим образом |
| Не понял, как работает ? Простой пример Скрытый текст
#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 100 HEIGHT 100 TITLE "Modal" MODAL ; _HMG_aFormFocused [ This.Index ] := .T. DEFINE BUTTONEX ButtonEX_1 ROW 20 COL 40 WIDTH 100 HEIGHT 30 CAPTION "To wMain" ICON NIL ACTION wMain.ButtonEX_1.SetFocus() END BUTTONEX END window wModal.center wModal.activate return NIL
| Два окна. wMain -> wModal, на modal ставлю _HMG_aFormFocused [ This.Index ] := .T., при потере фокуса по кнопке или клику по main окну, modal должна убраться. Остается.
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|