![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создание 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?