Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TDBAdvGrid - Zeilen einfärben (https://www.delphipraxis.net/129411-tdbadvgrid-zeilen-einfaerben.html)

Eppos 18. Feb 2009 19:24


TDBAdvGrid - Zeilen einfärben
 
Hallo zusammmen,

ich benutze das TDBAdvGrid von TMS.
Ich möchte gerne in einem Grid die Farbe einfärben, folgendes habe ich bisher gemacht:

Delphi-Quellcode:
procedure TfrmMain.Grid1DrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
  If Query1.FieldByName( 'SAT' ).AsInteger > 0 then
    Grid1.Canvas.Brush.Color := clMaroon;
end;
Es soll also bei einem Wert in dem Feld "SAT" von größer 0, die Zeile komplett eingefärbt werden mit
clMaroon.
Es funktioniert leider nicht... Hat jemand eine Idee, irgendwo habe ich bestimmt einen Denkfehler..

Vielen Dank.

DeddyH 18. Feb 2009 19:37

Re: TDBAdvGrid - Zeilen einfärben
 
Du setzt ja nur die Pinselfarbe, ohne zu zeichnen.

Eppos 18. Feb 2009 19:40

Re: TDBAdvGrid - Zeilen einfärben
 
Wie heisst die Funktion, das er das auch Pinselt bei dem TMS Grid?

DeddyH 18. Feb 2009 19:41

Re: TDBAdvGrid - Zeilen einfärben
 
Canvas.FillRect, denke ich mal. Danach musst Du aber neu beschriften.

Eppos 18. Feb 2009 20:08

Re: TDBAdvGrid - Zeilen einfärben
 
Danke, das habe ich mir eigentlich einfacher vorgestellt,
da bei der Farbe Schwarz, die Schriffarbe automatisch auch dann gegenteilig
sich einstellen müsste...

DeddyH 18. Feb 2009 20:10

Re: TDBAdvGrid - Zeilen einfärben
 
Du könntest die Farben ja exklusiv verodern.

Eppos 18. Feb 2009 20:13

Re: TDBAdvGrid - Zeilen einfärben
 
die farben sind unterschiedlich....
d.h. für bestimmte werte in der datenbank, kann der benutzer sich die Farben ausdenken...

DeddyH 18. Feb 2009 20:15

Re: TDBAdvGrid - Zeilen einfärben
 
Ich meinte ja auch Hintergrund- und Schriftfarbe.

Eppos 18. Feb 2009 20:23

Re: TDBAdvGrid - Zeilen einfärben
 
versteh ich nicht, was du meinst, kannst du es mir erklären?

DeddyH 18. Feb 2009 20:37

Re: TDBAdvGrid - Zeilen einfärben
 
Beispiel (das kann man natürlich noch schöner machen):
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Color := Random(clWhite);
  Label1.Font.Color := Color xor clWhite;
end;

Eppos 18. Feb 2009 21:36

Re: TDBAdvGrid - Zeilen einfärben
 
Danke funktioniert perfekt...
habe jetzt nur das Problem, die daten in das grid zu schreiben...

Folgendes habe ich versucht:

Delphi-Quellcode:
var aCell : String;
begin
  aCell := Grid1.SelectedField.AsString;

  If ((Query1.FieldByName( 'SAT' ).AsInteger > 0) and (aCol > 0) and (aRow >0)) then begin
    Grid1.Canvas.Brush.Color := Query1.FieldByName( 'SAT' ).AsInteger;
  end else begin
    Grid1.Canvas.Brush.Color := clWhite;
  end;
  Grid1.canvas.FillRect( Rect );

  Grid1.SelectedField.Text := aCell;
aber das funktioniert nicht, er bringt einen Fehler, das das Dataset nicht editierbar ist...

Gibts es einen anderen weg?

DeddyH 18. Feb 2009 21:38

Re: TDBAdvGrid - Zeilen einfärben
 
Kannst Du mal die ganze Methode im Zusammenhang posten? Das scheint ein Kontext-Problem zu sein.

Eppos 18. Feb 2009 21:45

Re: TDBAdvGrid - Zeilen einfärben
 
Delphi-Quellcode:
procedure TfrmMain.Grid1DrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
var aCell : String;
begin
  aCell := Grid1.SelectedField.AsString;

  If ((Query1.FieldByName( 'SAT' ).AsInteger > 0) and (aCol > 0) and (aRow >0)) then begin
    Grid1.Canvas.Brush.Color := Query1.FieldByName( 'SAT' ).AsInteger;
  end else begin
    Grid1.Canvas.Brush.Color := clWhite;
  end;
  Grid1.canvas.FillRect( Rect );

  Grid1.SelectedField.Text := aCell;
end;

DeddyH 18. Feb 2009 21:53

Re: TDBAdvGrid - Zeilen einfärben
 
Ich kann beim besten Willen nicht erkennen, wo Du das Dataset editieren willst, da werden doch nur Werte abgefragt :gruebel:

Eppos 18. Feb 2009 21:55

Re: TDBAdvGrid - Zeilen einfärben
 
hier mal die genaue Medlung:

Query1: Dataset not in edit or insert mode.

DeddyH 18. Feb 2009 22:21

Re: TDBAdvGrid - Zeilen einfärben
 
Versuchst Du irgendwo anders, Daten zu ändern? Hast Du mal einen Breakpoint gesetzt? Wo tritt der Fehler auf?

Eppos 18. Feb 2009 22:26

Re: TDBAdvGrid - Zeilen einfärben
 
nein ich editiewre die daten nicht,
der Fehler tritt hier auf:

Delphi-Quellcode:
SelectedField.Text := aCell;

DeddyH 18. Feb 2009 22:32

Re: TDBAdvGrid - Zeilen einfärben
 
Ah, das wird die interne Datenanbindung sein. Mach doch mal ein Canvas.Textout daraus.

Eppos 18. Feb 2009 22:41

Re: TDBAdvGrid - Zeilen einfärben
 
wunderbar, das hat geklappt.
Das Problem ist jetzt nur, dass überall der gleich Wert drin steht.
Da aber das Grid in FormShow gefüllt wird, und der Fokus im Grid natürlich immer auf dem 1. Feld.
Wie ermittel ich die Zelle durch row und col?

DeddyH 18. Feb 2009 22:47

Re: TDBAdvGrid - Zeilen einfärben
 
Da ich die TMS-Komponenten nicht habe, rate ich mal ins Blaue:
Delphi-Quellcode:
alterInhalt := Cells[ACol,ARow];

Eppos 18. Feb 2009 22:58

Re: TDBAdvGrid - Zeilen einfärben
 
danke hat funktioniert...
Ich glaube ein Problem habe ich noch, dass er immer das gesamt Grid in der Farbe anzeigt, und nicht die Zeilen unterschiedlich
farblich anzeigt...
Er sollte ja die Zeile, abhängig was in der Datenbank steht einfärben...

DeddyH 19. Feb 2009 08:05

Re: TDBAdvGrid - Zeilen einfärben
 
Dann setz doch die Farbe in einem else-Zweig einfach auf weiß.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:14 Uhr.

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