Я хочу проверить значение события, чтобы убедиться, что оно
указывает в настоящий момент на определенную функцию.
По всей видимости вам придется использовать две временные переменные.
Попытайтесь сделать следующее:
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, используя временные переменные для сравнения значений событий.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.