Главная страница
    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.045 c
2-1198380081
Шар
2007-12-23 06:21
2008.01.20
Как читать данные из потока в такое поле ?


2-1197854221
Bpeguk
2007-12-17 04:17
2008.01.20
Конвертер систем


2-1198415884
Artem
2007-12-23 16:18
2008.01.20
Как заставить работать TAnimate (воспроизводить gif-файлы)


2-1198219963
LexXL
2007-12-21 09:52
2008.01.20
проверить наличие файла на ftp


15-1197965975
@!!ex
2007-12-18 11:19
2008.01.20
Установка компонентов на Turbo Delphi Explorer





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