[ 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]
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.