Ich versuche eine neue TEdit-Komponente zu entwickeln.Delphi-Komponentenentwicklung - Ereignisse in der Komponente weitergeben
TDBFilterEdit = class(TEdit)
Die Komponente soll ein zugeordnetes DataSet basierend auf der Zeichenfolge filtern, die in seinem Bearbeitungsfeld eingegeben wird.
das ist, was meine Komponente wie folgt aussieht: I Jetzt
type
TDBFilterEdit = class(TEdit)
private
{ Private-Deklarationen }
fFilter:String;
fDataSource:TDataSource;
fDataSet:TDataSet;
fText:string;
protected
{ Protected-Deklarationen }
procedure SetFilter(value:String);
procedure SetDS(value:TDataSource);
procedure FilterRecords(DataSet:TDataSet; var Accept:Boolean);
procedure Change(Sender:TObject);
procedure SetText(value:String);
public
{ Public-Deklarationen }
constructor Create(AOwner:TComponent);
published
{ Published-Deklarationen }
property Text:String read fText write SetText;
property Filter:String read fFilter write SetFilter;
property DataSource:TDataSource read fDataSource write SetDS;
end;
, ziemlich Anfänger bin, wenn es um Komponenten-Entwicklung kommt. Meine erste Idee war, die OnFilterRecord-Methode des Datasets zu überschreiben, sobald die DataSource meiner Komponente zugewiesen wird und diese ausgelöst wird, wenn sich der Text meiner Edit-Komponente ändert.
procedure TDBFilterEdit.SetDS(value:TDataSource);
var
myaccept:Boolean;
begin
fDataSource:=value;
fDataSet:=fDataSource.DataSet;
if fDataSet=nil then Exit;
fDataSet.OnFilterRecord:=FilterRecords;
if Filter<>'' then fDataSet.OnFilterRecord(fDataSet,myaccept);
end;
Mein Problem ist, ich weiß nicht, wie man die Komponente darauf aufmerksam macht, dass ihre Text-Eigenschaft aktualisiert wurde. Ich habe versucht, die OnChange-Methode mit folgendem Code
procedure TDBFilterEdit.Change(Sender:TObject);
begin
Filter:=Text;
inherited Change();
end;
jedoch bisher ohne Erfolg zu übersteuern.
Der übliche Weg von Wenn Sie dies tun, schreiben Sie eine Methode (die als DoOnChange bezeichnet werden kann), die innerhalb Ihrer Änderung aufgerufen wird, und führt alles aus, was Sie möchten, einschließlich des Aufrufs spezieller Ereignisbehandlungsroutinen, die Sie möglicherweise bereitstellen möchten. Schauen Sie sich die verschiedenen DoOnxxxx-Methoden in der VCL an und Sie sollten bald auf die Idee kommen. – MartynA