Главная страница
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.5 MB
Время: 0.04 c
14-1103215583
}|{yk
2004-12-16 19:46
2005.01.09
Как из формата djvu "выдрать" картинки?


1-1103756312
Izid
2004-12-23 01:58
2005.01.09
Хелп с реестром


1-1103811959
Adoon
2004-12-23 17:25
2005.01.09
Как определить версию Excel (97 или 2000) и язык


3-1102478024
dolphin
2004-12-08 06:53
2005.01.09
ошибка по псевдониму или ... ???


9-1095617521
_Дельфин_
2004-09-19 22:12
2005.01.09
Что делать с искусственным интелектом?