![]() |
OnChange in eigener Komponente implementieren
Moin,
ich habe eine kleine Komponente (ein Datumscontrol)), die ich um ein OnChange erweitern möchte. So sieht ihre Deklaration aus:
Delphi-Quellcode:
Wenn ich den Weg über
type
TDateEditPrevNext = Class(TPanel) DateEdit: TDateEdit; Procedure DateEditExit(Sender: TObject); Procedure ButtonPrevClick(Sender: TObject); Procedure ButtonNextClick(Sender: TObject); private // Es gibt keinen optisch passenden Button, aber ein Panel tut's auch ButtonPrev: TPanel; ButtonNext: TPanel; function GetDate: TDate; procedure SetDate(Datum: TDate); public property Date: TDate read GetDate write SetDate; Constructor Create(AOwner: TComponent); override; Destructor Destroy; override; end;
Delphi-Quellcode:
gehe, funktioniert das nicht. TPanel hat ja auch kein OnChange, dass hier durchgereicht werden könnte.
private
... FOnChange: TNotifyEvent; ... published property OnChange: TNotifyEvent read FOnChange write FOnChange; Aber wie implementiere ich das richtig? |
Re: OnChange in eigener Komponente implementieren
In dem Moment, wo OnChange ausgelöst werden soll, schreibst Du
Delphi-Quellcode:
FOnChange muss im Konstruktor natürlich mit nil belegt werden, sonst gibt es u.U. Probleme.
if Assigned(FOnChange) then
FOnChange(self); [edit] Rächtschraibfäller [/edit] |
Re: OnChange in eigener Komponente implementieren
Danke, funktioniert jetzt mit
Delphi-Quellcode:
Ich hoffe, dass da nicht noch eine Falle versteckt ist...
...
private ... procedure DateChanged(Sender: TObject); ... constructor TDateEditPrevNext.Create(AOwner: TComponent); begin FOnChange := nil; ... DateEdit.OnChange := Self.DateChanged; // DAS hatte gefehlt! ... procedure TDateEditPrevNext.DateChanged(Sender: TObject); begin if Assigned(FOnChange) then begin FOnChange(Self); end; end; |
Re: OnChange in eigener Komponente implementieren
Zitat:
|
Re: OnChange in eigener Komponente implementieren
Das hab ich auch immer gedacht, bis ich mal vor längerer Zeit eines Besseren belehrt wurde (D3 oder D4, weiß ich nicht mehr). Außerdem schadet es ja nicht, die Initialisierung selbst vorzunehmen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz