![]() |
Zum verzweifeln- Farbe in den Cells
Es klappt einfach cniht. Eingentlich will ich nur alle Felder meines Grids per Schleife rot färben.
über dieses Prinzip, aber es klappt einfahc nciht. Es färbt sich rein garnichts. Woran kann das liegen?
Delphi-Quellcode:
for x:=0 to (max-1) do begin
for y:=0 to (max-1) do begin ColCords:=x; RowCords:=y; StringGrid1.repaint; end; end; Und dann bei OnDraw Cells procedure TForm1.TabelleDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin with TStringGrid(Sender).Canvas do begin if (ACol=ColCords) and (ARow=ColCords) then begin Brush.Color:= clRed; FillRect(Rect); end; end; |
Re: Zum verzweifeln- Farbe in den Cells
Ist OwnerDraw aktiv?
|
Re: Zum verzweifeln- Farbe in den Cells
"
Tut mir Leid. Ich weiß garnicht was Owner-Draw ist, Was müsste ich denn da machen? btw: Wenn ich ColCords und RowCords auf 1 setze(in FormCreate) dann bekomme ich mein rotes Feld bei 1,1. Aber mit der Schleife geht snciht. Klingt sehr danach, als obe es an repaint hängen würde oder? " |
Re: Zum verzweifeln- Farbe in den Cells
Wo befindet sich der Code mit den Schleifen?
|
Re: Zum verzweifeln- Farbe in den Cells
Alles in der selben Unit
Delphi-Quellcode:
und die wird bei einem Timer aufgerufen
procedure TForm1.ShowData;
var x,y:integer; begin for x:=0 to (feldmase-1) do begin for y:=0 to (feldmase-1) do begin ColCor:=x; RowCor:=y; Tabelle.repaint; end; end; end; Tabelle ist das StringGrid feldmase ist das max |
Re: Zum verzweifeln- Farbe in den Cells
Rufe sie mal testweise einmalig auf
|
Re: Zum verzweifeln- Farbe in den Cells
Genau das selbe. Es passiert leider garnichts :(
|
Re: Zum verzweifeln- Farbe in den Cells
Bei mir funktioniert es. Wo hast du ColCor und RowCor deklariert?
|
Re: Zum verzweifeln- Farbe in den Cells
Global.
Kannst du vielleicht einfach deinen komplette Code hierrein kopieren? Dann kann ich mal vergleichen |
Re: Zum verzweifeln- Farbe in den Cells
Was hast du eigentlich vor?
|
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 22:41 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 by Thomas Breitkreuz