По всей видимости, дочерние MDI-окна не отвечают на те же сообщения Windows, которые обрабатываются другими окнами. Ниже приведен способ выбора определенного дочернего MDI-окна таким образом, чтобы оно стало активным. Я читаю значение из компонента TINIFile и активизирую определенное дочернее MDI-окно:
{ Делаем активным дочернее MDI-окно. Мы должны послать сообщение Windows API, поскольку дочернее MDI-окно может реагировать только на "аварийный" набор системных сообщений. } ; i := ReadInteger( 'Main', 'ActiveMDIChild', -1 ) ; IF (i>=0) AND (i<MDIChildCount) THEN POSTMESSAGE( Self.Handle, WM_MDIACTIVATE, MDIChildren[i].Handle, 0 ) |
MDI-формы обрабатываются другим обработчиком по-умолчанию (defMDIProc). Способов сделать это (см. заголовок) существует несколько. Дочерние Mdi-формы являются частью массива с именем (как ни странно) MDIChildren. Вы можете сделать так.....
For i := 0 To Form1.MDIChildCount - 1 Do begin If Form1.MDIChildren[i].Caption = 'Это первый!' Then {Здесь можно активизировать дочернюю MDI-форму или выполнить какие-либо действия} end; |
MDIChildren[x] - указатель на экземпляр дочерней MDI-формы. Использование операторов IS и AS позволит вам иметь доступ к любым свойствам и методам любой дочерней формы.
TForm(TabsSet.Items.Objects[TabSet.TabIndex]).Show; |
[001781]