새로운 TEdit 구성 요소를 개발하려고합니다.델파이 구성 요소 개발 - 구성 요소 내에서 이벤트 전파
TDBFilterEdit = class(TEdit)
구성 요소는 Edit-Field에 입력 된 문자열을 기반으로 연결된 DataSet을 필터링합니다.
이처럼 내 구성 요소 모습입니다 : 그것은 구성 요소 개발에 올 때
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;
지금, 나는 꽤 초보자입니다. 내 첫 번째 아이디어는 DataSource가 내 구성 요소에 지정되면 즉시 데이터 집합의 OnFilterRecord 메서드를 재정의하고 내 Edit 구성 요소의 텍스트가 변경 될 때마다 트리거합니다.
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;
내 문제는 구성 요소가 Text 속성이 업데이트되었음을 알리는 방법을 알지 못합니다. 다음 코드로 OnChange-Method를 재정의하려고 시도했습니다.
procedure TDBFilterEdit.Change(Sender:TObject);
begin
Filter:=Text;
inherited Change();
end;
그러나 지금까지는 아무 소용이 없습니다.
일반적인 방법 이렇게하려면 변경 내에서 호출되는 메서드 (DoOnChange라고도 함)를 작성하고 제공하려는 특수 이벤트 처리기를 호출하는 등 원하는 작업을 수행해야합니다. VCL에서 다양한 DoOnxxxx 메소드를 살펴보고 곧 아이디어를 얻으십시오. – MartynA