Страница 1 из 1

Как обратиться к вызвавшему объекту из обработчика?

Добавлено: 04 май 2005, 18:19
Zmey
Тут у меня такой вопрос, может кто поможет новичку?
Мне надо сделать один обработчик для событий однотипных объектов, которые создаются программой во время её выполнения. Короче надо чтобы в обработчике можно было обратиться к объекту, который инициировал событие. Вот такой вопрос.

Добавлено: 04 май 2005, 18:33
YurikGL
Во многих случаях можно сделать так

Создаешь процедуру типа
Procedure TForm1.OnClickProc(Sender :TObject);

Далее делаешь присвоение процедуры

Buttons[1,1].OnClick:=OnClickProc;

В самой процедуре, если это onClick, например, для доступа к контролу, вызвавшему событие, можно использовать
Form.ActiveControl

Добавлено: 04 май 2005, 20:24
Zmey
Спасибо, идея понятна. Не понятно, как через Form.ActiveControl добраться, допустим до Edit.Text?

Добавлено: 04 май 2005, 20:40
Zroman
Попробуй (Form.ActiveControl as TEdit)

Добавлено: 04 май 2005, 21:29
Zmey
Ага, получилось. :D Дважды спасибо.
Только вот при загрузке программа вылетает, фокус ввода не установлен в нужном месте. Я, конечно, обошёл этот кусок, но может есть ещё какие-нибудь способы добраться до вызвавшего событие объекта?

Добавлено: 04 май 2005, 21:35
YurikGL
Можно ActiveControl:=edit1
или что-нибудь типа
if activecontrol.ClassName='TEdit' then действие для едита

Добавлено: 05 май 2005, 09:06
LAngel
проще...
if ActiveControl is TEdit then with ActiveControl as TEdit do
begin
{}
end;

Добавлено: 05 май 2005, 15:29
Игорь Акопян
Вообще-то объект инициировавший событие это Sender 0 передаётся параметром а дальше:

Код: Выделить всё

if Sender is TEdit then // это если совсем разные объекты цеплять
  if (Sender as TEdit).Text = '' then ...