Hallo Stefan,
zunächst mal Danke. Du hast das doch mit Raffinesse garniert, denn so kann man mehrere Komponenten im DataSource.OnChange-Event aus umfärben.
Für meine Komponente hätte dies zur Folge gehabt, dass ich die Property-Zuweisungen für Datafield und Datasource hätte neu schreiben müsssen um mit der Zuweisung den Zeiger auf das DataSource.OnChange zu bekommen. Habe mich nun für einen anderen Weg entschieden:
Delphi-Quellcode:
constructor TC_DBMemo.Create(AOwner: TComponent);
begin
inherited;
{ ... }
FDataLink := TFieldDataLink(self.Perform(CM_GETDATALINK, 0, 0));
PtrDataChange := FDataLink.OnDataChange;
FDataLink.OnDataChange := OnNowDataChange;
end;
procedure TCR_DB_Memo.OnNowDataChange(Sender: TObject);
begin
if DataSource <> nil then
if DataSource.DataSet <> nil then
begin
if FDataLink.ReadOnly = true
then color:=clwindows
else color := clblue;
end;
;
PtrDataChange( Sender );
end;
Da Private OnDataChange dem DataLink nach dem inherited im Create zugewiesen ist, habe ich einen Pointer auf die Private-Procedure und kann den zwischenspeichern. Hätte wohl noch einen Weg über Interfaces gegeben, aber die Webseite kennst Du ja bestens.
Grüße aus Hannover