![]() |
Re: Zum verzweifeln- Farbe in den Cells
Letzendlich soll ein Array of boolean farbig in dieses String Grid übertragen werden. Aber erstmal würde es mir reichen, wenn das mit dem färben klappt :(
|
Re: Zum verzweifeln- Farbe in den Cells
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls; type TForm1 = class(TForm) StringGrid1: TStringGrid; Button1: TButton; procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } Col: Integer; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var i, j: Integer; begin for i := 0 to 4 do begin Col := i; StringGrid1.Repaint; end; end; procedure TForm1.FormCreate(Sender: TObject); begin Col := 0; end; procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin if (ACol = Col) then begin StringGrid1.Canvas.Brush.Color := clRed; StringGrid1.Canvas.FillRect( Rect); end else begin StringGrid1.Canvas.Brush.Color := clWhite; end; end; end. |
Re: Zum verzweifeln- Farbe in den Cells
So geht das aber nicht. Ein Grid kann man nicht einfach so mal eben einfärben, weil es sich eh neu zeichnet. Das DrawCell-Ereignis wird quasi ständig aufgerufen (Maus über das Grid, Fenster bewegen etc.). Und spätestens beim spontanen Neuzeichnen klappt die Logik nicht.
Du musst im Stringrid eine Abfrage einbauen:
Delphi-Quellcode:
Die Funktion 'MustBeRed(aRow, aCol)' liefert True/False z.B. dann in Abhängigkeit von 'aRow' (gerade/ungerade) oder eben in Abhängigkeit irgendwelcher Daten in der Zelle 'StringGrid.Cells[aRow,aCol]' oder oder oder.
Procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin If MustBeRed(aRow, aCol) Then PaintRed(Rect) Else DontPaintRed(Rect) End; Um z.B. alle Zeilen rot zu färben, die in der 2.Spalte ein 'X' stehen zu haben, wäre die Funktion so:
Delphi-Quellcode:
Function TForm1.MostBeRed (aRow, aCol : Integer) : Boolean;
Begin Result := (StringGrid.Cells[aRow,aCol] = 'X') End; |
Re: Zum verzweifeln- Farbe in den Cells
Fillrect braucht es soweit ich mich erinnere auch nicht. man muss einfach nur brush.color und font.color einstellen.
Tcolor(Objects(acol,arow)) lässt sich zum speichern der Farbwerte missbrauchen. |
Re: Zum verzweifeln- Farbe in den Cells
Nee nee, zeichnen musst Du schon.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:26 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