De database aware controls van borland doen dit dmv een TDatalink (of afgeleide ervan):
Code:
constructor TDBEdit.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
inherited ReadOnly := True;
ControlStyle := ControlStyle + [csReplicatable];
FDataLink := TFieldDataLink.Create;
FDataLink.Control := Self;
FDataLink.OnDataChange := DataChange;
FDataLink.OnEditingChange := EditingChange;
FDataLink.OnUpdateData := UpdateData;
FDataLink.OnActiveChange := ActiveChange;
end;
De Datasource van deze componenten wordt gemapt op de FDataLink.DataSource.
Bij een wijziging van de status zal voor een DBEdit via de Datalink een van de vier gekoppelde event methods worden aangeroepen. (weet even niet meer welke, kunnen er ook meerdere zijn)
Als jou componenten zijn afgeleid van die van bij borland dan zou je deze constructie kunnen gebruiken als ze daar niet vergeten waren hoe je componenten moet bouwen....
Deze event methods (DataChange, EditingChange, UpdateData, ActiveChange) staan weer eens in de private sectie.....terwijl voor het mooie ze best protected hadden mogen zijn én virtual.
Enige wat er op zit is netjes zelf een extra TDataLink (of TFieldDataLink: deze biedt wat On... event properties) toe te voegen aan je componenten en zo'n zelfde constructie op te bouwen.
In een van deze event methods (of een combinatie) kan je dan de state opvragen en aan de hand daarvan de kleur van je component zetten.
Bookmarks