On-line: PSP, SergKis, гостей 1. Всего: 3 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 169
Зарегистрирован: 27.07.08
ссылка на сообщение  Отправлено: 26.10.11 21:25. Заголовок: Проблема с MDI окнами


Вот, хочу перевести программу на MDI интерфейс и обнаружил неприятный сюрприз. В MDI окнах невозможно стало устанавливать свойства элементов управления после их создания. Например, нужно в программе редактирования, чтобы после создания GETBOXа в него блокировали ввод, если это режим правки строки и разрешали ввод в режиме дозаписи.
wndEdit.txtID.ReadOnly:=!lNew
где lNew - флаг режима дозаписи.

Почему-то при перестановке окна в MDI выдаётся сбой, будто такого элемента управления нет.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 34 , стр: 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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 170
Зарегистрирован: 27.07.08
ссылка на сообщение  Отправлено: 27.10.11 11:00. Заголовок: Спасибо! Да, история..


Спасибо! Да, история и впрямь замутная.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 217
Зарегистрирован: 27.07.08
ссылка на сообщение  Отправлено: 08.10.12 20:22. Заголовок: Начинаю уже понемног..


Начинаю уже понемногу разбираться с этой замутной историей. Уже знаю, что такое SETPROPERTY и GETPROPERTY и даже использовал их. Но вот следующая проблема, посерьёзнее. Нужно в функции сохранения таблицы использовать значения элементов управления, считанных из окна редактирования, типа Table->Field:=wndEdit.EditMdi.Value Стал использовать GETPROPERTY(MyGetMdiHandle(),"EditMdi","VALUE") и тут-то меня ожидал ОБЛОМ. Программа выругалась, что этот элемент управления будто бы НЕ СОЗДАН. Подскажите, пожалуйста, что делать.

Заранее благодарен

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2363
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 09.10.12 11:04. Заголовок: Я вообще то слабо ещ..


Я вообще то слабо еще разбираюсь в МиниГуи, но если даш самодостаточный пример, то попытаюсь помочь.



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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 окон и контролов, а не по именам.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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, другие в наальной стадии.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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 не создано, хотя оно явно создано, иначе, откуда бы взялась кнопка вызова функции?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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 !!!



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2368
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.10.12 13:57. Заголовок: SergKis пишет: т.е...


SergKis пишет:

 цитата:
т.е. в родном варианте miniGUI при работе с MDI окнами ЗАБУДЬТЕ обращения через псевдо объект: wndEdit.TextBox1.Value !!!


Супер ! Спасибо за совет !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 34
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.10.12 14:05. Заголовок: SergKis пишет:через ..


SergKis пишет:
 цитата:
через I_VAR.CH ...


Прошу прощения I_VAR.CH - это список HMG_... переменных

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 219
Зарегистрирован: 27.07.08
ссылка на сообщение  Отправлено: 13.10.12 22:32. Заголовок: Огромное спасибо за ..


Огромное спасибо за помощь! Правда переделывать программу в 20 тыс строк исходного кода - это воистину Геркулесов труд.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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

Соберите проект. Все должно работать, имя окна не будет меняться.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 36
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.10.12 20:05. Заголовок: Возможно кому-то буд..


Возможно кому-то будут полезны наши тесты с MDI окнами.
Примеры MDI
Сборка VC9 и своя miniGui, hb 2.0

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 322
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 16.10.12 10:49. Заголовок: Конечно, полезны!..


Конечно, полезны!

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2372
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.10.12 13:59. Заголовок: SergKis пишет: Возм..


SergKis пишет:

 цитата:
Возможно кому-то будут полезны наши тесты с MDI окнами.


Спасибо за примеры !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 37
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.10.12 12:45. Заголовок: Возвращаюсь к вопрос..


Возвращаюсь к вопросу искажения имени окна в MDI окнах. Я думаю многие были бы удивлены, если при открытии dbf с алиасом AAA получили бы алиас AAA_1327. Так сейчас происходит в MDI окнах. Возможно, я что-то не понимаю, но алгоритм со счетчиком нужен, если имя окна cFormName не задано, а в остальном он должен быть таким же, как и в не MDI окнах, т.е. при повторении имени - ошибка и управление уникальностью имен - это дело человека. Или я в чем-то не прав ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 15
Зарегистрирован: 31.01.13
ссылка на сообщение  Отправлено: 20.02.13 10:15. Заголовок: SergKis пишет: Воз..


