Einzelnen Beitrag anzeigen

Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: DBEdit Farbe ändern bei ReadOnly - Welches Event

  Alt 14. Jun 2011, 15:04
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
Martin Schaefer
  Mit Zitat antworten Zitat