none
Frage zu Graphics.PageScale und Fonts RRS feed

  • Frage

  • Hi,

    in einer Windows Forms Anwendung zeichne ich eine Baumansicht. Die Zeichenroutine wird sowohl für die Ausgabe auf dem Bildschirm wie auch für die Ausgabe auf einem Drucker verwendet. Zum Drucken setzte ich den Wert von PageUnit auf Millimeter und den Wert von PageScale auf 0.2. Dabei ist mir aufgefallen, das alle Zeichenoperationen angepasst werden, nicht aber die Textausgabe (DrawString). Egal welchen Wert ich dort eintrage, die Schriftgröße wird dabei nicht verändert. Ist das normal so!? Denn verwende ich die ScaleTransform Methode, so wird die Textgröße mit verändert!

    Gruß

    Martin

    Freitag, 25. November 2011 09:48

Antworten

  • Hallo Martin,

    PageUnits/PageScale sind an sich hilfreich (man setzt sie und überläßt alles weitere dem Graphics-Objekt). Aber es gibt viele Limitierungen, so auch beim Ausgeben von Text, da das Font-Objekt (this.Font) nicht von den PageUnits beeinflußt wird. Es sei denn man berechnet die Font-Höhe entsprechend den aktuellen Werte aus dem Graphics-Objekt mittels Font.GetHeight() und skaliert das Font-Objekt selbst. Font.GetHeight() hat den Vorteil, die Schriftarthöhe in der aktuellen Einheit zurückzugeben:

    float fontHeight = this.Font.GetHeight(g);
    Font myScaledFont = new Font(this.Font.FontFamily, fontHeight, FontStyle.Regular, GraphicsUnit.Millimeter);
    g.DrawString(text, myScaledFont, Brushes.Black, boundingRectangle);

    Eine andere Möglichkeit wäre natürlich eine Matrix zu verwenden:

    Matrix matrix = new Matrix();
    matrix.Scale(x, y);
    g.Transform = matrix;
    g.DrawString(text, this.Font, Brushes.Black, boundingRectangle);
    

    Font.GetHeight-Methode (Graphics)
    http://msdn.microsoft.com/de-de/library/7y237t0c.aspx

    Graphics.Transform-Eigenschaft:
    http://msdn.microsoft.com/de-de/library/system.drawing.graphics.transform.aspx

    Gruß
    Marcel





    Freitag, 25. November 2011 14:26
    Moderator

Alle Antworten