Форум: "Основная";
Текущий архив: 2008.01.20;
Скачать: [xml.tar.bz2];
ВнизКак узнать имя события в Run Time Найти похожие ветки
← →
ancot (2007-10-19 15:09) [0]Всем доброго дня!
Подскажите есть ли возможность узнать имя события в Run Time при наступлении этого события.
Например: для Button методам OnClick и OnExit назначен один итотже обработчик NotifyEvent.
как различить события в процедуреTForm.NotifyEvent(Sender: TObject)
?
← →
Palladin © (2007-10-19 15:18) [1]да в общем то, AFIAK, никак... разве что через глубокий анализ стека (через попу грубо говоря)...
да и не нужно это... для этого и придумана возможность повешать два разных обработчика на два разных события...
← →
Сергей М. © (2007-10-19 15:20) [2]А зачем понадобились эти имена ?
← →
ancot (2007-10-19 15:32) [3]делаю дизайнер форм.
в рабочем режиме всем контролам на форме назначается один и тот же обработчик наприме для
MouseDown, MouseUp -> MouseEvent
KeyDown, KeyUp -> KeyEvent
OnClick, OnChange, OnExit, OnEnter и т.д. -> NotifyEvent
знать имя события необходимо чтобы выполнить скрипт соотв. этому событию и контролу (контрол конечно есть-sender).
Хотелось зделать универсально чтобы не плодить к каждому событию свой обработчик.
← →
ancot (2007-10-19 15:34) [4]дельфийский стэк вызовов както видит...
← →
Reindeer Moss Eater © (2007-10-19 15:35) [5]А обработчик во время написания не знает чей он орабочик?
← →
ancot (2007-10-19 15:40) [6]форма в целом грузится из файла.
в момент загрузки контролов в зависимости от типа события (TNotifyEvent,TMouseEvent, TKeyPressEvent, TKeyPressEvent) подключается соответствующий обработчикif SameText(pi.PropType^.Name, "TNotifyEvent") then
begin
p := Form.MethodAddress("NotifyEvent");
if Assigned(p) then
begin
mtd.Code := p;
mtd.Data := Form;
SetMethodProp(AComponent, pi.Name, mtd);
← →
ancot (2007-10-19 15:46) [7]Описаный выше участок кода загрузки формы можно упростить если тип события будет совподать с именем обработчика. но все равно придется назначать обработчик для каждого имени события.
← →
Anatoly Podgoretsky © (2007-10-19 19:17) [8]> ancot (19.10.2007 15:46:07) [7]
Назначить каждому событию свой обработчик с таким кодом
begin
CommonCode(Name, другие параметы);
end;
procedure .CommonCode(Name: string, другие параметы);
begin
end;
← →
Юрий Зотов © (2007-10-19 19:58) [9]Берем Sender.
Формируем список его событий типа TNotifyEvent.
Находим, какому из них назначен выполняемый обработчик.
Берем имя этого события.
← →
Ins © (2007-10-19 20:02) [10]
> Находим, какому из них назначен выполняемый обработчик.
Обоим :)
← →
Palladin © (2007-10-19 20:06) [11]
> Юрий Зотов © (19.10.07 19:58) [9]
да да :) именно обоим :) а находим первый попавшийся
← →
Однокамушкин (2007-10-21 16:27) [12]
> ancot (19.10.07 15:34) [4]
> дельфийский стэк вызовов както видит...
Видит он потому, что в программу включается отладочная информация... выключите соответствующую опцию компилятора, и он тоже не увидит
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2008.01.20;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.048 c