Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.062 c
15-1197358652
megabyte
2007-12-11 10:37
2008.01.20
Тема диплома...


2-1198256206
Riply
2007-12-21 19:56
2008.01.20
Безопасная загрузка библиотеки.


2-1198268866
Elec3C
2007-12-21 23:27
2008.01.20
Обработка клавиш


2-1198056331
Washington
2007-12-19 12:25
2008.01.20
Высота панели задач


15-1197754927
Johnmen
2007-12-16 00:42
2008.01.20
Отдам в хорошие руки. Москва.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский