[VCL Win32] Eine Zelle zuviel gefärbt in StringGrid
spacer
Autor Nachricht
Gerhard_S
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Do 15.12.11 13:30 
Verwendete VCL: VCL Win32
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:
ausblenden Delphi-Quelltext markieren
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:
ausblenden Delphi-Quelltext markieren
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 user profile iconMartok: Code- durch Delphi-Tags ersetzt

Moderiert von user profile iconNarses: Beiträge zusammengefasst

Nachtrag:
Das Problem besteht nur, wenn die Anwendung unter Windows 7 gestartet wird. Unter Windows XP tritt es nicht auf; Vista wurde nicht getestet.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 979
Erhaltene Danke: 124

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Do 15.12.11 14:23 
der Übeltäter scheint goRowSelect zu sein ....

_________________
Das Problem liegt üblicherweise zwischen den Ohren
DRY DRY KISS
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
baka0815
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 452
Erhaltene Danke: 10

Win XP, Debian GNU/Linux
Delphi 2007 Enterprise, Java, C#
BeitragVerfasst: Do 15.12.11 16:38 
Du setzt Canvas.Brush.Color := clRed, setzt es danach aber nicht wieder zurück. Ich vermute mal, dass Delphi dann genau diese Einstellung nimmt um die nächste Zeile zu färben?!
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 979
Erhaltene Danke: 124

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Do 15.12.11 16:50 
@baka0815

Du hast recht, wenn man die Farbe zurücksetzt passt es.
Wobei der Fehler interessanterweise nur um Zusammenhang mit gdRowSelect und ((FixedCols=0) oder (FixedRows=0)) auftritt.

_________________
Das Problem liegt üblicherweise zwischen den Ohren
DRY DRY KISS
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
baka0815
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 452
Erhaltene Danke: 10

Win XP, Debian GNU/Linux
Delphi 2007 Enterprise, Java, C#
BeitragVerfasst: Do 15.12.11 16:58 
Vermutlich benutzt Delphi/die VCL sonst anderen Code zum Färben der Zellen als zum Füllen der Zeilen.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Gerhard_S Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Do 15.12.11 17:49 
user profile iconbaka0815 hat folgendes geschrieben Zum zitierten Posting springen:
Du setzt Canvas.Brush.Color := clRed, setzt es danach aber nicht wieder zurück. Ich vermute mal, dass Delphi dann genau diese Einstellung nimmt um die nächste Zeile zu färben?!

Und wo genau machst du das?
Hier:
ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
 with StringGrid1 do
begin
Canvas.Brush.Color := clRed;
Canvas.FillRect(Rect);
Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]);
Canvas.Brush.Color := clnone;
end;

bringt es nix. Da kann ich eine beliebige Farbe für Canvas.Brush.Color angeben - es ändert sich nichts.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 979
Erhaltene Danke: 124

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Do 15.12.11 18:12 
bei mir ging es mit clWhite, aber vielleicht kannst Du ja auch auf das gdRowselect verzichten ...

_________________
Das Problem liegt üblicherweise zwischen den Ohren
DRY DRY KISS
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Gerhard_S Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Do 15.12.11 18:28 
user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
bei mir ging es mit clWhite, aber vielleicht kannst Du ja auch auf das gdRowselect verzichten ...

Weiß hat nichts gebracht, die Zelle bleibt rot; der Verzicht auf gdRowSelect führt zum Verschwinden von Column 0 nach Klick auf Zeile 1.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Gerhard_S Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Do 15.12.11 18:33 
user profile iconGerhard_S hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
bei mir ging es mit clWhite, aber vielleicht kannst Du ja auch auf das gdRowselect verzichten ...

Weiß hat nichts gebracht, die Zelle bleibt rot; der Verzicht auf gdRowSelect führt zum Verschwinden von Column 0 nach Klick auf Zeile 1.

Ich war zu unaufmerksam: nach dem Setzen der Pinselfarbe auf Weiß muss man natürlich noch das Rechteck füllen.
Danke für die Hilfe. Thema ist gelöst.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home