Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как активировать MDIChildlen[N]? [D5, Win2k]


Unknown user ©   (2004-12-22 18:27:00) 

Есть у TForm методы Next и Previous, позволяющие переключить фокус на следующую/предыдущую MDIChildlen, а как активировать MDIChildlen[N]?


Unknown user   (2004-12-23 18:29:00) [1]

Попробуйте создать New|Projects|MDIApplication, затем в обработчике OnResize TMDIChild добавить showmessage('resize'), TMDIChild.WindowState:=wsMaximized и при переключении с одной MDI формы на другую при помощи MDIChildren[1].Show, BringToFront, SendMessage, неважно как, окно MDIChild сначала уменьшается в размерах, затем снова разворачивается на всю клиентскую область родительского окна. Как этого избежать? При Next и Previous такого не происходит.


Unknown user   (2004-12-23 18:19:00) [2]

2 MBo. Информации по этому поводу нигде не нащел. Неужели я первый кто столкнулся с такой проблемой?


MBo   (2004-12-22 21:12:00) [3]

procedure TMainForm.ToolButton12Click(Sender: TObject);
begin
SendMessage(CLientHandle,WM_MDIACTIVATE,MDIChildren[Random(MdiChildCount-1)+1].handle,0);
end;

TMDIChild = class(TForm)
   Memo1: TMemo;
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
 private
 procedure WMMdiActivate(var Msg : TWMMdiActivate); message WM_MDIACTIVATE;

...

procedure TMDIChild.WMMdiActivate(var Msg: TWMMdiActivate);
var
 Style: Longint;
begin
 if (Msg.ChildWnd = Handle) and (Msg.ActiveWnd = 0) and
   (biSystemMenu in BorderIcons) then begin
   Style := GetWindowLong(Handle, GWL_STYLE);
   if (Style and WS_MAXIMIZE <> 0) and (Style and WS_SYSMENU = 0) then
     SendMessage(Handle, WM_SIZE, SIZE_RESTORED, 0);
 end;
end;

(из borland конференций)


MBo   (2004-12-22 20:51:00) [4]

Whenever an MDI child is activated, however, it moves to the front of the list. Thus, use I to index over all forms in the array, but not to refer to a specific form.


Unknown user   (2004-12-22 18:58:00) [5]

2 Gero. Prev, Next работает отлично. Как же быть?


Gero   (2004-12-22 18:50:00) [6]


> Unknown user ©   (22.12.04 18:48)
> Меняет состояние окна из Maximized в Normal, затем обратно

Это недоработка MDI.


Unknown user   (2004-12-22 18:48:00) [7]

2 Gero. Почему-то работает неправильно. Меняет состояние окна из Maximized в Normal, затем обратно, и не срабатывает для MDIChildlen[0].


Gero   (2004-12-22 18:37:00) [8]

MDIChildlen[N].BrightToFront


Наверх

Титульная страница Поиск, карта сайта Написать письмо