Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.47 MB
Время: 0.072 c
2-1184067049
AZIZE
2007-07-10 15:30
2007.08.05
Как програмно определить


2-1183982427
Nightmare
2007-07-09 16:00
2007.08.05
архивирование


4-1171872184
Torn
2007-02-19 11:03
2007.08.05
Как отключить floppy через реестр?


15-1183785041
JanMihail
2007-07-07 09:10
2007.08.05
Хочу купить ЖК Монитор


2-1183727842
koha
2007-07-06 17:17
2007.08.05
Можно ли создать событие для не визуального класса?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский