![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
MDI-форма, но не главная форма!!! [D5, WinXP]
BigDAN © (2004-12-14 17:05:00)Вопрос такой: может ли существовать сабж? Нужно реализовать режим, где MDI-форма была бы только одним из режим работы программы, и вообще в идеале создавалась динамически.
BigDAN (2004-12-21 11:22:00) [1]2 TUser
Вариант установки Parent`а рассматривался. Вот только при этом дочерние формы не отображаются как активные.
Спасибо всем за ответы!!!
Сам я схитрил следующим образом
в проекте главная форма - fsMDIForm но не показывается.
(в проекте указываю)
Application.ShowMainForm:= False;
А вот следующая создаваемая форма уже отображается, и из нее производится управление видимостью главной. Смысл в том чтобы по закрытию "второй" формы убивать и главную тоже.
Несколько извращенно, но работает.
DiamondShark (2004-12-15 14:25:00) [2]Хе-х :) Самопальный MDI -- это круто.
TUser (2004-12-15 14:17:00) [3]Держи
unit Unit1;
...
implementation
uses unit2, unit3;
{$R *.dfm}
var Styled:boolean = false;
procedure TForm1.Button1Click(Sender: TObject);
begin
form2.Visible:=not form2.Visible;
if form2.Visible and not Styled then begin
Styled:=true;
SetWindowLong(form2.Handle,GWL_EXSTYLE,GetWindowLong(form2.Handle,GWL_EXSTYLE) or WS_EX_OVERLAPPEDWINDOW);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
with TForm3.Create(Application) do begin
Parent:=Form2;
Show;
end;
end;
end.
Только в коде проекта не забудем написать
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
// Application.CreateForm(TForm3, Form3);
Application.Run;
end.
Экспериментатор (2004-12-15 14:06:00) [4]А зачем это нужно вообще:
дань моде что-ли?
DiamondShark (2004-12-15 14:02:00) [5]
> При отказе от VCL разумеется можно сделать и неглавную форму
> MDI-фреймом, и даже две полноправные MDI-формы, каждая со
> совими дочерними. Но стоит ли овчинка выделки...
Зачем отказ от VCL?
Всего-то переписать CreateWindowHandle.
Экспериментатор (2004-12-15 13:53:00) [6]Думаю что можно сие реализовать и довольно нехитрым способом
1. Перед Application.Run
главной форме указывать FormStyle
2. В остальный формах сделать другой конструктор в котором определять FormStyle главной формы
если главная форма MDI то FormStyle:=fsMDIChild
иначе fsNormal
По идее должно работать, хотя первый пункт скорей всего по другому придется сделать
а второй пункт железно работает - сам пользуюсь (правда не в такой реализации) - иногда дочерние формы нужно показывать диалогами или просто не дочерними
Игорь Шевченко (2004-12-14 23:54:00) [7]
> не знал...
На мой взгляд такое поведение заложено для того, чтобы всегда можно было создать дочернюю MDI-форму, не заботясь о том, какая форма является родительской и даже нигде ее не упоминая. При отказе от VCL разумеется можно сделать и неглавную форму MDI-фреймом, и даже две полноправные MDI-формы, каждая со совими дочерними. Но стоит ли овчинка выделки...
С уважением,
Piter (2004-12-14 23:23:00) [8]Игорь Шевченко © (14.12.04 23:08) [3]
Первая созданная форма по Application.CreateForm (и только так) до Application.Run должна иметь стиль fsMDIForm, чтобы можно было создавать дочерние MDI-формы.
не знал...
Игорь Шевченко (2004-12-14 23:08:00) [9]Piter © (14.12.04 22:08) [2]
Первая созданная форма по Application.CreateForm (и только так) до Application.Run должна иметь стиль fsMDIForm, чтобы можно было создавать дочерние MDI-формы.
Иначе не получится.
С уважением,
Piter (2004-12-14 22:08:00) [10]А что мешает создавать MDI форму динамически? и при этом можно создавать другие окна (НЕ MDIChild). Можно создавать другие формы в присутствии MDI формы, можно создавать в отсутствии ее.
В чем вопрос?
P.S. И что, собственно, нельзя проверить что ли на практике?
Игорь Шевченко (2004-12-14 21:27:00) [11]
> Вопрос такой: может ли существовать сабж?
При использовании VCL не может.
> Нужно реализовать режим, где MDI-форма была бы только одним
> из режим работы программы
А подробнее можно ?
С уважением,