Delphi-Quellcode:
type
TACheckbox = class(TCheckbox)
private
FOnChangeState: TNotifyEvent;
procedure BMSetCheck(var Message: TMessage); message BM_SETCHECK;
published
property OnChangeState: TNotifyEvent read FOnChangeState write FOnChangeState;
end;
Implementation:
Delphi-Quellcode:
{ TACheckbox }
procedure TACheckbox.BMSetCheck(var Message: TMessage);
begin
inherited;
if assigned(FOnChangeState) then
FOnChangeState(Self);
end;
Und das Testprojekt:
Delphi-Quellcode:
procedure TForm1.Blubb(sender: TObject);
begin
ShowMessage('blubb');
end;
procedure TForm1.FormCreate(Sender: TObject);
var
lObj: TACheckBox;
begin
lObj := TACheckbox.Create(Self);
lObj.Parent := Self;
lObj.Top := 10;
lObj.Left := 20;
lObj.Caption := 'Test';
lObj.OnChangeState := Blubb;
end;
Und als Erklärung: Die Methode ist zum einen nicht dynamisch oder virtuell und dazu noch im private Abschnitt der Komponente deklariert und von daher doppelt nicht überschreibbar... *g*. Wenn man aber in der TCheckBox.SetState() Implementierung schaut, dann sieht man, dass eine Nachricht BM_SETCHECK an das Control gesendet wird, damit der Status gesetzt wird. Von daher kann man diese einfach abfangen (und durch inherited wie gehabt weiter verarbeiten lassen) und den Eventhandler auslösen.