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

Вниз

Создание MDIChild   Найти похожие ветки 

 
Dmk ©   (2002-06-24 02:28) [0]

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

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

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


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

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

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


 
Dmk ©   (2002-06-24 22:29) [2]

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


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


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

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


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

Например можно так:
В модуле для 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.

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



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

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

Наверх




Память: 0.47 MB
Время: 0.017 c
14-23757
MJH
2002-06-02 13:26
2002.07.08
Кто здесь с Владивостока, кроме меня и SPeller а ??


14-23776
niko4543
2002-06-08 07:13
2002.07.08
Компонент


14-23773
SPeller
2002-06-06 10:29
2002.07.08
Компилятор Дельфей


8-23684
ev
2002-03-03 14:12
2002.07.08
создать AVI


1-23632
_Smart
2002-06-24 03:54
2002.07.08
Перетаскивание формы не только за её caption