Einfach mal so runtergeschrieben und ein wenig mit nem simplen Programm getestet:
Delphi-Quellcode:
type
TDataSourceHack =
class(
DB.TDataSource)
end;
TControlHack =
class(Controls.TControl)
end;
// kommt ins OnDataChanged der DataSource - könnte man auch über das abgeleitete DBEdit dranhängen
var
Link: Pointer;
begin
for Link
in TDataSourceHack(Sender).DataLinks
do
begin
if (TObject(Link)
is TFieldDataLink)
and (TFieldDataLink(Link).Control
is TControl)
then
begin
if TDataSourceHack(Sender).DataSet.CanModify
and (
not Assigned(TFieldDataLink(Link).Field)
or not TFieldDataLink(Link).Field.
ReadOnly)
then
TControlHack(TFieldDataLink(Link).Control).Color := clWindow
else
TControlHack(TFieldDataLink(Link).Control).Color := clBtnFace;
end;
end;
end;