![]() |
Stringgrid: Zellen einzeln färben
Hallo,
ich habe die Suche bereits bemüht, konnte aber wirklich nichts zu meiner Frage erfahren. Ich habe in meinem Programm ein Stringgrid eingebaut, welches eine Matrix mit 9x9 Feldern darstellt. Ich möchte bestimmte Felder des Stringgrids (Spalte, Zeile) mit einer Farbe füllen. Die Kombinationen hole ich mir aus einer Datei zeilenweise. So bekomme ich nacheinander Werte z.B. 1,1 und im nächsten Durchlauf 1,2. Nun sollen die Felder Spalte1, Zeile1 und Spalte1, Zeile2 gefärbt werden. Das Färben klappt auch, nur wird beim nächsten Durchlauf das vorige Feld wieder mit weiß gefüllt. Ich möchte, dass beim Aufrufen von StringGrid1DrawCell nur das eine angegebene Feld gefüllt wird. Kann mir jemand helfen? Vielen Dank
Delphi-Quellcode:
var d,t: Single; procedure TForm1.Button1Click(Sender: TObject); var temp, dStr, tStr: String; i: Integer; begin OpenDialog1.Filter:='csv files (*.csv)|*.CSV'; OpenDialog1.InitialDir:=appPath; if (OpenDialog1.Execute) then begin myFindSource:=OpenDialog1.FileName; end else begin myFindSource:=''; Exit; end; Richedit2.Lines.LoadfromFile(OpenDialog1.Filename); for i:=0 to RichEdit2.Lines.Count-1 do begin temp:=RichEdit2.Lines.Strings[i]; dStr:=Copy( Explode(';', temp, 20)[14],2,3); d:=StrToFloat(dStr); tStr:=Copy( Explode(';', temp, 20)[15],2,3); t:=StrToFloat(tStr); StringGrid1.Repaint; end; end; procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin if (ACol = t) AND (ARow = d) then begin StringGrid1.Canvas.Brush.Color:= clPurple; StringGrid1.Canvas.FillRect(Rect); StringGrid1.Canvas.TextOut(Rect.Left+2, Rect.Top+2, StringGrid1.Cells[ACol, ARow]); end; end; |
Re: Stringgrid: Zellen einzeln färben
Moin, Moin.
Solange DefaulDraw aktiv ist, werden in deiner jetzigen Variante immer alle nicht von dir behandelten Zellen mit der "normalen" Farbe dargestellt. Also, entweder DefaultDraw deaktivieren - was aber nur in seltenen Fällen sinnvoll ist, da du dann noch sehr viel mehr selber zeichnen musst, oder alle spezielle Zellen im OnDraw() berücksichtigen. |
Re: Stringgrid: Zellen einzeln färben
Ich habe beim probieren auch festgestellt, dass es eher ungünstig ist das ganze Stringgrid ständig neuzuzeichnen. Ich sammle jetzt erst mal alle Feldkombinationen, die ich einfärben will und gehe dann in meiner Methode StringGrid1DrawCell mit einer Schleife über die Varianten und zeichne dann dort.
Vielen Dank für die Antwort. Das Thema ist hiermit erledigt. |
Re: Stringgrid: Zellen einzeln färben
Zitat:
![]() So viel ist da ja nicht zu zeichnen finde ich. |
Re: Stringgrid: Zellen einzeln färben
Hallo,
Delphi-Quellcode:
das soll funktionieren?
if (ACol = t) AND ...
Einen Integer(ACol) mit einem Fließkommawert (t) vergleichen. :gruebel: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:04 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