SergKis пишет:

 цитата:

Возможно кому-то будут полезны наши тесты с MDI окнами.
Примеры MDI
Сборка VC9 и своя miniGui, hb 2.0


Ссылочка протухла, можно ещё раз выложить?

Спасибо: 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


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 137
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.02.13 12:22. Заголовок: rovix пишет:Ссылочка..


rovix пишет:
 цитата:
Ссылочка протухла, можно ещё раз выложить?


Test MDI

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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



Спасибо: 0 
ПрофильЦитата Ответить



Пост 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)

---------------------------
ОК
---------------------------


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 832
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 21.02.13 19:43. Заголовок: END WINDOW есть?..


END WINDOW есть?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 21
Зарегистрирован: 31.01.13
ссылка на сообщение  Отправлено: 21.02.13 20:39. Заголовок: должно быть (сейчас ..


должно быть (сейчас не могу глянуть на работе осталось), я ведь саму программу не менял, просто в описании окна заменил MAIN на MAIN MDI, а для вложенных поставил MDICHILD. Ну плюс подправил файл как SergKis советовал.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 24
Зарегистрирован: 31.01.13
ссылка на сообщение  Отправлено: 22.02.13 09:17. Заголовок: PSP пишет: END WIN..


PSP пишет:

 цитата:

END WINDOW есть?

Сейчас посмотрел - есть.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 833
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 22.02.13 09:26. Заголовок: Весь кусок в студию...


Весь кусок в студию.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 27
Зарегистрирован: 31.01.13
ссылка на сообщение  Отправлено: 22.02.13 10:26. Заголовок: PSP пишет: Весь кус..


PSP пишет:

 цитата:
Весь кусок в студию.


Здесь архив формочек и prg-файлов, всё остальное есть в папке MiniGUI\SAMPLES\BASIC\CONTACTOS_2

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 835
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 22.02.13 11:01. Заголовок: А пример из CONTRACT..


Проблема, возможно, в том, что при объявлении главного окна у вас в файле Principal.Fmg указано одновременно и MAIN, и MDI.


Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 451
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 22.02.13 14:57. Заголовок: rovix пишет: я ведь..


rovix пишет:

 цитата:
я ведь саму программу не менял, просто в описании окна заменил MAIN на MAIN MDI, а для вложенных поставил MDICHILD.


Обратите внимание, что окна типа MDICHILD не нужно активировать
Возможно, также Вам будет интересен пример в папке samples\Basic\mdi_4

Спасибо: 1 
ПрофильЦитата Ответить



Пост N: 28
Зарегистрирован: 31.01.13
ссылка на сообщение  Отправлено: 22.02.13 15:56. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Обратите внимание, что окна типа MDICHILD не нужно активировать


Вот где собака порылась

Перейдём к следующему пункту- пропал тулбар в mdi

PSP пишет:

 цитата:
Проблема, возможно, в том, что при объявлении главного окна у вас в файле Principal.Fmg указано одновременно и MAIN, и MDI.


Так в примерах было "MAIN MDI"

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 836
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 22.02.13 20:05. Заголовок: rovix пишет: Так в ..


rovix пишет:

 цитата:
Так в примерах было "MAIN MDI"


Где? В MiniGUI\SAMPLES\BASIC\CONTACTOS_2 нет.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 29
Зарегистрирован: 31.01.13
ссылка на сообщение  Отправлено: 22.02.13 20:27. Заголовок: PSP пишет: Где? В M..


PSP пишет:

 цитата:
Где? В MiniGUI\SAMPLES\BASIC\CONTACTOS_2 нет.


Нет, конечно же в этом примере нет , я имел ввиду примеры в папках MDI*
На примере CONTACTOS_2 я пытался перевести обычное приложение в mdi интерфейс

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 140
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.02.13 23:26. Заголовок: Пример с toolbar на ..


Пример с toolbar на main mdi (средняя группа кнопок работает):Test Mdi

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 141
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.02.13 23:45. Заголовок: SergKis пишет:Как, я..


SergKis пишет:
 цитата:
Как, я понимаю, toolbar в mdi может находится:
- на MAIN MDI и один для всех CHILD окон
- на всех CHILD оконах, на MAIN MDI отсутствовать.


Это я ОЧЕНЬ неправильно выразился. Надо - при переводе Clipper, WVT программ на mdi желательно использовать ...

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 34 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 114
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет