[ mipko @ 15.06.2006. 09:34 ] @
pozdrav,

imam sledeci poroblem. Extendujem TCustomDBGrid.
Imam neki property nazovimo ga

FocusedColor : TColor

override-ova sam DrawCell u kome se vrsi iscrtavanje grida i koristi vrednost gore pomenutog property-a - odnosno njegovog membera.

U SetFocusedColot metodi postavljam vrednost membera koji se koristi u DrawCell, pozovem invalidate - i nista se ne desi u design time. Znaci kontrola se ne iscrta ponovo i ne vidi se izmena. Probao sam da mu postujem paint, da mu pomocu invalidiram region, prozor... sve moguce, ali kontrola i dalje uporno odbija da se iscrta nanovo u design time.
U design time je dovvoljno da se klikne misem na kontrolu i ona se repaintuje i izmena FocusedColor je tu.
U Run time to sve radi.
Da li neko ima resenje ?

hvala,
mipko
[ savkic @ 15.06.2006. 10:56 ] @
> override-ova sam DrawCell u kome se vrsi iscrtavanje grida i koristi vrednost gore pomenutog property-a - odnosno njegovog membera.
> U SetFocusedColot metodi postavljam vrednost membera koji se koristi u DrawCell, pozovem invalidate - i nista se ne desi u design time. Znaci

Šta je SetFocusedColot?

> kontrola se ne iscrta ponovo i ne vidi se izmena. Probao sam da mu postujem paint, da mu pomocu invalidiram
> region, prozor... sve moguce, ali kontrola i dalje uporno odbija da se iscrta nanovo u design time.

Pokušaj Repaint.

> U design time je dovvoljno da se klikne misem na kontrolu i ona se repaintuje i izmena FocusedColor je tu.

Pogledaj šta se dešava kada se klikne kontrola pa ti uradi to isto iz koda.
[ mipko @ 15.06.2006. 11:16 ] @
property FocusedColor : TColor read m_FocusedColor write SetFocusedColor;

procedure TMojaGridKomponenta.SetFocusedColor(col : TColor)
begin
m_FocusedColor := col;

***

end;

na mesto *** stavite sta god hocete od sledeceg ili kombinaciju sledecih metoda:

invalidate;
repaint;
refresh;
update;

nista se ne desava, dakle komponenta se ne iscrta nanovo u design time-u u run-time radi ali nece da se repaintuje u design time.

to zakljucujejem na osnovu koda koji treba da se izvrsi u proceduri DrawCell

TMojaGridKomponenta.DrawCell(...)
begin
inherited;
...
Canvas.Brush.Color := m_FocusedColor;
Canvas.FillRect(...)
...
end;

Nadam se da sam uspeo da objasnim o cemu se radi :)

[Ovu poruku je menjao mipko dana 15.06.2006. u 12:46 GMT+1]
[ savkic @ 15.06.2006. 14:53 ] @
> property FocusedColor : TColor read m_FocusedColor write SetFocusedColor;
> nista se ne desava, dakle komponenta se ne iscrta nanovo u design time-u u run-time radi ali nece da se repaintuje u design time.

> to zakljucujejem na osnovu koda koji treba da se izvrsi u proceduri DrawCell

> TMojaGridKomponenta.DrawCell(...)
> begin
> inherited;
> Canvas.Brush.Color := m_FocusedColor;
> Canvas.FillRect(...)
> end;

U DesignTimeu ne postoji fokusirana celija u dbgridu, pa ako napišeš nešto ovako biće izvršeno samo u runtime:

Code:

  if gdFocused in AState then
  begin
    Canvas.Brush.Color := FFocusedColor;
    Canvas.FillRect(ARect);
  end;


Za probu stavi "if gdFixed in AState then" i moći ćeš da gledaš promene i u designtimeu. Nemoj zaboraviti da posle promene u kodu reinstaliraš komponentu.
[ mipko @ 15.06.2006. 15:09 ] @
Igore,

probao sam to sve... i opet ne radi
[ mipko @ 15.06.2006. 20:05 ] @
reseno, totalno sumanuto. Starteam se ponasa uvrnuto do bola kad radi sa project group :) pa je tako izignorisao moja 2 check-ina i property se uopste nije podesavao preko setter metode.
Izvinjavam se na dizanju prasine