Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Синтаксис ссылки на событие

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

Синтаксис ссылки на событие

Автор: Kurt

Я хочу проверить значение события, чтобы убедиться, что оно указывает в настоящий момент на определенную функцию.

По всей видимости вам придется использовать две временные переменные. Попытайтесь сделать следующее:


var
  ClickMethod: TNotifyEvent;
  B1Click: TNotifyEvent;
...
ClickMethod := Button1.OnClick;
B1Click := Button1Click;
if @ClickMethod = @B1Click then 
  messagebeep(0);

Here's the translation of the provided text into Russian:

Код, который вы предоставили, пытается проверить, являются ли два обработчика событий одинаковыми. Однако, в Delphi есть более эффективный способ сделать это.

В Delphi тип TNotifyEvent представляет собой обработчик события для событий, таких как OnClick, OnMouseDown и т.д. Когда вы назначаете обработчик события для контрола, вы не назначаете адрес функции, аrather ссылку на функцию. Поэтому сравнивать адреса двух обработчиков событий с помощью @ClickMethod = @B1Click не будет работать так, как ожидалось.

Вместо этого можно использовать событие ObjectAfterConstruction и хранить оригинальный обработчик события в переменной. Затем, когда вы хотите проверить, является ли текущий обработчик события тем же, что и оригинальный, можно просто сравнить две переменные.

Вот пример, как это можно сделать:

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    FOriginalButtonClick: TNotifyEvent;
  end;

var
  Form1: TForm1;

implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
  FOriginalButtonClick := Button1Click;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if Assigned(FOriginalButtonClick) and (FOriginalButtonClick = Button1Click) then
    MessageBeep(0);
end;

В этом примере Button1Click - это оригинальный обработчик события. Когда вы назначаете новый обработчик события для Button1.Click, он заменит оригинальный. Если вы хотите проверить, является ли текущий обработчик события тем же, что и оригинальный, можно сравнить FOriginalButtonClick с текущим Button1Click.

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


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

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


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


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:37:06/0.0034689903259277/0