[ Aleksandar Milcevic @ 19.02.2003. 10:19 ] @
Zdravo. Evo jednog pitanja u vezi sa pravljenjem komponenata. Nista specijalno, zelim da uradim RadioButton koji ima tri dodatna svojstva ActiveColor, NonActiveColor, CheckedColor. Prva boja treba da e aktuelna kada je mis iznad komponente, treca kad je komponenta checked i druga inace. Sad za ovo sa misem iznad mi je lako samo obradjujem poruke cm_MouseEnter i cmMouseLeave, nego ne bih znao sta cu sa ovim kad je checked. Na primer kod CheckBox-a bih mogao jednostavno da zaobidjem metod Click i da tu napisem:
Code:
 inherited;
if Checked then
 Font.Color:=fCheckedColor
else  Font.Color:=fNonActiveColor;
To radi, ali ne moze da se primeni da RadioButton jer to nije jedini nacin da se ono selektuje odnosno deselektuje. Pa eto, ako mozda neko se bavi ovakvim zafrkancijama mogao bi da napise neku zanimljivu ideju.
[ -zombie- @ 19.02.2003. 16:23 ] @
bolje da overridujesh paint metodu za tRadioButton (ili dodaj onpaint, ili nesto trece izmenjaj).

e, onda kad god se promeni stanje, ti pozovi repaint() (valjda tako bese metoda), a u paint metodi proveri stanje, i na osnovu njega crtaj...

(znaci kada hendlujesh cm_mouseEnter i exit, samo setuj fMouseOver:=true/false i pozovi repaint(). a za onclick ce on sam valjda da pozove)

[ Aleksandar Milcevic @ 21.02.2003. 09:15 ] @
Nije meni problem sa MouseEnter i Exit, vec samo kad je chekirano, a kad ne. Uopste nisam siguran da sam razumeo tvoju ideju. Kazes "e onda kad god se promeni stanje, ti pozovi repaint()...". Problem je u tome sto ne znam kada se menja stanje (ako mislimo na isto stanje:- Checked). Kad bih to znao mogao bih odmah tu da kazem nesto poput Font.Color:=..., a ne da pozivam repaint, ako sam dobro to uocio?!
[ -zombie- @ 21.02.2003. 16:54 ] @
sorry. nisam dobro sKvatio sta je tvoj problem.

elem, probaj da overridujesh setChecked(aValue: boolean) u tvojoj novoj klasi. to se pozove svaki put kada se promeni checked. znaci nesto tipa:

Code:

tActiveRadioButton = class(tRadioButton)
    //...
protected
    procedure setChecked(aValue: boolean); override;
    //...
end;


sto bi trebalo da izgleda otprilike ovako:

Code:

procedure tActiveRadioButton.setChecked(aValue: boolean);
begin
    inherited;
    if Checked then begin
        //...
    end else begin
        //...
    end;
end;



za ovakve stvari, najbolje se uci iz samog koda raznih vcl (clx) kontrola. pogledaj po kodu. samo drzi ctrl i klikni na tRadioButton, i videces kako se sve radi. najbolji nacin za ucenje..

poz.
[ Aleksandar Milcevic @ 22.02.2003. 18:22 ] @
E da, upravo sam na tako nesto mislio. Nazalost trenutno nemam tu mogucnost da to i na delu isprobam jer mi Delphi ne funkcionise bas najbolje (o cemu sam takodje postavio temu na forumu), tako da ...