Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Zelleninhalt bei StringGrid vertikal zentrieren? (https://www.delphipraxis.net/26854-zelleninhalt-bei-stringgrid-vertikal-zentrieren.html)

mirko2000 30. Jul 2004 11:08


Zelleninhalt bei StringGrid vertikal zentrieren?
 
Ich arbeite gerade mit einem Stringgrid und möchte den Zellinhalt vertikal zentriert ausgeben (die Höhe der Zeile ist immer gleich groß und kann nicht geändert werden, deswegen die Vereinfachung mit + 9). Folgender Code steht in der DrawCell-Prozedur:

Delphi-Quellcode:
Stringgrid1.Canvas.TextOut(rect.left,rect.top+9, StringGrid1.Cells[acol,arow];
Jetzt steht der Inhalt aber zwei mal drin und zwar jetzt schön vertikal zentriert aber auch noch an der alten Position. Wie krieg ich den Text an der alten Position weg?

Hab schon mal probiert den Inhalt davor in eine Variable zu schreiben, danach dann den Zellinhalt löschen und dann zentriert auszugeben (mit dem Inhalt in der Variable). Das funktioniert zwar soweit schon, aber der Zellinhalt wird anscheinend immer neu gezeichnet da die Felder zu flackern anfangen.

Benedikt 30. Jul 2004 11:12

Re: Zelleninhalt bei StringGrid vertikal zentrieren?
 
Hi,

überzeichne vorher einfach die komplette Zelle:

Delphi-Quellcode:
       
   StringGrid1.Canvas.Brush.Color:=clWindow;
   StringGrid1.Canvas.FillRect(Rect);
   stringgrid1.Canvas.TextOut(Rect.Left, Rect.Top+9, StringGrid1.Cells[ACol, ARow]);

mirko2000 30. Jul 2004 11:37

Re: Zelleninhalt bei StringGrid vertikal zentrieren?
 
Zitat:

Zitat von Benedikt
Hi,

überzeichne vorher einfach die komplette Zelle:

Delphi-Quellcode:
       
   StringGrid1.Canvas.Brush.Color:=clWindow;
   StringGrid1.Canvas.FillRect(Rect);
   stringgrid1.Canvas.TextOut(Rect.Left, Rect.Top+9, StringGrid1.Cells[ACol, ARow]);

Gibt es da noch eine andere Alternative. Wenn ich nämlich mehere Zellen markiere verschwindet der Text und erscheint erst wieder, wenn die Markierung entfernt wird.

Benedikt 30. Jul 2004 15:51

Re: Zelleninhalt bei StringGrid vertikal zentrieren?
 
Zitat:

Zitat von mirko2000
Wenn ich nämlich mehere Zellen markiere verschwindet der Text und erscheint erst wieder, wenn die Markierung entfernt wird.

Mhhhh... das kann ich jetzt nicht so ganz nachvollziehen.
Bei mir wird dann nicht mehr angezeigt welche Zellen markiert sind, was sich jedoch mit einer Abfrage von State im OnDrawCell umgehen lässt (wenn gdSelected in State).

Jens Schumann 30. Jul 2004 16:16

Re: Zelleninhalt bei StringGrid vertikal zentrieren?
 
Hallo,
anstatt Canvas.Textout kann man auch die API-Function DrawText verwenden. Über der Parameter uFormat läßt sich das gewünschte Verhalten sehr leicht einstellen.
Code:
DrawText(StringGrid.Canvas.Handle,PChar(StringGrid.Cells[aCol,ARow]),-1,Rect,dt_singleline or dt_vcenter or dt_center);
Das Beispiel zentriert den Text sowohl vertikal als auch horizontal.

[edit]Ich verwende gerade bei Grids eigentlich nur noch DrawText[/edit]

Nightshade 30. Jul 2004 16:55

Re: Zelleninhalt bei StringGrid vertikal zentrieren?
 
Setz bei dem Stringgrid im OI DefaultDrawing auf FALSE.

Allerdings musst du dann glaube ich deine Selection selber zeichenen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz