Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - DB Grid - Farbe ausgewählter Datensatz


Hendrik - Do 20.02.03 18:25
Titel: DB Grid - Farbe ausgewählter Datensatz
Hallo

Ich habe programmiert, dass die Zeilen im DB Grid unterschiedlich gefärbt werden.

Allerdings wird jetzt nicht mehr die ausgewählte Zeile blau hinterlegt, sondern nur noch die Schrift in weiß angezeigt.

Das ist aber schlecht, da einige Zeilen auch weiß geblieben sind.

Kann ich diese Farbe irgendwie festlegen (ich habe schon geguckt, aber nichts gefunden)?


Horst - Do 20.02.03 22:13

hallo

wenn du dich für die kostenlose RxLib erwärmen kannst,
kann ich die sagen wie es geht, mit der Standard dbgrid
hatte ich damals auch schwierigkeiten.

Gruß

Horst

:wave:


UGrohne - Do 20.02.03 23:20

Du fragst einfach ab, in Deiner OnDrawCell-Proz, ob die Zelle Selected ist. Das geht mit gdselected in State Und dann kannst Du danach ja die Farbe der markierung ändern. Und probier einfach auch mal die Font-Farbe zu ändern, das müsste funktionieren, probiers einfach mal aus. Aber das mit dem balken funktioniert so bei mir. Is ganz einfach...

EDIT:
Ja, also das mit dem Schriftfarbe ändern funktioniert bei mir wunderbar über dbgrid.Canvas.Font.Color:=....


foxy - Fr 21.02.03 08:39

guden
ug ??

hmmm habe auch gerade das problem ... hab gerade schon im Forum gesucht aber kein befriedigendes ergebnis erhalten ...

du schriebst


Quelltext
1:
gdselected in State                    


alles gut und schön nur was ist "State" ????
das erkennt der compiler nicht ... oder hast du da eine Booleanische variable gesetzt?


UGrohne - Fr 21.02.03 09:29

Das Ereignis DrawColumnCell besitzt eine Variable State vom Typ TGridDrawState mit der man einige Sachen feststellen kann: Ist die Zelle selektiert, fokusiert oder gehört Sie zum festen Bereich.

Gruß


foxy - Fr 21.02.03 09:35

ja habe ich schon rausgefunden ....


Quelltext
1:
2:
3:
4:
var DrawState: TGridDrawState;
begin
  If gdselected in DrawState then
    Begin

nur bis zu begin kommt er nicht ... :/

ich glaube ich hab irgend etwas vergessen ... ich kuck nomma nach aber erst ma KAFFEEEEEE :)


smiegel - Fr 21.02.03 09:39

Hallo foxy,

Du bringst da anscheinend etwas durcheinander. Das OnDrawColumnCell-Ereignis des DBGrids übergibt bereits eine Variable State von Typ TGridDrawState.

Du musst den aktuellen Zeichenstatus mit


Quelltext
1:
if (gdSelected in State) then                    


abfragen. Um das zu erreichen, musst Du dafür keine Variable deklarieren.

Außerdem kann es nicht schaden, wenn Du 'mal in der Delphi-Hilfe vorbeischaust.


foxy - Fr 21.02.03 09:50

narf ....
ich glaube das frühe aufstehen bekommt mir nich :D

ne quatsch smiegel das war nicht der fehler :)

hab falsches ereignis benutzt :rofl:


BennyM - Di 02.09.03 10:31

Hallo,
du hast unten geschrieben
Zitat:
Hallo

Ich habe programmiert, dass die Zeilen im DB Grid unterschiedlich gefärbt werden

Das selbe habe ich auch vor nur bei mir funzts irgendwie nicht. Kannst du mir mal bitte den Quellcode mailen ?? Wäre echt klasse. Danke


Hendrik - Di 02.09.03 14:32

Hey! Hier der Quellcode (Die Farben sind in einer Stringliste gespeichert) :


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
 if  fztable.FieldByName('Status').asstring<>'' then begin
 case fztable.FieldByName('Status').asstring[1of
    '1' : fzgrid.Canvas.Brush.Color := strtoint(strl[16]);
    '2' : fzgrid.Canvas.Brush.Color := strtoint(strl[17]);
    '3' : fzgrid.Canvas.Brush.Color := strtoint(strl[18]);
    '4' : fzgrid.Canvas.Brush.Color := strtoint(strl[19]);
    '6' : fzgrid.Canvas.Brush.Color := strtoint(strl[20]);
    '7' : fzgrid.Canvas.Brush.Color := strtoint(strl[21]);
    '8' : fzgrid.Canvas.Brush.Color := strtoint(strl[22]);
    end;
    end;
    if (gdSelected in State) then  fzgrid.Canvas.Brush.Color :=clNavy;
    fzgrid.DefaultDrawColumnCell(Rect, DataCol, Column, State)


BennyM - Mi 03.09.03 08:51

Hallo, danke für den Quellcode aber ich habe es einwenig anders vor.
ich hol meine daten in mein dbgrid weis noch nicht wieviel sätze es sind und ich möchte das die erste zeile z.B. weis wird die zweite z.B. clNavy dann wieder weis navy weis navy usw.