Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Создание MDIChild [D6, Win95/98, Win2k]


Dmk ©   (2002-06-24 02:28:00) 

Можно ли, уже из созданного потомка TForm (к примеру TInfoForm), сделать MDIChild форму? И чтобы потомок не вылезал за границы MDI формы. Я делал так,

Application.CreateForm(TMainForm, MainForm);
InfoForm := TInfoForm.CreateNew(MainForm);
ReadComponentResFile("InfoPanel.dfm", InfoForm);

но InfoForm ведет себя как самостоятельное окно. Перекривает при Maximize и т.д.


andrey_m   (2002-06-25 10:51:00) [1]

Например можно так:
В модуле для TInfoForm

В { Private declarations } процедуру создания формы
FMDChild:Boolean;

В { Protected } описываем создания параметров для формы
procedure CreateParams(var Params: TCreateParams);override;

В { Public declarations } конструктор
constructor Create(AOwner: TComponent;FBool:Boolean);overload;

Глобально описываешь
procedure MyFormCreate(Sender: TObject;FMDChild:Boolean);


Далее в implementation

constructor TInfoForm.Create(AOwner: TComponent;FBool:Boolean);
begin
FMDChild:=FBool;
inherited Create(AOwner);
end;

procedure TInfoForm.CreateParams(var Params: TCreateParams);
begin
if FMDChild then
begin
FormStyle:= fsMDIChild;
Visible:= True;
end
else
Visible:= True;
inherited;
end;


procedure MyFormCreate(Sender: TObject;FMDChild:Boolean);
begin
// Создание формы
If not Assigned(InfoForm) then
InfoForm:=TInfoForm.Create(nil,FMDChild)
else
begin
InfoForm.BringToFront;
Exit;
end;//else if
end;

В модуле для TMainForm просто вызови процедуру
MyFormCreate(Sender,False); где второй параметр и есть признак того, будет ли форма Child или Normal.

Обязательно нужно чтобы MainForm была как MDIForm.

Вот и все. Удачи.


Набережных С.   (2002-06-25 09:03:00) [2]


> Юрий Зотов © (24.06.02 09:18)
> 1. InfoForm := TInfoForm(ReadComponentResFile("InfoPanel.dfm",
> InfoForm));

А зачем? Ведь в ReadRootComponent написано: Result := Root. Или я что-то упускаю из виду?


Dmk   (2002-06-24 22:29:00) [3]

Извини Юрий! Уж лет 5 в Delphi, а с формами никогда не работал. :) Просто смешно. :)


Юрий Зотов   (2002-06-24 09:18:00) [4]

1. InfoForm := TInfoForm( ReadComponentResFile("InfoPanel.dfm", InfoForm));

2. А зачем такие ухищрения? Разве недостаточно просто создать и выставить FormStyle = fsMDIChild?


Наверх

Титульная страница Поиск, карта сайта Написать письмо