PageBounds in Device Coordinaten umrechnen

07/04/2009 - 13:51 von Klocker Thomas | Report spam
Hallo C#-Gurus!

Ich habe ein PrintDocument und habe für das PrintPage Event einen Handler
installiert. In meiner OnPrintPage Methode muss ich nun die Device
Koordinaten für den Drucker ermitteln (also für den Druckbaren Bereich
natürlich).

Kann mir jemand sagen wie die Formel dazu lautet?
Irgendwie konnte ich mit den Formeln aus google nix anfangen :(

Hab versucht die Device Koordinaten so zu ermitteln:
void OnPrintPage(Object obj, PrintPageEventArgs ppea)
{
RECT r = new RECT();
r.right = (ppea.PageBounds.Width / 100) * ppea.Garphics.DpiX;
//
}

Aber die stimmen wohl nicht.
Vielen Dank für jede Hilfe!

Gruß

Tom
 

Lesen sie die antworten

#1 Frank Dzaebel
07/04/2009 - 18:04 | Warnen spam
Hallo Thomas,

Ich habe ein PrintDocument und habe für das PrintPage Event einen Handler
installiert. In meiner OnPrintPage Methode muss ich nun die Device
Koordinaten für den Drucker ermitteln (also für den Druckbaren Bereich
natürlich).
Kann mir jemand sagen wie die Formel dazu lautet?



Versuche mal folgendes Beispiel:

static RectangleF TranslateBounds(Graphics g, Rectangle bounds)
{
// Transformiere von Units [1/100 inch] auf PageUnits:
float dpiX = g.DpiX; float dpiY = g.DpiY;
PointF[] pts = new PointF[2];
pts[0] = new PointF(bounds.X * dpiX / 100, bounds.Y * dpiY / 100);
pts[1] = new PointF(
bounds.Width * dpiX / 100, bounds.Height * dpiX / 100);
g.TransformPoints(CoordinateSpace.Page, CoordinateSpace.Device, pts);
return new RectangleF(pts[0].X, pts[0].Y, pts[1].X, pts[1].Y);
}

void printDocument_PrintPage(object sender, PrintPageEventArgs e) {
Graphics g = e.Graphics; g.PageUnit = GraphicsUnit.Inch;
//...
using( Pen thinPen = new Pen(Color.Black, 0) )
{
RectangleF pageBounds = GetRealPageBounds(e, preview);
pageBounds = TranslateBounds(g, Rectangle.Truncate(pageBounds));
g.DrawRectangle(thinPen, pageBounds.X, pageBounds.Y,
pageBounds.Width, pageBounds.Height);
//...
}
//...
}

[CodeIdol - Thinking about Windows Forms 2.0 Programming - Printing -
Printer Settings]
http://codeidol.com/csharp/windows-...-Settings/

[Typen von Koordinatensystemen]
http://msdn.microsoft.com/de-de/lib...hw2kk.aspx


ciao Frank
Dipl. Inf. Frank Dzaebel [MCP, MVP C#]
http://Dzaebel.NET

Ähnliche fragen