Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Получение имени обработчика события

Delphi , Компоненты и Классы , Свойства и События

Получение имени обработчика события

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


procedure TForm1.Button3Click(Sender: TObject);
var
  P: record case Integer of
      1: (E: TNotifyEvent);
      2: (P: Pointer);
  end;
begin
  P.E := Button1.OnClick;
  Panel1.Caption := 'Обработчик события = ' + MethodName(P.P);
  ShowMessage(Format('%p', [P.P]));
end;

Here's the translation of the text into Russian:

Код на языке Delphi, разработанном Embarcadero Technologies. Цель этого кода - получить имя процедуры обработчика события, конкретно процедуры Button1.OnClick.

Работает следующим образом: 1. Переменная P объявлена как рекорд с двумя возможными случаями: E (типа TNotifyEvent) и P (типа Pointer). Это позволяет хранить либо процедуру обработчика события, либо ее адрес в переменной P. 2. В коде P.E присваивается значение Button1.OnClick, которое является процедурой, обрабатывающей событие Onlick для Button1. 3. Вызывается функция MethodName с аргументом P.P, которая возвращает имя метода (процедуры), указанного адресом P.P. Это будет имя процедуры обработчика события (Button1.OnClick). 4. Свойство Panel1.Caption устанавливается на строку, содержащую имя процедуры обработчика события. 5. Наконец, адрес процедуры обработчика события отображается в сообщении с помощью форматного указателя %p.

Функция MethodName не показана в этом коде, но она, вероятно, является пользовательской функцией или встроенной функцией Delphi, которая возвращает имя метода (процедуры) по его адресу.

Альтернативное решение:

uses
  System.Rtti;

...

function GetEventHandlerName(const AProcedure: TNotifyEvent): string;
var
  TypeInfo: TRTTIType;
begin
  TypeInfo := GetTypeInfo(TypeOf(AProcedure));
  Result := TypeInfo.Name;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  P: record case Integer of
    1: (E: TNotifyEvent);
    2: (P: Pointer);
  end;
begin
  P.E := Button1.OnClick;
  Panel1.Caption := 'Обработчик события = ' + GetEventHandlerName(P.E);
end;

В этом альтернативном решении мы используем unit System.Rtti и функцию GetTypeInfo, чтобы получить информацию о типе процедуры обработчика события (AProcedure). Затем мы доступ ourselves к свойству Name информации о типе, чтобы получить имя метода. Это более прямое решение и не требует пользовательской функции MethodName.

В статье описывается способ получения имени обработчика события в Delphi, который заключается в сравнении указателя на обработчик события с другими методами для определения того, к которому передается данное событие.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Свойства и События ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100

Время компиляции файла: 2024-05-10 07:13:18
2024-05-19 13:59:49/0.0062229633331299/0