![]() |
TStringgrid mehrzeiliger vertikaler Text
Hallo,
Ich möchte den Text in einzelnen Zellen vertikal anzeigen. Da der Text teilweise sehr lang ist, möchte ich aber mehrere Zeilen anzeigen. Ich fülle die Zellen zum Beispiel so:
Delphi-Quellcode:
Cells[0,0] := 'Hallo' + sLineBreak + 'Hans';
Im OnDraw des Stringgrid gebe ich den Text folgendermaßen aus:
Delphi-Quellcode:
Canvas.TextRect(Rect, Cells[0,0], [tfCenter])
So werden die Zeilenumbrüche dargestellt, jedoch ist der Text horizontal. Wenn ich im OnDraw die Font.Orientation auf 900 setze dann wird mir der Text zwar vertikal angezeigt jedoch verliere ich die Zeilenumbrüche. Wie löse ich das am besten? MfG. pHL |
AW: TStringgrid mehrzeiliger vertikaler Text
Da das Canvas.DrawText-Ereignis ist nicht in der Lage ist, Text mehrzeilig auszugeben, musst Du Dir wohl eine eigene Routine schreiben oder die SuFu/Guhgel benutzen, um etwas fertiges zu finden.
|
AW: TStringgrid mehrzeiliger vertikaler Text
Du kannst jedes Canvas drehen,zoomen,verschieben über SetWorldTransform, mit etwas Rechenaufwand kannst Du die Parameter entsprechend festlegen und den Text beliebig ausgeben.
Delphi-Quellcode:
Procedure ResetCanvas(ACanvas:TCanvas);
begin SetCanvasZoomAndRotation(ACanvas , 1, 0, 0,0); end; Procedure SetCanvasZoomAndRotation(ACanvas:TCanvas;Zoom:Double;Angle:Double;CenterpointX,CenterpointY:Double); var form : tagXFORM; Winkel:Double; begin Winkel := Grad2Rad(Angle); SetGraphicsMode(ACanvas.Handle, GM_ADVANCED); SetMapMode(ACanvas.Handle,MM_ANISOTROPIC); form.eM11 := Zoom * cos( Winkel); form.eM12 := Zoom *Sin( Winkel) ; form.eM21 := Zoom * (-sin( Winkel)); form.eM22 := Zoom * cos( Winkel) ; form.eDx := CenterpointX; form.eDy := CenterpointY; SetWorldTransform(ACanvas.Handle,form); end; |
AW: TStringgrid mehrzeiliger vertikaler Text
Dankeschön, probier ich gleich aus :)
MfG. |
AW: TStringgrid mehrzeiliger vertikaler Text
Verstehe ich das richtig: Ich zeichne ganz normal auf meinen Canvas und rotiere diesen anschließend?
Ich habe nämlich gerade folgendes getestet: TImage erstellt, Bild geladen und dann hab ich die Procedure so aufgerufen:
Delphi-Quellcode:
SetCanvasZoomAndRotation(Image1.Canvas, 1, 30, 5, 5);
Es passiert aber garnichts, was ist der Fehler? MfG. pHL |
AW: TStringgrid mehrzeiliger vertikaler Text
Liste der Anhänge anzeigen (Anzahl: 2)
Du musst vor dem Zeichnen die Transformation setzen
Delphi-Quellcode:
Procedure RotText(left:Boolean;C:TCanvas;r:Trect;Const s:String);
var tr:TRect; ts:String; begin ts := s; if Left then SetCanvasZoomAndRotation(c,1,-90,r.Left,r.Bottom) else SetCanvasZoomAndRotation(c,1,90,r.Right,r.top); tr.Left := 0; tr.Top := 0; tr.Right := r.Bottom - r.Top; tr.Bottom := r.Right - r.Left; InflateRect(tr,-2,-2); c.TextRect(tr,ts,[tfWordBreak]); ResetCanvas(c); end; procedure TForm2.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); Const C_TEXT='Irgend ein Testtext der etwas länger ist'; Procedure Default; var ar:TRect; ast:String; begin ar := Rect; InflateRect(ar,-2,-2); ast:= C_TEXT; StringGrid1.Canvas.Textrect(ar,ast,[tfWordBreak]); end; begin if (ARow=3) then begin if ACol=2 then begin RotText(true,StringGrid1.Canvas,Rect,C_TEXT) end else if Acol=3 then begin RotText(false,StringGrid1.Canvas,Rect,C_TEXT) end else Default; end else Default; end; |
AW: TStringgrid mehrzeiliger vertikaler Text
Danke für die tolle Hilfe, funktioniert wunderbar! :)
MfG. pHL |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz