C# - mit DrawString senkrecht drucken!

BitMan

Erfahrenes Mitglied
Hallo Tutorialer,

nachdem ich mich nun mit dem Drucken unter C# auseinandergesetzte habe, möchte ich nur noch herausbekommen, wie ich einen mit "e.Graphics.DrawString" zu druckenden Text senkrecht drucken kann.

Ein Beispiel findet sich in der Anlage!

Salü,
BitMan
 

Anhänge

  • beispiel.jpg
    beispiel.jpg
    5,8 KB · Aufrufe: 2.334
Schau Dir mal die Überladungen der Methode genauer an.
Da findest einen Konstruktor,
welchem Du die StringFormatFlags.DirectionVertical übergeben kannst. ;)
Müsstest das Rectangle aber sicher für anpassen.
Ist lang her das ich selber auch mal was vertikal gezeichnet hab. Sollte aber so gehen.

MfG,
cosmo
 
cosmochaosmaker hat gesagt.:
Schau Dir mal die Überladungen der Methode genauer an.
Da findest einen Konstruktor,
welchem Du die StringFormatFlags.DirectionVertical übergeben kannst. ;)
Müsstest das Rectangle aber sicher für anpassen.
Ist lang her das ich selber auch mal was vertikal gezeichnet hab. Sollte aber so gehen.

MfG,
cosmo


hmmm.... nicht wirklich, habe in den Konstruktoren einen StringFormat, aber der will keine FormatFlags! Alle Versuche führen zum Fehler!

Code:
e.Graphics.DrawString("1234", schrift, Brushes.Black, xadd, yadd, StringFormatFlags.DirectionVertical);
 
hmmm.... mit StringFormatFlag geht es, aber der Text ist falsch herum. Kann ich den Text noch irgendwie drehen?

Code:
StringFormat format1 = new StringFormat(StringFormatFlags.DirectionVertical);
            schrift = new Font("Courier new", 8, FontStyle.Bold);
            e.Graphics.DrawString("Dirk Moll Computer Service", schrift, Brushes.Black, x+296, y, format1);

Ein Beispiel der Ausgabe befindet sich in der Anlage,...
 

Anhänge

  • beispiel.jpg
    beispiel.jpg
    5 KB · Aufrufe: 207
Keine Ahnung, ist schon zu lang her. Aber das sollte sicher auch möglich sein.
Kann ihm mal bitte jemand helfen? :)

Btw. Das StringFormat-Objekt solltest ausserhalb des Events definieren. ;)
Sonst wird bei jedem Redraw ein neues erstellt und sinnlos Speicher verbraucht.
Und zur besseren Lesbarkeit würd ich's so formatieren.
Code:
e.Graphics.DrawString(
	"Dirk Moll Computer Service",
	schriftFont,
	Brushes.Black,
	x+296, y,
	verticalStringFormat );
MfG,
cosmo
 
Hier, ich hab das hier gefunden:
Code:
Public Sub RotateExample(ByVal e As PaintEventArgs)
        Dim myPen As New Pen(Color.Blue, 1)
        Dim myPen2 As New Pen(Color.Red, 1)
        ' Draw the rectangle to the screen before applying the transform.
        e.Graphics.DrawRectangle(myPen, 150, 50, 200, 100)
        ' Create a matrix and rotate it 45 degrees.
        Dim myMatrix As New System.Drawing.Drawing2D.Matrix
        myMatrix.Rotate(45, System.Drawing.Drawing2D.MatrixOrder.Append)
        ' Draw the rectangle to the screen again after applying the
        ' transform.
        e.Graphics.Transform = myMatrix
        e.Graphics.DrawRectangle(myPen2, 150, 50, 200, 100)
        e.Graphics.DrawString("Gedrehter Text!", Me.Font, Brushes.Black, 0, 0)
End Sub

Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
        RotateExample(e)
End Sub
Allerdings ist mir die Matrix-Klasse neu, sprich ich hab noch nie damit gearbeitet (und versteh den Code auch nicht ganz ^^). Aber jetzt weißt du schon mal, in welche Richtung du suchen könntest.
Mit den StringFormatFlags scheint es nur möglich zu sein, den Text um 90° zu drehen. Mit der Matrix bzw. mit der Transform-Methode kannst du dein Graphic-Objekt aber auch um Minus 90° drehen.
 
Zuletzt bearbeitet:
Das Koordinaten-System muss verschoben und gedreht werden.
Mehr dazu in der angehängte Testanwendung.
 

Anhänge

  • DrawString.zip
    31,3 KB · Aufrufe: 604
Hmmm... C# Beispiel funktioniert im Form, aber nicht wenn ich das im PrintDialog übergebe. Da wird der Ausdruck
Code:
Graphics g = panGraphics.CreateGraphics();
mit folgendem Fehler ausgegeben:

Error 1 The name 'panGraphics' does not exist in the current context E:\Daten_Dirk\Visual Studio 2005\Projects\GrafikTest1\GrafikTest1\Form1.cs 144 26 GrafikTest1

Aus welchem Namespace ist der, ich habe die gleichen in meinem Projekt, aber trotzdem will er nicht, *grummel*
 
Norbert Eder hat gesagt.:
Das ist ein Panel von dem ich mir das Graphics-Objekt hole.


Hmmm.... das Panel hatte ich übersehen. Nun läuft es auch in meinem Code, aber er gibt es nur in dem Panel aus, nicht auf den Drucker.

Kann ich dem Drucker das Panel so übergeben ohne es auf dem Screen aus zu geben?
 

Neue Beiträge

Zurück