Форум: "Основная";
Текущий архив: 2003.02.24;
Скачать: [xml.tar.bz2];
ВнизПочему 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.01 c