Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-75773
Mihas
2003-02-05 13:28
2003.02.24
Как программно сжать базу данных InterBase


6-76070
greenrul
2003-01-05 17:31
2003.02.24
Как сделать плагин для IE?


14-76141
herosofnn
2003-02-07 10:14
2003.02.24
ищу Звук


3-75838
jen_bond
2003-02-07 09:20
2003.02.24
Черезмерное увеличение размеров БД


1-75943
YURTEH
2003-02-12 12:03
2003.02.24
Проверка украинской орфографии





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский