[delphi] tdbgrid, bepaalde rows in een andere kleur tekenen

Pagina: 1
Acties:

  • THIJZEL
  • Registratie: Januari 2001
  • Niet online
Hallo,

Ik heb een tdbgrid met bestellingen, nu wil ik bepaalde rijen in het rood tekenen omdat ze binnen een bepaalde tijd van de vastgestelde afleveritijd vallen.

hiervoor had ik het volgende stukje code in het ondrawcolumnncell event van mijn dbgrid gescreven
code:
1
2
3
4
5
6
7
8
9
10
11
12
 if datacol = 4 then
        begin
                datum:= column.Field.AsDateTime;
                if (datum = date()) then
                begin
                        dbgBestellingenOverz.Font.Color:=clyellow;
                end;
        end
        else
        begin
                dbgBestellingenOverz.Font.Color:=clblack;
        end;


maar dit blijkt helaas niet te werken.

heeft iemand een idee hoe ik dit wel zou kunnen doen?, ik kan niet te veel code in het ondrawcolumnncell event zetten want dan tekent hij de dbgrid niet snel genoeg meer en gaat hij flickeren(op een p41.7 ).

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 22-08 10:56

Delphi32

Heading for the gates of Eden

Ik heb ff zitten neuzen in wat oude code van mij, en ik zie dat ik voor dit soort zaken ook het OnDrawColumnCell event gebruik. Ik heb echter nooit performance-problemen gehad...
Dat kan m.i. door 3 zaken komen:
1. je wilt heel erg veel regels in je grid kwijt (bij mij is dat meestal beperkt tot een stuk of 50 zichtbare regels)
2. je wilt heel erg veel trage code in je event handler kwijt. Het lijkt me dat jouw voorbeeld gewoon zonder geflikker moet werken; ik heb zelfs event handlers waarin bmptjes in het grid worden gepaint en die knipperen zelfs op een P266 nog niet.
2. ik doe het net iets anders :)

Wat ik anders doe:
code:
1
2
3
4
5
6
7
8
9
10
procedure TForm1.GridOnDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  if (condition) then
    Grid.Canvas.Font.Color := clYellow
  else
    Grid.Canvas.Font.Color := clBlack;
  Grid.DefaultDrawColumnCell(Rect, Datacol, Column, State);
end;

Ik pak dus de Font van het Canvas van het Grid, en niet van het hele grid... weet niet uit mn hoofd of dat uitmaakt (ik gok van wel, dat het nml tig repaint-messages gaat schelen). Tevens laat ik het tekenen over aan de VCL.
Probeer het eens, zou ik zeggen. Ik heb hier goede ervaringen mee.

  • THIJZEL
  • Registratie: Januari 2001
  • Niet online
dat werkt goed ja,
alleen ik heb nu een nieuw probleem.

ik wil nu mijn kleur af laten hangen van de datum + tijd
dus als (dag = vandaag) én tijd is binnen 5 minuten van de aflevertijd dan moet de hele row oranje getekend worden.


maar het probleem is dat de event DrawColumnCell per colomn word uitgevoerd.

ik heb nu dit: aleen din werkt alleen op de column afleverdatum:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if datacol=4 then
                begin
                        datum:= column.Field.AsDateTime;
                        if (datum = date) then
                        begin
                                dbgBestellingenOverz.Canvas.Font.Color := clgreen;
                                dbgBestellingenOverz.DefaultDrawColumnCell(Rect, Datacol, Column, State);


                        end
                        else if (datum<date)then
                        begin
                                dbgBestellingenOverz.Canvas.Font.Color := clred;
                                dbgBestellingenOverz.DefaultDrawColumnCell(Rect, Datacol, Column, State);

                        end;

                end;

  • Night-Reveller
  • Registratie: September 2000
  • Laatst online: 22:29
Als je de hele rij wil rood/groen wil painten, dan mot je de datacol = 4 weghalen...
Een hele rij in één keer painten gaat niet.

[ Voor 22% gewijzigd door Night-Reveller op 26-03-2003 17:49 ]


  • THIJZEL
  • Registratie: Januari 2001
  • Niet online
yup dat klopt alleen dan werkt de 'datum :=column.Field.AsDateTime '

niet meer

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Je kan vast via TDBGrid bij de 4e kolom komen.

We adore chaos because we like to restore order - M.C. Escher

Pagina: 1