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

Вниз

Опять про сворачивание дочерних окно   Найти похожие ветки 

 
Димыч ©   (2006-11-30 11:26) [0]

Изучив несколько ответов на вопрос "Почему дочерние окно сворачивается не в панель задач а слева над ним?", понял что ответ один нужно дочернее окно создавать самому, при этом родителем назначать DesktopWindow так как указано ниже

procedure TForm1.FormCreate(Sender: TObject);
begin
frm:=TForm2.CreateParented(GetDesktopWindow);
frm.Show;
show;
end;


Моя проблема вследующем формы (главная и дочерняя) уже созданы обычным способом
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);

и имеют сложную конструукцию (весь интерфейс рисуется на них своими силами), и только потом я столкнулся с тем самым явлением (некрасивое сворачивание дочернего окна) и не представляю как теперь от него избавиться. Неужели переписывать всё заново, может есть какой то способ задать дочерней форме родителя DesktopWindow например при её создании (в procedure TForm2.FormCreate(Sender: TObject))


 
Cawa ©   (2006-11-30 13:12) [1]

Ни каких проблем удали из проекта
Application.CreateForm(TForm2, Form2);
,а там же из подключения модуль ( Unit2 in "Unit2.pas" {Form2} ).
А в главном юните в Uses пропиши модуль с твоей формой.
После можешь создавать форму и вызывать её.


 
Димыч ©   (2006-11-30 13:35) [2]

Дело в том что модуль Unit2  ссылается на модуль Unit1, если сделать ссылку в Unit1  на Unit2  будет ошибка, конечно модно её устранить на на это надо время, я надеялся на то что можно указать родителя дочерней форме при её создании обычным способом


 
Юрий Зотов ©   (2006-11-30 14:01) [3]

> Димыч ©   (30.11.06 13:35) [2]

1. Ссылку в Unit1 на Unit2 можно сделать в implementation. Ошибки не будет.

2. Можно в дочерней форме перекрыть CreateParams или CreateWnd и там прописывать Desktop, как Parent.


 
Димыч ©   (2006-11-30 14:07) [4]

Вот второй вариант мне очень нравиться, только я не знаток перекрываний если не трудно приведите пример.


 
Димыч ©   (2006-11-30 14:31) [5]

написал вот так

procedure Tform5.CreateParams(var Params: TCreateParams);
begin
params.WndParent:=GetDesktopWindow;
inherited;
end;


неработает, окно сворачивается как и раньше


 
Димыч ©   (2006-11-30 14:33) [6]

Все нашел ошибку

procedure Tform5.CreateParams(var Params: TCreateParams);
begin
inherited;
params.WndParent:=GetDesktopWindow;
end;


Спасибо за советы


 
Юрий Зотов ©   (2006-11-30 14:45) [7]

> Димыч

Естественно. Ведь inherited вызывает унаследованный метод и надо, чтобы он не затер Ваши установки. Поэтому их надо делать ПОСЛЕ inherited.



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

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

Наверх




Память: 0.48 MB
Время: 0.039 c
2-1164985032
alex810
2006-12-01 17:57
2006.12.17
Создание хэлпов


3-1160293193
AntiUser
2006-10-08 11:39
2006.12.17
В тригере Before Update узнать имя измененного field а


2-1165001960
Defort
2006-12-01 22:39
2006.12.17
Компиляция


15-1164269293
Ling
2006-11-23 11:08
2006.12.17
freelance


15-1164692448
Nic
2006-11-28 08:40
2006.12.17
С днём рождения 28 ноября