![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Событие СразуПослеСозданияФормы как получить?
Kolan © (2007-07-07 11:45:00)Здравствуйте,
Вот есть код:
procedure TCustomColleagueMainForm.FormCreate(Sender: TObject);
begin
ReportMemoryLeaksOnShutdown := True;
LoadColleaguesLoader;
MenuLoader := TMenuInsertColleague.Create( MainMenu1);
end;
Как видите мне нужно указатьMainMenu1, но в конструкторе оно ещеnil. Хорошо бы создать этот объект во время когда форма уже создана. Как этого добится?
Вижу два пути:
1.OnShow + флаг для того, чтобы не создавать экземпляр при каждом показе формы.
2. В TMenuInsertColleague реализовать от похожее на 1.
Kolan (2007-07-07 12:05:00) [1]> Либо использовать OldCreateOrder:=false
Ок. Благодарю за совет, хватило просто перестановки последовательности
FMainMenu := MainMenu;
inherited Create;
Вопрос закрыт, благодарю.
oxffff (2007-07-07 12:03:00) [2]Kolan © (07.07.07 11:55) [3]
Либо использовать OldCreateOrder:=false
Kolan (2007-07-07 11:59:00) [3]> Давай код.
Да, благодарю вы телепатировали верно :) [3]
> Ну во первых это не конструктор.
Виниват, каюсь.
oxffff (2007-07-07 11:56:00) [4]Ну во первых это не конструктор.
Во вторых вот докозательство,
constructor TCustomForm.Create(AOwner: TComponent);
begin
GlobalNameSpace.BeginWrite;
try
CreateNew(AOwner);
if (ClassType <> TForm) and not (csDesigning in ComponentState) then
begin
Include(FFormState, fsCreating);
try
if not InitInheritedComponent(Self, TForm) then
raise EResNotFound.CreateFmt(SResNotFound, [ClassName]);
finally
Exclude(FFormState, fsCreating);
end;
if OldCreateOrder then DoCreate;
end;
finally
GlobalNameSpace.EndWrite;
end;
end;
procedure TCustomForm.AfterConstruction;
begin
if not OldCreateOrder then DoCreate;
if fsActivated in FFormState then
begin
Activate;
Exclude(FFormState, fsActivated);
end;
end;
procedure TCustomForm.DoCreate;
begin
if Assigned(FOnCreate) then
try
FOnCreate(Self);
except
if not HandleCreateException then
raise;
end;
if fsVisible in FFormState then Visible := True;
end;
Вывод, ты что то не так делаешь. Давай код.
Kolan (2007-07-07 11:55:00) [5]Да вы правы.
Просто тело конструкторы было:
constructor TMenuInsertColleague.Create(MainMenu: TMainMenu);
begin
inherited Create;
FMainMenu := MainMenu;
end;
А в унаследованом комструкторе FMainMenu еще nil было.
Так:
constructor TMenuInsertColleague.Create(MainMenu: TMainMenu);
begin
FMainMenu := MainMenu;
inherited Create;
end;
Работает верно.
Благодарю.
Anatoly Podgoretsky (2007-07-07 11:54:00) [6]> Kolan (07.07.2007 11:45:00) [0]
MenuLoader := TMenuInsertColleague.Create(MainMenu1);
Вот здесь можно послать самому себе пользовательское сообщение
end;
Инс (2007-07-07 11:52:00) [7]В OnCreate все компоненты формы уже созданы. Вот было интересное обсуждение по этому поводу:
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=48550