Autor Beitrag
SoulJ03R
Hält's aus hier
Beiträge: 9


Delphi 3 Prof., Delphi 2005 PE
BeitragVerfasst: Mo 01.01.07 19:19 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Mo 01.01.07 19:40 
Hallo,
wie sieht denn deine Lösung bis jetzt aus?

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Reinhard Kern
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 591
Erhaltene Danke: 14



BeitragVerfasst: Mo 01.01.07 20:34 
user profile iconSoulJ03R 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 Threadstarter
Hält's aus hier
Beiträge: 9


Delphi 3 Prof., Delphi 2005 PE
BeitragVerfasst: Mo 01.01.07 21:19 
Hallo... und danke für eure Antworten. Bisher sah der Teil in meinem Programm so aus:

ausblenden 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=2and (Row=3then    // Koordinaten sind nur probeweise eingesetzt
   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 user profile iconjasocul: Delphi-Tags hinzugefügt
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: 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
ausblenden 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

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
SoulJ03R Threadstarter
Hält's aus hier
Beiträge: 9


Delphi 3 Prof., Delphi 2005 PE
BeitragVerfasst: Mo 01.01.07 22:11 
Jetzt funktioniert es. Vielen Dank!!!

MfG SoulJ03R