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

Вниз

Событие СразуПослеСозданияФормы как получить?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.023 c
2-1184052074
AZIZE
2007-07-10 11:21
2007.08.05
несовместимость типов


2-1183797853
DeadMeat
2007-07-07 12:44
2007.08.05
Выполнение ХП асинхронно (ADO и MSSQL)


4-1171840164
Незнайкак
2007-02-19 02:09
2007.08.05
Ёмкость CD


1-1180103569
DevilDevil
2007-05-25 18:32
2007.08.05
TTabControl VS Manifest


1-1179900136
Yozch1
2007-05-23 10:02
2007.08.05
Экспорт справочника товаров из 1с