Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как программно назначить форме событие Oncreate?


Страницы:   1 2

Gedevan ©   (2015-11-03 12:40:00) 

Событие нужно назначать когда форма уже создана? т.е. метод крейт был вызван. В таком случае, как же мне подсунуть туда свою процедуру?


Palladin   (2015-11-06 13:48:00) [1]

http://www.eonet.ne.jp/~gakana/tablacus/scriptcontrol_en.html


ухты   (2015-11-05 16:31:00) [2]


> Вам, барин, надо почитать статью А. Тенцера:
> Использование Microsoft ScriptControl.
Только для х64 нету Microsoft ScriptControl. По крайней мере до недавнего времени не было, может кто то и собрал ...


Leonid Troyanovsky   (2015-11-05 10:14:00) [3]


> Германн ©   (05.11.15 01:01) [26]

> и поняли бы в каком мире мы нынче живём! :)

Нынче как и раньше:
кто не стремится узнать как перекрыть конструктор
идет в очередь за метлой.

--
Regards, LVT.


Leonid Troyanovsky   (2015-11-05 10:10:00) [4]


> gedevan   (05.11.15 06:53) [28]

> написано на скриптовом языке, т.е. чтобы вызвать это мне
> нужно специально для этого события скомпилировать отдельный
> скрипт и запустить его...

Кто на ком стоял?

Вам, барин, надо почитать статью А. Тенцера:
Использование Microsoft ScriptControl.

Возможно, что лопата там.

--
Regards, LVT.


Leonid Troyanovsky   (2015-11-05 10:04:00) [5]


> Юрий Зотов ©   (04.11.15 18:12) [20]

> и запускаю программу. Вопрос: какой метод сработает - RunTimeProc
> или DesignTimeProc ?Это я к тому, что перекрытие конструктора
> может и не сработать.

В любом случае назначаемый обработчик уже должен существовать.
Т.е., в перекрытом конструкторе нужно просто вызвать RunTimeProc
в нужном месте.

--
Regards, LVT.


Leonid Troyanovsky   (2015-11-05 09:59:00) [6]


> кгшзх ©   (04.11.15 14:52) [18]

> актуален для всего лежащего на форме, но не созданного в
> рантайме

На худой конец и форма контрол.

--
Regards, LVT.


gedevan   (2015-11-05 06:53:00) [7]

procedure AfterConstruction; virtual; кстати получается что не подходит, потому что, то что я должен в нем выполнить написано на скриптовом языке, т.е. чтобы вызвать это мне нужно специально для этого события скомпилировать отдельный скрипт и запустить его...


Gedevan   (2015-11-05 05:46:00) [8]

госпаде, программа IDE на скриптовом языке там есть дефолтная форма. Т.е. у меня в проге тоже есть Design time и run time. вот в Designtime я пишу обработчик для Oncreate  формы, а в рантайме хочу чтобы он выполнился. в скриптовом языке есть возможность создавать программно все компоненты и формы и назначать им обработчики, и именно это я и пытаюсь реализовать, потому что в противном случае мне приходится на каждый обработчик компилировать свой скрипт, создавать компоненты в рантайме, подцеплять им процедуры события и вызывать из этих процедур этот скрипт, т.е. на каждое событие нужен отдельный скрипт, а я ща делаю чтобы был 1 скрипт на всех. Сейчас у меня в рантайме при запуске в апликейшене создается форма и у нее есть событие FormCreate и там я и написал вызов скрипта. А если форму создаешь в самом скрипте, то вот и получается фигня такая..

Я почитал, пробую...


Германн   (2015-11-05 01:01:00) [9]

Удалено модератором
Примечание: Создание пустых сообщений


NoUser   (2015-11-04 22:20:00) [10]

> Юрий Зотов ©   (04.11.15 21:11) [23]
Ага, тогда так: )
.
procedure DoCreate; override;
.
procedure TAddForm.DoCreate;
begin
 case Random(3) of
   0: OnCreate := FormCreateX;
   1: OnCreate := FormCreateY;
   2: OnCreate := FormCreateZ;
 end;
inherited;
end;


Юрий Зотов   (2015-11-04 21:15:00) [11]

А вообще, непонятно, зачем понадобилось назначение обработчика OnCreate в run-time. Похоже на X, Y, Z.


Юрий Зотов   (2015-11-04 21:11:00) [12]

> NoUser ©   (04.11.15 20:06) [21]

У Вас в строке 13 происходит чтение DFM и если там прописан назначенный в design-time обработчик OnCreate, то он перекроет назначенные Вами в строках 8, 9 10.

См. [20].


Smile   (2015-11-04 20:15:00) [13]

Удалено модератором
Примечание: Создание пустых сообщений


NoUser   (2015-11-04 20:06:00) [14]

> [2]


// Application.CreateForm(TAddForm, AddForm);

procedure TMainForm.FormCreate(Sender: TObject);
begin
 AddForm := TAddForm(TAddForm.NewInstance);

 case Random(3) of
   0: AddForm.OnCreate := AddForm.FormCreateX;
   1: AddForm.OnCreate := AddForm.FormCreateY;
   2: AddForm.OnCreate := AddForm.FormCreateZ;
 end;

 AddForm.Create(Application);
end;


Юрий Зотов   (2015-11-04 18:12:00) [15]


constructor TMyForm.Create(AOwner: TComponent; RunTimeProc: TNotifyEvent)
begin
 OnCreate := RunTimeProc;
 inherited Create(AOwner);
end;


В IDE назначаю TMyForm.OnCreate = DesignTimeProc и запускаю программу. Вопрос: какой метод сработает - RunTimeProc или DesignTimeProc ?

Это я к тому, что перекрытие конструктора может и не сработать. Лучшее решение - AfterConstruction.


Sha   (2015-11-04 15:12:00) [16]

> Dimka Maslov ©   (04.11.15 12:25) [17]
> А что AfterConstruction теперь запрещён?

Нет, не запрещен, его тоже нормально перекрыть можно в своем классе. Это другой штатный способ сделать что-то до вызова OnCreate.
Проблема с передачей туда параметра. Если через поле класса, то лучше это сделать прямо в конструкторе. Не глобальные же переменные использовать.


кгшзх   (2015-11-04 14:52:00) [17]

Еще для контролов может быть полезно Loaded; override.


лоадед актуален для всего лежащего на форме, но не созданного в рантайме


Dimka Maslov   (2015-11-04 12:25:00) [18]

А что AfterConstruction теперь запрещён?


sniknik   (2015-11-04 11:38:00) [19]

> Это уже не будильник, который звонит после нажатия на кнопку, когда я уже проснулся :)
понятно, читаешь местами, и потому "в будильниках" ты тоже нихрена не понимаешь... где кукушка?


Leonid Troyanovsky   (2015-11-04 09:22:00) [20]


> Германн ©   (04.11.15 00:54) [13]

> в рантайме показано как нужно динамически создавать компоненты
> и как им назначать обработчики событий. Формы тоже можно
> создавать динамически и можно назначать им обработчики.
> Вот только у компонент нет обработчиков OnCreate, а у форм
> и датамодулей есть. А назначить его динамически форме хочется.

Для динамически создаваемых компонентов (форм в т.ч.)
лучше не назначать обработчики, а перекрывать (override)
соответствующие методы диспетчеризации. Ну, или конструктор,
как в данном случае.

Еще для контролов может быть полезно Loaded; override.

--
Regards, LVT.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо