Hallo,
ich benutze Delphi XE. Um den Kopf (d.h. die Zellen 0,0 und 1,0) eines zweispaltigen Grids einzufärben benutze ich diesen Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TFrame6.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin if (ARow=0) then with StringGrid1 do begin Canvas.Brush.Color := clRed; Canvas.FillRect(Rect); Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]); end; end; |
Leider macht Delphi mehr als nötig: Beim Aufruf des Frames mit dem Grid sind die Zellen 0,0 und 1,0 markiert. Wenn ich dann mit der Maus eine Zelle in Spalte 0, Zeile 1 oder Zeile 2 usw. markiere, wird auch sie rot eingefärbt. Klicke ich danach auf eine andere Zelle, geht die rote Markierung der vorher roten Zelle endgültig weg.
Hier die Eigenschaften des Grids in der dfm-Datei:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| object StringGrid1: TStringGrid Left = 24 Top = 352 Width = 529 Height = 153 Color = clWhite ColCount = 2 DefaultRowHeight = 19 FixedColor = clDefault FixedCols = 0 RowCount = 8 FixedRows = 0 Options = [goHorzLine, goEditing, goRowSelect] ScrollBars = ssNone TabOrder = 5 OnDrawCell = StringGrid1DrawCell end |
Wie kann ich die überflüssige Einfärbung verhindern?
Moderiert von
Martok: Code- durch Delphi-Tags ersetztModeriert von
Narses: Beiträge zusammengefasstNachtrag:
Das Problem besteht nur, wenn die Anwendung unter Windows 7 gestartet wird. Unter Windows XP tritt es nicht auf; Vista wurde nicht getestet.