![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Опять про сворачивание дочерних окно [D7, 95/98, XP]
Димыч © (2006-11-30 11:26:00)Изучив несколько ответов на вопрос "Почему дочерние окно сворачивается не в панель задач а слева над ним?", понял что ответ один нужно дочернее окно создавать самому, при этом родителем назначать 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))
Юрий Зотов (2006-11-30 14:45:00) [1]> Димыч
Естественно. Ведь inherited вызывает унаследованный метод и надо, чтобы он не затер Ваши установки. Поэтому их надо делать ПОСЛЕ inherited.
Димыч (2006-11-30 14:33:00) [2]Все нашел ошибку
procedure Tform5.CreateParams(var Params: TCreateParams);
begin
inherited;
params.WndParent:=GetDesktopWindow;
end;
Спасибо за советы
Димыч (2006-11-30 14:31:00) [3]написал вот так
procedure Tform5.CreateParams(var Params: TCreateParams);
begin
params.WndParent:=GetDesktopWindow;
inherited;
end;
неработает, окно сворачивается как и раньше
Димыч (2006-11-30 14:07:00) [4]Вот второй вариант мне очень нравиться, только я не знаток перекрываний если не трудно приведите пример.
Юрий Зотов (2006-11-30 14:01:00) [5]> Димыч © (30.11.06 13:35) [2]
1. Ссылку в Unit1 на Unit2 можно сделать в implementation. Ошибки не будет.
2. Можно в дочерней форме перекрыть CreateParams или CreateWnd и там прописывать Desktop, как Parent.
Димыч (2006-11-30 13:35:00) [6]Дело в том что модуль Unit2 ссылается на модуль Unit1, если сделать ссылку в Unit1 на Unit2 будет ошибка, конечно модно её устранить на на это надо время, я надеялся на то что можно указать родителя дочерней форме при её создании обычным способом
Cawa (2006-11-30 13:12:00) [7]Ни каких проблем удали из проекта
Application.CreateForm(TForm2, Form2);
,а там же из подключения модуль ( Unit2 in 'Unit2.pas' {Form2} ).
А в главном юните в Uses пропиши модуль с твоей формой.
После можешь создавать форму и вызывать её.