Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.24;
Скачать: CL | DM;

Вниз

Почему MDIChild сначала появляется, а потом разворачивается   Найти похожие ветки 

 
vogus   (2003-02-12 19:17) [0]

Создал пробный проект из двух форм и кнопки.
Первая форма FormStyle=fsMDIForm, вторая FormStyle=fsMDIChild
Form2.WindowState=wsMaximized.
Далее по клику на кнопку выполняю
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2 := TForm2.Create(Self);
Form2.Show;
end;
Появляется Form2, но она имеет непонятно от куда взятые размеры и только потом разворачивается до размеров Form1.
Как побороть этот визуальный эфект?


 
ST ©   (2003-02-12 22:55) [1]

А зачем ты вызываешь конструктор. Если ты создал Form2 в процессе проектирования, то не надо её ещё раз креатить. Скорее всего трабл в этом...


 
Бук   (2003-02-13 06:06) [2]

У меня та же проблема...
Все дело в том, что я от одного MDIChild родителя порождаю динамически кучу его наследников с помощью конструктора. наблюдается тот же самый визуальный эффект. Побороть его тоже не могу.

Насколько я понимаю новый, только что созданный MDIChild смотрит состояние активного окна. Если оно SW_MAXIMIZED, тогда новое окно создается с размерами по умолчанию и только потом уже переходит в состояние MAXIMIZE.
Хотя я могу и ошибаться...


 
vogus   (2003-02-13 09:27) [3]

Здесь есть кто эту проблему решил?
А тем кто рассуждает скажу: я пролистал несколько форумов, в них я нашел только догадки и ни одного решения. Создайте такой проектик (займет 3 мин. максимум) и увидите все своими глазами. Решение, насколько я понял, гораздо сложней. По крайней мере всевозможные пасы с SW_MAXIMIZED ни к чему не приводят.


 
ALex44   (2003-02-13 09:33) [4]

A ishodniki TCustomForm/TForm posmotret" ne probovali?


 
vogus   (2003-02-13 10:06) [5]

Еще нет, но придется!


 
AlexSV ©   (2003-02-13 10:14) [6]

А в каком состоянии Visible у Child"ов?


 
smok_er   (2003-02-13 10:18) [7]

Мне еще не нравится, что когда преключаешься между окнами (методом Show) происходит тот же эффект максимизации. Кстати, при использовании сообщений WM_MDINEXT (что-то вроде этого) этого эффекта нет


 
vogus   (2003-02-13 10:25) [8]

А в каком состоянии Visible у Child"ов?
У Child"ов Visible=true - всегда. И от этого тоже не так просто избавится!


 
Паша ©   (2003-02-13 10:46) [9]

Такой вопрос уже был

TForm1 -> MDIChild
Form1.Visible:= false - ругается, но есть дырка:

procedure TForm1.FormCreate(Sender: TObject);
begin
Exclude(FFormState, fsVisible);
end;

дальше делаем с формой, что хотим, она не видима

показать форму
Form1.Visible:=true

Непонятно, зачем Борланды такое сделали?


 
vogus   (2003-02-13 11:10) [10]

Я посмотрел forms.pas, там есть такой код:
if FormStyle = fsMDIChild then
begin
{ Fake a size message to get MDI to behave }
if FWindowState = wsMaximized then
begin
SendMessage(Application.MainForm.ClientHandle, WM_MDIRESTORE, Handle, 0);
ShowWindow(Handle, SW_SHOWMAXIMIZED);
end
else
begin
ShowWindow(Handle, ShowCommands[FWindowState]);
CallWindowProc(@DefMDIChildProc, Handle, WM_SIZE, SIZE_RESTORED,
Width or (Height shl 16));
BringToFront;
end;
SendMessage(Application.MainForm.ClientHandle,
WM_MDIREFRESHMENU, 0, 0);
end
else
ShowWindow(Handle, ShowCommands[FWindowState]);

Я еще не разобрался, но
SendMessage(Application.MainForm.ClientHandle, WM_MDIRESTORE, Handle, 0); // выводит окно причем WM_MDIRESTORE
ShowWindow(Handle, SW_SHOWMAXIMIZED); // максимизит его.

Поэтому Exclude(FFormState, fsVisible); ничего не дает!



 
vogus   (2003-02-13 11:12) [11]

Да забыл! Поясните, что значит { Fake a size message to get MDI to behave } - не допирает до меня?


 
Паша ©   (2003-02-13 11:41) [12]

так пробуй:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2 := TForm2.Create(Self);
Form2.windowState:= wsMaximized;
ShowWindow(Form2.Handle, SW_SHOWMAXIMIZED);
SendMessage(Application.MainForm.ClientHandle, WM_MDIMAXIMIZE, Form2.Handle, 0);
end;


 
Паша ©   (2003-02-13 11:44) [13]

в комплекте с Паша © (13.02.03 10:46) работает без дерганины


 
smok_er   (2003-02-13 12:15) [14]

{ Fake a size message to get MDI to behave } - не допирает до меня?

Подделываем сообщение о размере, чтобы MDI работало без ошибок.


 
vogus   (2003-02-13 12:51) [15]

Большое спасибо!



Страницы: 1 вся ветка

Текущий архив: 2003.02.24;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.013 c
14-76127
zzet
2003-02-06 16:38
2003.02.24
brcc32.exe resource.rc


1-75894
dead1
2003-02-13 16:38
2003.02.24
Типы данных


3-75777
ArtemB
2003-02-06 08:55
2003.02.24
2 вопроса


6-76065
Cobalt
2003-01-01 18:15
2003.02.24
VPN


1-75885
aspen
2003-02-13 18:08
2003.02.24
Как получить доступ к папкам Outlook Exprese?