Форум: "Начинающим";
Текущий архив: 2007.08.05;
Скачать: [xml.tar.bz2];
ВнизСобытие СразуПослеСозданияФормы как получить? Найти похожие ветки
← →
Kolan © (2007-07-07 11:45) [0]Здравствуйте,
Вот есть код:procedure TCustomColleagueMainForm.FormCreate(Sender: TObject);
begin
ReportMemoryLeaksOnShutdown := True;
LoadColleaguesLoader;
MenuLoader := TMenuInsertColleague.Create(MainMenu1);
end;
Как видите мне нужно указатьMainMenu1
, но в конструкторе оно ещеnil
. Хорошо бы создать этот объект во время когда форма уже создана. Как этого добится?
Вижу два пути:
1.OnShow + флаг для того, чтобы не создавать экземпляр при каждом показе формы.
2. В TMenuInsertColleague реализовать от похожее на 1.
← →
Инс © (2007-07-07 11:52) [1]В OnCreate все компоненты формы уже созданы. Вот было интересное обсуждение по этому поводу:
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=48550
← →
Anatoly Podgoretsky © (2007-07-07 11:54) [2]> Kolan (07.07.2007 11:45:00) [0]
MenuLoader := TMenuInsertColleague.Create(MainMenu1);
Вот здесь можно послать самому себе пользовательское сообщение
end;
← →
Kolan © (2007-07-07 11:55) [3]Да вы правы.
Просто тело конструкторы было:constructor TMenuInsertColleague.Create(MainMenu: TMainMenu);
begin
inherited Create;
FMainMenu := MainMenu;
end;
А в унаследованом комструкторе FMainMenu еще nil было.
Так:constructor TMenuInsertColleague.Create(MainMenu: TMainMenu);
begin
FMainMenu := MainMenu;
inherited Create;
end;
Работает верно.
Благодарю.
← →
oxffff © (2007-07-07 11:56) [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:59) [5]> Давай код.
Да, благодарю вы телепатировали верно :) [3]
> Ну во первых это не конструктор.
Виниват, каюсь.
← →
oxffff © (2007-07-07 12:03) [6]Kolan © (07.07.07 11:55) [3]
Либо использовать OldCreateOrder:=false
← →
Kolan © (2007-07-07 12:05) [7]> Либо использовать OldCreateOrder:=false
Ок. Благодарю за совет, хватило просто перестановки последовательности
FMainMenu := MainMenu;
inherited Create;
Вопрос закрыт, благодарю.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.08.05;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.045 c