Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Ondrawcell überschreibt Text
SoulJ03R - Mo 01.01.07 19:19
Titel: Ondrawcell überschreibt Text
Hallo zusammen!
Ich soll für die Schule einen Kalender programmieren und ich möchte gerne den aktuellen Tag des Monats in meinem Stringgrid makieren. Dies habe ich mit ondrawcell hinbekommen. Leider überschreibt die Farbe in der Zelle meine Zahl. Könnte mir jemand helfen dieses Problem in den Griff zu bekommen??
MfG SoulJ03R
Keldorn - Mo 01.01.07 19:40
Hallo,
wie sieht denn deine Lösung bis jetzt aus?
Mfg Frank
Reinhard Kern - Mo 01.01.07 20:34
Titel: Re: Ondrawcell überschreibt Text
SoulJ03R hat folgendes geschrieben: |
Hallo zusammen!
Ich soll für die Schule einen Kalender programmieren und ich möchte gerne den aktuellen Tag des Monats in meinem Stringgrid makieren. Dies habe ich mit ondrawcell hinbekommen. Leider überschreibt die Farbe in der Zelle meine Zahl. Könnte mir jemand helfen dieses Problem in den Griff zu bekommen??
MfG SoulJ03R |
Hallo,
wenn du die Hilfe genau liest, stellst du fest: 1. OnDrawCell ist keine Methode von TStringGrid, sondern von TCustomDrawGrid, wo es die eigentliche Zeichenroutine ist, und 2. es kommt, nachdem TStringGrid das Feld schon gezeichnet hat. Das ist also "by Design". Man kann aber als Workaround so arbeiten, das Flackern sieht man kaum, aber du musst eben den Text in OnDrawCell noch einmal ausgeben, weil du den Feldinhalt beim Einfärben gelöscht hast. Immerhin kannst du den bei der Gelegenheit auch gleich ändern in Font, Grösse oder Farbe.
Gruss Reinhard
SoulJ03R - Mo 01.01.07 21:19
Hallo... und danke für eure Antworten. Bisher sah der Teil in meinem Programm so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.gridDrawCell(Sender: TObject; Col, Row: Integer; Rect: TRect; State: TGridDrawState); begin if (Col=2) and (Row=3) then begin Grid.Canvas.Brush.Color := clblue; Grid.Canvas.FillRect(Rect); end; end; |
... ich habe schon einige Sachen ausprobiert, um die Zahl wieder in die Zelle zu schreiben. Dies war auch eigentlich mein Problem. Wenn ich
"Grid.cells[2,3]:='z.b 22';" in diese Prozedur einfüge tritt auf jeden Fall ein sehr starkes Flackern auf. Ich weiß leider nicht, wie ich ansonsten die Zahl wieder einfügen kann.
Moderiert von
jasocul: Delphi-Tags hinzugefügt
Keldorn - Mo 01.01.07 21:57
Hallo. da fehlt halt die textausgabe, wie oben beschrieben. Du malst nur den Hintergrund und keinen Text. Der zellinhlat ist trotzdem noch da.
nach dem Hintergrund
Delphi-Quelltext
1:
| grid.canvas.textout(rect.left+2,rect.top+2,grid.cells[acol,arow]); |
gugg mal hier im Forum nach ondrawcell, da findest du auch einige Bsp, insbesondere, wie du den state auswertest (Zelle ist gerade ausgewählt usw).
Dein setzten des Zelltextes führt deshalb zum flackern, weil das setzen des Zelltextes wieder ein neuzeichnen der Zelle erfordert und du landest wieder im ondrwacell und wieder und wieder, das ist eine endlosschleife.
Mfg Frank
SoulJ03R - Mo 01.01.07 22:11
Jetzt funktioniert es. Vielen Dank!!!
MfG SoulJ03R
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!