Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi DBGrid.Canvas.Brush.Color -> dgrowselect anzeigen (https://www.delphipraxis.net/84655-dbgrid-canvas-brush-color-dgrowselect-anzeigen.html)

HolgerCW 19. Jan 2007 15:55


DBGrid.Canvas.Brush.Color -> dgrowselect anzeigen
 
Hallo zusammen,

ich habe in dem Ereignis on DrawColumnCell folgenden Code hinterlegt:

Delphi-Quellcode:
if DataModuleConnectionGeraete.QueryVerlauf['GEBUCHT'] = NULL then
begin
  DBGridVerlauf.Canvas.Brush.Color :=clmaroon;
  DBGridVerlauf.DefaultDrawColumnCell(Rect, DataCol, Column,State);
end;
Wie bekomme ich es hin, das die mit der Farbe clmaroon ausgefüllten Zeilen, auch beim selktieren der Zeile grau angezeigt werden und nicht maroon bleiben ?

Gruss

Holger

mkinzler 19. Jan 2007 15:59

Re: DBGrid.Canvas.Brush.Color -> dgrowselect anzeigen
 
Das mußt du seber tun.
Der Status steht im Parameter State

HolgerCW 19. Jan 2007 16:04

Re: DBGrid.Canvas.Brush.Color -> dgrowselect anzeigen
 
Und nach was frage ich den Parameter State ab ?

mkinzler 19. Jan 2007 16:07

Re: DBGrid.Canvas.Brush.Color -> dgrowselect anzeigen
 
Zitat:

Zitat von HolgerCW
Und nach was frage ich den Parameter State ab ?

Delphi-Quellcode:
if State = gdSelected ...

HolgerCW 19. Jan 2007 16:11

Re: DBGrid.Canvas.Brush.Color -> dgrowselect anzeigen
 
Ja so klappt es:

Delphi-Quellcode:
if State <> [gdselected] then
begin
 DBGridVerlauf.Canvas.Brush.Color :=clmaroon;
 DBGridVerlauf.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
Nur bleibt die erste Spalte in der ursprünglichen Farbe. Warum und geht das auch zu beheben ?

Gruss

Holger

mkinzler 19. Jan 2007 16:12

Re: DBGrid.Canvas.Brush.Color -> dgrowselect anzeigen
 
Zitat:

Nur bleibt die erste Spalte in der ursprünglichen Farbe. Warum und geht das auch zu beheben ?
Delphi geht halt davon aus, wenn du selber zeichne willszt, das du das dann miterledigst.

HolgerCW 19. Jan 2007 16:13

Re: DBGrid.Canvas.Brush.Color -> dgrowselect anzeigen
 
Wie erledige ich das mit ?

Gruss und schonmal danke für die Hilfe ...

Holger

mkinzler 19. Jan 2007 16:58

Re: DBGrid.Canvas.Brush.Color -> dgrowselect anzeigen
 
Indem du in der State-Abfrage sie jeweilige Farbe die setzt

Delphi-Quellcode:
if State = [gdselected] then
begin
    DBGridVerlauf.Canvas.Brush.Color :=clmaroon
else
  //Sonstige Farbe

DBGridVerlauf.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

HolgerCW 22. Jan 2007 08:38

Re: DBGrid.Canvas.Brush.Color -> dgrowselect anzeigen
 
Hallo,

so habe ich das auch gemacht. Nur bleibt die erste Spalte trotzdem in der alten Farbe.

Vielleicht ncoh einen Hinweis ?

Gruss

Holger

mkinzler 22. Jan 2007 09:01

Re: DBGrid.Canvas.Brush.Color -> dgrowselect anzeigen
 
Hast du mal geschaut, ob die Routine überhaupt aufgerufen wird?

HolgerCW 22. Jan 2007 09:25

Re: DBGrid.Canvas.Brush.Color -> dgrowselect anzeigen
 
Klar, sonst würden ja nicht die anderen Spalten farblich geändert.

Ist irgendwie komisch.

Nur die erste Spalte ? Alle andern werden farblcih richtig dargestellt

Gruss

Holger

mkinzler 22. Jan 2007 09:32

Re: DBGrid.Canvas.Brush.Color -> dgrowselect anzeigen
 
Dir Routine wird ja für jede Spalte einzeln aufgerufen (pro Zelle einmal).
Setzt mal einen Breakpoint und schau, ob das für die erste Spalte auch der Fall ist und mit welchen Werten sie aufgerufen wird.

HolgerCW 22. Jan 2007 10:53

Re: DBGrid.Canvas.Brush.Color -> dgrowselect anzeigen
 
Hallo,

bei mir heisst die erste Spalte 'ID'

wenn ich mit

Delphi-Quellcode:
if Column.Title.Caption = 'ID' then
begin
 showmessage('ID');
end;
abfrage, führt er showmessage aus.

Wenn ich aber:

Delphi-Quellcode:
if State = [gdselected] then
begin
 if Column.Title.Caption = 'ID' then
 begin
  showmessage('ID');
 end;
end;
dann führt er showmessage nicht aus.

Wenn ich dann die zweite Spalte abfrage, welche 'Anlass' heisst, führt er showmessage aus. Das sieht so aus:

Delphi-Quellcode:
if State = [gdselected] then
begin
 if Column.Title.Caption = 'Anlass' then
 begin
  showmessage('ID');
 end;
end;
Warum umgeht er bei gdselected die erste Spalte ???

Gruss

Holger

mkinzler 22. Jan 2007 10:54

Re: DBGrid.Canvas.Brush.Color -> dgrowselect anzeigen
 
Es scheint, als ob die 1. Spalte nicht selektierbar ist.

HolgerCW 22. Jan 2007 13:23

Re: DBGrid.Canvas.Brush.Color -> dgrowselect anzeigen
 
Dann muss man das wohl so hin nehmen ...

Trotzdem danke

Gruss

Holger

mkinzler 22. Jan 2007 13:26

Re: DBGrid.Canvas.Brush.Color -> dgrowselect anzeigen
 
Hast du diese fixiert?

HolgerCW 22. Jan 2007 15:04

Re: DBGrid.Canvas.Brush.Color -> dgrowselect anzeigen
 
Wo schaue ich das nach ob die fixiert ist ?

Gruss

Holger

mkinzler 22. Jan 2007 15:14

Re: DBGrid.Canvas.Brush.Color -> dgrowselect anzeigen
 
.FixedCols > 0

HolgerCW 23. Jan 2007 09:13

Re: DBGrid.Canvas.Brush.Color -> dgrowselect anzeigen
 
Das DBGrid hat keine Eigenschaft fixedCols

So klappt es nicht:

Delphi-Quellcode:
if DBGrid.fixedCols > 0 then ...
Gruss

Holger


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz