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

Вниз

MDI-форма, но не главная форма!!!   Найти похожие ветки 

 
BigDAN   (2004-12-14 17:05) [0]

Вопрос такой: может ли существовать сабж? Нужно реализовать режим, где MDI-форма была бы только одним из режим работы программы, и вообще в идеале создавалась динамически.


 
Игорь Шевченко ©   (2004-12-14 21:27) [1]


> Вопрос такой: может ли существовать сабж?


При использовании VCL не может.


> Нужно реализовать режим, где MDI-форма была бы только одним
> из режим работы программы


А подробнее можно ?

С уважением,


 
Piter ©   (2004-12-14 22:08) [2]

А что мешает создавать MDI форму динамически? и при этом можно создавать другие окна (НЕ MDIChild). Можно создавать другие формы в присутствии MDI формы, можно создавать в отсутствии ее.

В чем вопрос?

P.S. И что, собственно, нельзя проверить что ли на практике?


 
Игорь Шевченко ©   (2004-12-14 23:08) [3]

Piter ©   (14.12.04 22:08) [2]

Первая созданная форма по Application.CreateForm (и только так) до Application.Run должна иметь стиль fsMDIForm, чтобы можно было создавать дочерние MDI-формы.
Иначе не получится.

С уважением,


 
Piter ©   (2004-12-14 23:23) [4]

Игорь Шевченко ©   (14.12.04 23:08) [3]
Первая созданная форма по Application.CreateForm (и только так) до Application.Run должна иметь стиль fsMDIForm, чтобы можно было создавать дочерние MDI-формы.


не знал...


 
Игорь Шевченко ©   (2004-12-14 23:54) [5]


> не знал...


На мой взгляд такое поведение заложено для того, чтобы всегда можно было создать дочернюю MDI-форму, не заботясь о том, какая форма является родительской и даже нигде ее не упоминая. При отказе от VCL разумеется можно сделать и неглавную форму MDI-фреймом, и даже две полноправные MDI-формы, каждая со совими дочерними. Но стоит ли овчинка выделки...

С уважением,


 
Экспериментатор   (2004-12-15 13:53) [6]

Думаю что можно сие реализовать и довольно нехитрым способом
1. Перед Application.Run
главной форме указывать FormStyle

2. В остальный формах сделать другой конструктор в котором определять FormStyle главной формы
если главная форма MDI то FormStyle:=fsMDIChild
иначе fsNormal
По идее должно работать, хотя первый пункт скорей всего по другому придется сделать
а второй пункт железно работает - сам пользуюсь (правда не в такой реализации) - иногда дочерние формы нужно показывать диалогами или просто не дочерними


 
DiamondShark ©   (2004-12-15 14:02) [7]


> При отказе от VCL разумеется можно сделать и неглавную форму
> MDI-фреймом, и даже две полноправные MDI-формы, каждая со
> совими дочерними. Но стоит ли овчинка выделки...

Зачем отказ от VCL?
Всего-то переписать CreateWindowHandle.


 
Экспериментатор   (2004-12-15 14:06) [8]

А зачем это нужно вообще:
дань моде что-ли?


 
TUser ©   (2004-12-15 14:17) [9]

Держи
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.


 
DiamondShark ©   (2004-12-15 14:25) [10]

Хе-х :) Самопальный MDI -- это круто.


 
BigDAN ©   (2004-12-21 11:22) [11]

2 TUser
Вариант установки Parent`а рассматривался. Вот только при этом дочерние формы не отображаются как активные.

Спасибо всем за ответы!!!
Сам я схитрил следующим образом
в проекте главная форма - fsMDIForm но не показывается.
(в проекте указываю)
 Application.ShowMainForm:= False;
А вот следующая создаваемая форма уже отображается, и из нее производится управление видимостью главной. Смысл в том чтобы по закрытию "второй" формы убивать и главную тоже.
Несколько извращенно, но работает.



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

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

Наверх




Память: 0.49 MB
Время: 0.028 c
1-1103738277
Petruchello
2004-12-22 20:57
2005.01.09
Дайте исходник чистильщика...


14-1102889726
vecna
2004-12-13 01:15
2005.01.09
hl2


1-1103892322
Tornado
2004-12-24 15:45
2005.01.09
Кто юзает InnoSetup


14-1103079144
Думкин
2004-12-15 05:52
2005.01.09
С днем рождения! 15 декабря


3-1102490625
LEH
2004-12-08 10:23
2005.01.09
Как лучше переносить BDE