Функция onclick переопределить событие
у меня есть свой пользовательский класс witch, производный от TButton:
TLoginResultEvent = procedure (Sender: TObject; LoginResult: boolean) of object;
TLoginButton = class(TButton)
private
fLogin: TLoginChooser;
fOnClick: TLoginResultEvent;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure OnClickResult(Sender: TObject; LoginResult: boolean);
published
property Login: TLoginChooser read fLogin write fLogin;
property OnClick: TLoginResultEvent read fOnClick write fOnClick;
end;
в конструкторе я добавил:
constructor TLoginButton.Create(AOwner: TComponent);
begin
inherited;
fOnClick := OnClick;
OnClick := OnClickResult;
end;
но когда я нажимаю на кнопку, она не запускает OnClickResult, что я делаю неправильно? Можно ли "переопределить" обработчик событий OnClick или скрыть его и сделать, например, событие OnResultClick?
1 ответов
при написании компонентов не следует использовать обработчики событий для реализации пользовательского поведения. Вместо этого следует переопределить код, вызывающий эти обработчики событий. В этом случае забудьте о настройке OnClick
. Вместо этого, просто добавьте
public
procedure Click; override;
для объявления класса и реализации
procedure TLoginButton.Click;
begin
inherited; // call the inherited Click method.
// Do something new.
end;
обработчики событий должны использоваться разработчиком используя компонент. Компонентный писатель не должен использовать их сам.
если вы хотите компонент user чтобы увидеть другой метод "OnClick", вы должны реализовать это самостоятельно, например
type
TLoginResultEvent = procedure(Sender: TObject; LoginResult: boolean) of object;
...
TLoginButton = class(TButton)
private
FOnClick: TLoginResultEvent;
...
public
procedure Click; override;
...
published
property OnClick: TLoginResultEvent read FOnClick write FOnClick;
...
procedure TLoginButton.Click;
begin
inherited;
if Assigned(FOnClick) then
FOnClick(Self, true); // or false...
end;