Einzelnen Beitrag anzeigen

Muetze1
(Gast)

n/a Beiträge
 
#2

Re: Ereignis OnChangeState in TCheckbox einfügen

  Alt 27. Jun 2007, 00:47
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.
  Mit Zitat antworten Zitat