Главная страница
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.015 c
7-76198
maxim2
2002-12-23 06:15
2003.02.24
Чтение запись MBR


4-76220
fishca
2003-01-11 00:06
2003.02.24
ConsoleAPI


3-75750
T{}r(l-l
2003-02-05 15:18
2003.02.24
Процедура на T-SQL


4-76228
John - 1928
2003-01-11 21:48
2003.02.24
Горячие клавиши : ???


6-76075
1g0r
2003-01-03 19:09
2003.02.24
Проблема с UDP обменом (API- NMUDP)