[ Miroslav Ćurčić @ 10.02.2008. 22:37 ] @
Zatrebalo mi je pre neki dan da uhvatim OnChange većem broju kontrola na formi da bih im promenio Color ako su prazne.

U igri je šarenilo: tEdit, tMaskEdit, tMemo, tComboBox, tCheckBox, pa neke TNT komponente, i nalteh na problem jer iako je osobina Color deklarisana u tControl nije publikovana sve do krajnje klase pa sam morao pisati:
if Sender is tEdit then (Sender as tEdit).Color:= x;
if Sender is tMaskEdit then (Sender as tMaskEdit).Color:= x;
if Sender is tMemo then (Sender as tMemo).Color:= x;
itd. desetak redova.

Može li nekako elegantnije, npr.
KASTUJ_U_KLASU(Sender, Sender.ClassName).Color:= x;

Znači pitanje je može li se objekat kastovati u klasu čije ime priložim kao string promenljiva.

Nije toliko bitno za ovaj konkretni problem, radi kako radi,
pitam uopšteno iz radoznalosti, kako kastovati promenljivom.
[ savkic @ 10.02.2008. 23:52 ] @
> U igri je šarenilo: tEdit, tMaskEdit, tMemo, tComboBox, tCheckBox, pa neke TNT komponente, i nalteh na problem jer iako je osobina Color
> deklarisana u tControl nije publikovana sve do krajnje klase pa sam morao pisati:
> if Sender is tEdit then (Sender as tEdit).Color:= x;

Deklariši helper klasu i nju iskoristi za dodelu.
type
TMyControl = class(TControl);

TMyControl(Sender).Color := clBlack;

Ili možeš koristiti RTTI, unit je TypInfo, a funkcije su SetxxxPropInfo.
[ lan-mi @ 11.02.2008. 11:35 ] @
Probaj ovako:

for i:=0 to Componentcount-1 do
if components[I] is TWinControl then begin
(Components[I] as TWinControl ).Brush.Style:=bssolid;
(Components[I] as TWinControl ).Brush.Color:=clyellow;
(Components[I] as TWinControl ).Refresh;
end;
end;

[Ovu poruku je menjao lan-mi dana 11.02.2008. u 14:08 GMT+1]