Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 2 odgovora
  • 2.995 pregleda

Najnovija ↓

Može li se klasa kastovati u promenljivu klasu ? 10.02.2008. u 23:37 · pre 227 meseci #1
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.
Potpis
"The quieter you become, the more you are able to hear."
Blog | PowerCMS
Re: Može li se klasa kastovati u promenljivu klasu ? 11.02.2008. u 00:52 · pre 227 meseci #2
> 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.
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.

How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Re: Može li se klasa kastovati u promenljivu klasu ? 11.02.2008. u 12:35 · pre 227 meseci
izmenjeno 1 put, poslednji put lan-mi 11.02.2008. u 14:08
  1. lan-mi11.02.2008. u 14:08zapis iz teksta poruke
#3
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;
Potpis
Arduino Control Center
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme