![]() |
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:
Es soll also bei einem Wert in dem Feld "SAT" von größer 0, die Zeile komplett eingefärbt werden mit
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; clMaroon. Es funktioniert leider nicht... Hat jemand eine Idee, irgendwo habe ich bestimmt einen Denkfehler.. Vielen Dank. |
Re: TDBAdvGrid - Zeilen einfärben
Du setzt ja nur die Pinselfarbe, ohne zu zeichnen.
|
Re: TDBAdvGrid - Zeilen einfärben
Wie heisst die Funktion, das er das auch Pinselt bei dem TMS Grid?
|
Re: TDBAdvGrid - Zeilen einfärben
Canvas.FillRect, denke ich mal. Danach musst Du aber neu beschriften.
|
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... |
Re: TDBAdvGrid - Zeilen einfärben
Du könntest die Farben ja exklusiv verodern.
|
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... |
Re: TDBAdvGrid - Zeilen einfärben
Ich meinte ja auch Hintergrund- und Schriftfarbe.
|
Re: TDBAdvGrid - Zeilen einfärben
versteh ich nicht, was du meinst, kannst du es mir erklären?
|
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; |
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:
aber das funktioniert nicht, er bringt einen Fehler, das das Dataset nicht editierbar ist...
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; Gibts es einen anderen weg? |
Re: TDBAdvGrid - Zeilen einfärben
Kannst Du mal die ganze Methode im Zusammenhang posten? Das scheint ein Kontext-Problem zu sein.
|
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; |
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:
|
Re: TDBAdvGrid - Zeilen einfärben
hier mal die genaue Medlung:
Query1: Dataset not in edit or insert mode. |
Re: TDBAdvGrid - Zeilen einfärben
Versuchst Du irgendwo anders, Daten zu ändern? Hast Du mal einen Breakpoint gesetzt? Wo tritt der Fehler auf?
|
Re: TDBAdvGrid - Zeilen einfärben
nein ich editiewre die daten nicht,
der Fehler tritt hier auf:
Delphi-Quellcode:
SelectedField.Text := aCell;
|
Re: TDBAdvGrid - Zeilen einfärben
Ah, das wird die interne Datenanbindung sein. Mach doch mal ein Canvas.Textout daraus.
|
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? |
Re: TDBAdvGrid - Zeilen einfärben
Da ich die TMS-Komponenten nicht habe, rate ich mal ins Blaue:
Delphi-Quellcode:
alterInhalt := Cells[ACol,ARow];
|
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... |
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 06:46 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