Автор | Сообщение |
|
| постоянный участник
|
Пост N: 169
Зарегистрирован: 27.07.08
|
|
Отправлено: 26.10.11 21:25. Заголовок: Проблема с MDI окнами
Вот, хочу перевести программу на MDI интерфейс и обнаружил неприятный сюрприз. В MDI окнах невозможно стало устанавливать свойства элементов управления после их создания. Например, нужно в программе редактирования, чтобы после создания GETBOXа в него блокировали ввод, если это режим правки строки и разрешали ввод в режиме дозаписи. wndEdit.txtID.ReadOnly:=!lNew где lNew - флаг режима дозаписи. Почему-то при перестановке окна в MDI выдаётся сбой, будто такого элемента управления нет.
|
|
|
Новых ответов нет
, стр:
1
2
All
[см. все]
|
|
|
| moderator
|
Пост N: 277
Зарегистрирован: 11.02.10
|
|
Отправлено: 27.10.11 10:29. Заголовок: Dr. Oldwarez пишет: ..
Dr. Oldwarez пишет: цитата: | В MDI окнах невозможно стало устанавливать свойства элементов управления после их создания. |
| Дело в том, что MDI окна - это отдельная замутная история. Для них имя формы надо определять через функцию MyGetMdiHandle() и устанавливать свойства элементов таким образом цитата: | setproperty(MyGetMdiHandle(),"EditMdi","VALUE","new set") |
| Подробнее см. пример в папке basic\mdi_3
|
|
|
|
| постоянный участник
|
Пост N: 170
Зарегистрирован: 27.07.08
|
|
Отправлено: 27.10.11 11:00. Заголовок: Спасибо! Да, история..
Спасибо! Да, история и впрямь замутная.
|
|
|
|
| постоянный участник
|
Пост N: 217
Зарегистрирован: 27.07.08
|
|
Отправлено: 08.10.12 20:22. Заголовок: Начинаю уже понемног..
Начинаю уже понемногу разбираться с этой замутной историей. Уже знаю, что такое SETPROPERTY и GETPROPERTY и даже использовал их. Но вот следующая проблема, посерьёзнее. Нужно в функции сохранения таблицы использовать значения элементов управления, считанных из окна редактирования, типа Table->Field:=wndEdit.EditMdi.Value Стал использовать GETPROPERTY(MyGetMdiHandle(),"EditMdi","VALUE") и тут-то меня ожидал ОБЛОМ. Программа выругалась, что этот элемент управления будто бы НЕ СОЗДАН. Подскажите, пожалуйста, что делать. Заранее благодарен
|
|
|
|
| постоянный участник
|
Пост N: 2363
Зарегистрирован: 12.09.06
|
|
Отправлено: 09.10.12 11:04. Заголовок: Я вообще то слабо ещ..
Я вообще то слабо еще разбираюсь в МиниГуи, но если даш самодостаточный пример, то попытаюсь помочь.
|
|
|
|
| постоянный участник
|
Пост N: 31
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.10.12 14:42. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Дело в том, что MDI окна - это отдельная замутная история. |
| Хочу поделиться нашим опытом размутнения MDI окон, в рамках MiniGui и перевода задач с WVT. 1. Для работы с child окнами мы сделали изменение (h_windowsMDI.prg): Function _DefineChildMDIWindow (...) ... ChildIndex := _HMG_ActiveMDIChildIndex + 1 IF AScan( _HMG_aFormNames, FormName ) > 0 // BK 3-Май-2012 16:09:05 FormName += '_'+alltrim(str(ChildIndex)) ENDIF // BK 3-Май-2012 16:09:46 ... т.е. первое имя child окна не искажается и можно использовать форму записи: FormChild.Browse_1 и т.д. Удобнее переносить примеры и свои наработки с такой формой записи. Но это изменение можно и не делать. 2. Добавили C функцию: HB_FUNC ( ISWINDOWHANDLE ) // Наличие окна по handle { hb_retl( IsWindow( (HWND) hb_parnl(1) ) ); } 3. Перед созданием окна можно делать: // IF _IsWindowDefined(::cWnd) // окно уже есть (func.в MiniGui) IF IsWindowHandle(::hWnd) // окно уже есть по handle определяем _MdiWindowsActivate(::hWnd) // сделать активным RETURN // выход без создания окна ENDIF или // IF _IsWindowDefined(::cWnd) // окно уже есть (func.в MiniGui) IF IsWindowHandle(::hWnd) // окно уже есть по handle определяем IF _MdiChildClose(::hWnd) == 0; DestroyActiveMdi(::hWnd) // разрушать окно ENDIF ENDIF // создаем окно DECLARE WINDOW Form_1 // Main MDI DEFINE WINDOW &( ::cWnd ) ; TITLE ::cTitle ; MDICHILD FOCUSED NOMINIMIZE ; ON INIT Self:OnInit() ; ON RELEASE Self:OnRelease() ; ON SIZE Self:OnReSize(.T.) ; ON MAXIMIZE Self:OnReSize(.T.) ::hWnd := GetFormHandle(::cWnd) // запомнили Handler окна ... Удобно использовать объекты. Но это на любителя. 4. Для работы на child mdi окне с модальным окном потребовалась функция сохранения-востановления _HMG_переменых: FUNCTION Set_Rest_HMG( aHmg ) LOCAL a IF empty( aHmg ) a := array(9) a[1] := _HMG_BeginWindowMDIActive a[2] := _HMG_ActiveStatusHandle a[3] := _hmg_UserWindowHandle a[4] := _HMG_SetFocusExecuted a[5] := _HMG_ThisFormName a[6] := _HMG_ThisControlName a[7] := _HMG_ActiveFontName a[8] := _HMG_ActiveFontSize a[9] := _HMG_ExtendedNavigation _HMG_BeginWindowMDIActive := .F. // снимаем MDI режим _HMG_ExtendedNavigation := .T. // навигация по Enter включена ELSE _HMG_BeginWindowMDIActive := aHmg[1] _HMG_ActiveStatusHandle := aHmg[2] _hmg_UserWindowHandle := aHmg[3] _HMG_SetFocusExecuted := aHmg[4] _HMG_ThisFormName := aHmg[5] _HMG_ThisControlName := aHmg[6] _HMG_ActiveFontName := aHmg[7] _HMG_ActiveFontSize := aHmg[8] _HMG_ExtendedNavigation := aHmg[9] ENDIF RETURN a Перед созданием модального окна сохраняем: a := Set_Rest_HMG() После работы с модальным окном востанавливаем: Set_Rest_HMG(a) 5. Максимально работать по Handler окон и контролов, а не по именам.
|
|
|
|
| постоянный участник
|
Пост N: 32
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.10.12 16:39. Заголовок: SergKis пишет:Хочу п..
SergKis пишет: Прервали. Продолжение: 6. Нам показалось удобным иметь свой ToolBar на каждом child окне (как в Clipper последняя строка экрана): ::hTBar := _DefineSplitBox(::cWnd) // Handler для определения Height ToolBar DEFINE TOOLBAR &( ::cTBar ) OF &( ::cWnd ) CAPTION ::cTBarCapt BUTTONSIZE ::nTBarBtnW,::nTBarBtnH FLAT BUTTON TB_New ; CAPTION '' ; PICTURE 'page_new' ; TOOLTIP gTxt("BtnNew")+' F2' ; ACTION BrwEvent("VK_F2") BUTTON TB_Del ; CAPTION '' ; PICTURE 'page_del' ; TOOLTIP gTxt("BtnDel")+' F3' ; ACTION BrwEvent("VK_F3") BUTTON TB_Edit ; CAPTION '' ; PICTURE 'page_edit' ; TOOLTIP gTxt("BtnEdit")+' F4' ; ACTION BrwEvent("VK_F4") ; SEPARATOR IF ::lEnter BUTTON TB_Enter ; CAPTION '' ; PICTURE 'page_enter' ; TOOLTIP gTxt("BtnEnter")+' Enter' ; ACTION BrwEvent("VK_RETURN") ; SEPARATOR ENDIF .... END TOOLBAR 7. Изменили h_label.prg (вертикальная центровка текста): Function _DefineLabel ( ControlName, ParentFormName, x, y, Caption, w, h,; fontname, fontsize, bold, BORDER, CLIENTEDGE, HSCROLL, VSCROLL,; TRANSPARENT, aRGB_bk, aRGB_font, ProcedureName, tooltip, HelpId, invisible,; italic, underline, strikeout, autosize, rightalign, centeralign,; blink, mouseover, mouseleave, nId, VCenterAlign ) // BK 10.06.2012 ... DEFAULT underline TO FALSE DEFAULT strikeout TO FALSE DEFAULT VCenterAlign TO TRUE // BK 10.06.2012 ... if centeralign ; Style += ES_CENTER endif IF VCenterAlign ; Style += SS_CENTERIMAGE // BK 10.06.2012 ENDIF ... 8. Формирование Browse: @ ::nBrwY, ::nBrwX BROWSE &( ::cBrw ) ; WIDTH ::nBrwW ; HEIGHT ::nBrwH ; HEADERS ::aHeads ; WIDTHS ::aWidth ; WORKAREA &( ::cAls ) ; FIELDS ::aFields ; VALUE Self:CurRec(.F.) ; TOOLTIP ::aToolTip ; DYNAMICBACKCOLOR ::aBgColor ; DYNAMICFORECOLOR ::aFgColor ; ON CHANGE Self:BrwOnChange() ; EDIT INPLACE ; APPEND ; INPUTITEMS ::aInputItem ; DISPLAYITEMS ::aDisplayItem ; ON HEADCLICK ::aHdrClick ; WHEN ::aWhen ; VALID ::aValid ; VALIDMESSAGES ::aMessage ; READONLY ::aROnly ; DELETE ; IMAGE ::aImage ; JUSTIFY ::aJustify ; HEADERIMAGE ::aImageHdr ::nBrwI := GetControlIndex(::cBrw, ::cWnd) // Browse index ::hBrw := _HMG_aControlHandles [::nBrwI] // Browse handle _HMG_aControlMiscData2[::nBrwI] := Self // Browse CARGO запомнили объект MDI окна заработали. Одна задача (квартплата) на 90% переведена с WVT, другие в наальной стадии.
|
|
|
|
| постоянный участник
|
Пост N: 218
Зарегистрирован: 27.07.08
|
|
Отправлено: 11.10.12 20:12. Заголовок: Не, у меня проблема ..
Не, у меня проблема такая: есть EDIT-окно, где содержимое строки таблицы отображается в разных textbox-ах и т.д. При нажатии кнопки btnSave всё содержимое полей редактирования должно сохраняться в строку таблицы, для чего есть отдельная функция SaveTable(lNew), вызываемая при нажатии кнопки btnSave FUNCTION SaveTable(lNew) ................... wndEdit.TextBox1.Value:=Table->Field_1 wndEdit.TextBox2.Value:=Table->Field_2 .................... RETURN и вот тут-то оно ругается, что окно wndEdit не создано, хотя оно явно создано, иначе, откуда бы взялась кнопка вызова функции?
|
|
|
|
| постоянный участник
|
Пост N: 33
Зарегистрирован: 17.02.12
|
|
Отправлено: 13.10.12 13:41. Заголовок: Dr.Oldwarez пишет: у..
Dr.Oldwarez пишет: цитата: | у меня проблема такая ... |
| Родной текст создания MDI child окон: Function _DefineChildMDIWindow (...) ... ChildIndex := _HMG_ActiveMDIChildIndex + 1 // это счетчик, создающий уникальное имя child окон FormName += '_'+alltrim(str(ChildIndex)) // МЕНЯЕТСЯ ИМЯ ОКНА прибавлением индекса . Ваше : цитата: | wndEdit.TextBox1.Value:=Table->Field_1 wndEdit.TextBox2.Value:=Table->Field_2 |
| действительно идет к несуществующему окну "wndEdit", потому что через I_VAR.CH оно превращается: SetProperty("wndEdit","TextBox2","Value",Table->Field_2), а _DefineChildMDIWindow (...) создало окно с именем:"wndEdit"+'_'+alltrim(str(ChildIndex)). Для правильной работы ВСЕГДА надо запоминать ДЕЙСТВИТЕЛЬНОЕ имя окна: cWnd := _GetWindowProperty( , "PROP_FORMNAME") Пример: DEFINE WINDOW wndEdit ; ... END WINDOW cWndName := _GetWindowProperty( , "PROP_FORMNAME") и теперь возможно выполнять: SetProperty(cWndName,"TextBox2","Value",Table->Field_2) т.е. в родном варианте miniGUI при работе с MDI окнами ЗАБУДЬТЕ обращения через псевдо объект: wndEdit.TextBox1.Value !!!
|
|
|
|
| постоянный участник
|
Пост N: 2368
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.10.12 13:57. Заголовок: SergKis пишет: т.е...
SergKis пишет: цитата: | т.е. в родном варианте miniGUI при работе с MDI окнами ЗАБУДЬТЕ обращения через псевдо объект: wndEdit.TextBox1.Value !!! |
| Супер ! Спасибо за совет !
|
|
|
|
| постоянный участник
|
Пост N: 34
Зарегистрирован: 17.02.12
|
|
Отправлено: 13.10.12 14:05. Заголовок: SergKis пишет:через ..
SergKis пишет: Прошу прощения I_VAR.CH - это список HMG_... переменных
|
|
|
|
| постоянный участник
|
Пост N: 219
Зарегистрирован: 27.07.08
|
|
Отправлено: 13.10.12 22:32. Заголовок: Огромное спасибо за ..
Огромное спасибо за помощь! Правда переделывать программу в 20 тыс строк исходного кода - это воистину Геркулесов труд.
|
|
|
|
|
| постоянный участник
|
Пост N: 35
Зарегистрирован: 17.02.12
|
|
Отправлено: 14.10.12 13:00. Заголовок: Dr.Oldwarez пишет:Пр..
Dr.Oldwarez пишет: цитата: | Правда переделывать программу в 20 тыс строк исходного кода ... |
| Если дело только в обращении через псевдо объект, то возьмите h_windowsMdi.prg к своему проекту и в своем prg файле с main(..) , например, в самом конце добавьте #include "h_windowsMdi.prg". В h_windowsMdi.prg закоментируйте Memvar, сделайте изменения: IF AScan( _HMG_aFormNames, FormName ) > 0 // BK 3-Май-2012 16:09:05 FormName += '_'+alltrim(str(ChildIndex)) ENDIF // BK 3-Май-2012 16:09:46 Соберите проект. Все должно работать, имя окна не будет меняться.
|
|
|
|
| постоянный участник
|
Пост N: 36
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.10.12 20:05. Заголовок: Возможно кому-то буд..
Возможно кому-то будут полезны наши тесты с MDI окнами. Примеры MDI Сборка VC9 и своя miniGui, hb 2.0
|
|
|
|
| постоянный участник
|
Пост N: 322
Зарегистрирован: 13.10.05
|
|
Отправлено: 16.10.12 10:49. Заголовок: Конечно, полезны!..
Конечно, полезны!
|
|
|
|
| постоянный участник
|
Пост N: 2372
Зарегистрирован: 12.09.06
|
|
Отправлено: 16.10.12 13:59. Заголовок: SergKis пишет: Возм..
SergKis пишет: цитата: | Возможно кому-то будут полезны наши тесты с MDI окнами. |
| Спасибо за примеры !
|
|
|
|
| постоянный участник
|
Пост N: 37
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.10.12 12:45. Заголовок: Возвращаюсь к вопрос..
Возвращаюсь к вопросу искажения имени окна в MDI окнах. Я думаю многие были бы удивлены, если при открытии dbf с алиасом AAA получили бы алиас AAA_1327. Так сейчас происходит в MDI окнах. Возможно, я что-то не понимаю, но алгоритм со счетчиком нужен, если имя окна cFormName не задано, а в остальном он должен быть таким же, как и в не MDI окнах, т.е. при повторении имени - ошибка и управление уникальностью имен - это дело человека. Или я в чем-то не прав ?
|
|
|
|
| |
Пост N: 15
Зарегистрирован: 31.01.13
|
|
Отправлено: 20.02.13 10:15. Заголовок: SergKis пишет: Воз..
SergKis пишет: цитата: | Возможно кому-то будут полезны наши тесты с MDI окнами. Примеры MDI Сборка VC9 и своя miniGui, hb 2.0 |
| Ссылочка протухла, можно ещё раз выложить?
|
|
|
|
| |
Пост N: 16
Зарегистрирован: 31.01.13
|
|
Отправлено: 20.02.13 11:34. Заголовок: SergKis пишет: В h_..
SergKis пишет: цитата: | В h_windowsMdi.prg закоментируйте Memvar, сделайте изменения: IF AScan( _HMG_aFormNames, FormName ) > 0 // BK 3-Май-2012 16:09:05 FormName += '_'+alltrim(str(ChildIndex)) ENDIF // BK 3-Май-2012 16:09:46 |
| А для тех кто в танке можно подробнее? Я вот смотрю в этот файл, там строки немного другие IF ValType( FormName ) == "U" FormName := _HMG_TempWindowName ENDIF ChildIndex := _HMG_ActiveMDIChildIndex + 1 FormName += '_' + AllTrim( Str( ChildIndex ) ) , ну да ладно, вроде последняя строка из приведённого фрагмента, однако смущает и первая строка - во что она переделает FormName? а закомментировать memvar, это какое из двух имеющихся? MEMVAR mVar #ifdef _TSBROWSE_ MEMVAR _TSB_aControlhWnd, _TSB_aControlObjects, _TSB_aClientMDIhWnd #endif
|
|
|
|
| постоянный участник
|
Пост N: 137
Зарегистрирован: 17.02.12
|
|
Отправлено: 20.02.13 12:22. Заголовок: rovix пишет:Ссылочка..
rovix пишет: цитата: | Ссылочка протухла, можно ещё раз выложить? |
| Test MDI
|
|
|
|
| постоянный участник
|
Пост N: 138
Зарегистрирован: 17.02.12
|
|
Отправлено: 20.02.13 12:38. Заголовок: rovix пишет:можно по..
rovix пишет: IF ValType( FormName ) == "U" FormName := _HMG_TempWindowName ENDIF ChildIndex := _HMG_ActiveMDIChildIndex + 1 IF AScan( _HMG_aFormNames, FormName ) > 0 // окно с именем FormName уже есть FormName += '_' + AllTrim( Str( ChildIndex ) ) ENDIF ... rovix пишет: цитата: | а закомментировать memvar, это какое из двух имеющихся? |
| /* комментируем все строки здесь MEMVAR mVar #ifdef _TSBROWSE_ MEMVAR _TSB_aControlhWnd, _TSB_aControlObjects, _TSB_aClientMDIhWnd #endif */ Правильно перенести эти строки перед : MEMVAR mVar #ifdef _TSBROWSE_ MEMVAR _TSB_aControlhWnd, _TSB_aControlObjects, _TSB_aClientMDIhWnd #endif FUNCTION MAIN() ... RETURN
|
|
|
|
| |
Пост N: 18
Зарегистрирован: 31.01.13
|
|
Отправлено: 21.02.13 18:36. Заголовок: неа, всё равно не вз..
неа, всё равно не взлетело :( теперь, правда, другое сообщение. --------------------------- Program Error --------------------------- Harbour MiniGUI Extended Edition 2.1.9 - 2013.01.22 ACTIVATE WINDOW: DEFINE WINDOW Structure is not closed. Program terminated. Called from _ACTIVATEWINDOW(1124) Called from VIEWPREDPR(501) Called from (b)MAIN(22) Called from _DOCONTROLEVENTPROCEDURE(1596) Called from EVENTS(1383) Called from _DOMESSAGELOOP(0) Called from _ACTIVATEWINDOW(1321) Called from MAIN(26) --------------------------- ОК ---------------------------
|
|
|
|
|
| постоянный участник
|
Пост N: 832
Зарегистрирован: 27.01.07
|
|
Отправлено: 21.02.13 19:43. Заголовок: END WINDOW есть?..
END WINDOW есть?
|
|
|
|
| |
Пост N: 21
Зарегистрирован: 31.01.13
|
|
Отправлено: 21.02.13 20:39. Заголовок: должно быть (сейчас ..
должно быть (сейчас не могу глянуть на работе осталось), я ведь саму программу не менял, просто в описании окна заменил MAIN на MAIN MDI, а для вложенных поставил MDICHILD. Ну плюс подправил файл как SergKis советовал.
|
|
|
|
| |
Пост N: 24
Зарегистрирован: 31.01.13
|
|
Отправлено: 22.02.13 09:17. Заголовок: PSP пишет: END WIN..
PSP пишет: Сейчас посмотрел - есть.
|
|
|
|
| постоянный участник
|
Пост N: 833
Зарегистрирован: 27.01.07
|
|
Отправлено: 22.02.13 09:26. Заголовок: Весь кусок в студию...
Весь кусок в студию.
|
|
|
|
| |
Пост N: 27
Зарегистрирован: 31.01.13
|
|
Отправлено: 22.02.13 10:26. Заголовок: PSP пишет: Весь кус..
PSP пишет: Здесь архив формочек и prg-файлов, всё остальное есть в папке MiniGUI\SAMPLES\BASIC\CONTACTOS_2
|
|
|
|
| постоянный участник
|
Пост N: 835
Зарегистрирован: 27.01.07
|
|
Отправлено: 22.02.13 11:01. Заголовок: А пример из CONTRACT..
Проблема, возможно, в том, что при объявлении главного окна у вас в файле Principal.Fmg указано одновременно и MAIN, и MDI.
|
|
|
|
| moderator
|
Пост N: 451
Зарегистрирован: 11.02.10
|
|
Отправлено: 22.02.13 14:57. Заголовок: rovix пишет: я ведь..
rovix пишет: цитата: | я ведь саму программу не менял, просто в описании окна заменил MAIN на MAIN MDI, а для вложенных поставил MDICHILD. |
| Обратите внимание, что окна типа MDICHILD не нужно активировать Возможно, также Вам будет интересен пример в папке samples\Basic\mdi_4
|
|
|
|
| |
Пост N: 28
Зарегистрирован: 31.01.13
|
|
Отправлено: 22.02.13 15:56. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Обратите внимание, что окна типа MDICHILD не нужно активировать |
| Вот где собака порылась Перейдём к следующему пункту- пропал тулбар в mdi PSP пишет: цитата: | Проблема, возможно, в том, что при объявлении главного окна у вас в файле Principal.Fmg указано одновременно и MAIN, и MDI. |
| Так в примерах было "MAIN MDI"
|
|
|
|
| постоянный участник
|
Пост N: 836
Зарегистрирован: 27.01.07
|
|
Отправлено: 22.02.13 20:05. Заголовок: rovix пишет: Так в ..
rovix пишет: цитата: | Так в примерах было "MAIN MDI" |
| Где? В MiniGUI\SAMPLES\BASIC\CONTACTOS_2 нет.
|
|
|
|
| |
Пост N: 29
Зарегистрирован: 31.01.13
|
|
Отправлено: 22.02.13 20:27. Заголовок: PSP пишет: Где? В M..
PSP пишет: цитата: | Где? В MiniGUI\SAMPLES\BASIC\CONTACTOS_2 нет. |
| Нет, конечно же в этом примере нет , я имел ввиду примеры в папках MDI* На примере CONTACTOS_2 я пытался перевести обычное приложение в mdi интерфейс
|
|
|
|
|
| постоянный участник
|
Пост N: 139
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.02.13 22:07. Заголовок: rovix пишет:Перейдём..
rovix пишет: цитата: | Перейдём к следующему пункту- пропал тулбар в mdi |
| Как, я понимаю, toolbar в mdi может находится: - на MAIN MDI и один для всех CHILD окон - на всех CHILD оконах, на MAIN MDI отсутствовать. В примере, Principal.fmg - это child окно, а не main mdi, т.к. *.fmg содержат toolbar. По поводу statusbar - этот контрол должен находится на main mdi и исключен из child окон, вывод текстов надо с child окон перенаправить в main mdi. Пример вывода текста в Statusbar: FUNCTION MsgSTB( cMessage, nItem, cForm ) LOCAL i Default nItem To 1 IF Empty( cForm ) i := AScan(_HMG_aFormType, 'A') cForm := iif(i > 0, _HMG_aFormNames [ i ], '') ENDIF IF _IsControlDefined("StatusBar", cForm) SetProperty( cForm, "StatusBar", "Item", nItem, cMessage ) ENDIF RETURN NIL В Principal.fmg событие ON INIT Nil заменить на: ON INIT ( MsgSTB("Contactos with MiniGUI IDE", 1), ; MsgSTB("Harbour MiniGUI", 2) ) так же поступить в Win_2.fmg А MAIN MDI окно надо создать сверху: ... DEFINE WINDOW Form_1 ; ... DEFINE MAIN MENU POPUP "File" ITEM "Principal.fmg" NAME Principal ACTION PrincipalCild() SEPARATOR ITEM "Exit" NAME Exit ACTION ThisWindow.Release END POPUP ... END MENU DEFINE STATUSBAR FONT 'MS Sans Serif' SIZE 9 STATUSITEM "HMG Power Ready! 1" STATUSITEM "HMG Power Ready! 2" ... END STATUSBAR END WINDOW ... Function PrincipalCild() ... Return
|
|
|
|
| постоянный участник
|
Пост N: 140
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.02.13 23:26. Заголовок: Пример с toolbar на ..
Пример с toolbar на main mdi (средняя группа кнопок работает): Test Mdi
|
|
|
|
| постоянный участник
|
Пост N: 141
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.02.13 23:45. Заголовок: SergKis пишет:Как, я..
SergKis пишет: цитата: | Как, я понимаю, toolbar в mdi может находится: - на MAIN MDI и один для всех CHILD окон - на всех CHILD оконах, на MAIN MDI отсутствовать. |
| Это я ОЧЕНЬ неправильно выразился. Надо - при переводе Clipper, WVT программ на mdi желательно использовать ...
|
|
|
Новых ответов нет
, стр:
1
2
All
[см. все]
|
|