Also: ich habe folgendes Problem: ich stelle in meinem Programm ein paar bitmaps zusammen, die Schilder darstellen welche später von einer Gravurmaschine graviert werden sollen. nun wollte ich die Schilder einzeln auf den Canvas des Druckers ausgeben, die Bilder waren aber verzerrt.. nun ja... dachte ich mir und malte nun die Bestandteile der Schilder alle einzeln auf den Druckercanvas
hier mal der Quelltext der Druckmethode:
Code:
procedure TMainForm.DruckenClick(Sender: TObject);
var
myRect: TRect;
w,v: TSize;
printCanvHandle: HDC;
tempSchild: TSchild;
i, a: Integer;
tempZeile: TZeile;
begin
if PrintDialog.Execute then
begin
printer.BeginDoc;
printCanvHandle := Printer.Canvas.Handle;
SetMapMode(printCanvHandle, mm_lometric); // 0.1 Millimeter-Einheiten, Positive x-Achse nach rechts und positive y-Achse nach oben.
GetWindowExtEx(printCanvHandle,w); // die Abmessungen des Windows auslesen
GetViewPortExtEx(printCanvHandle,v); // die Abmessungen des Viewports auslesen
SetMapMode(printCanvHandle, MM_ANISOTROPIC);
SetWindowExtEx(printCanvHandle, w.cx, w.cy, nil); //die Abmessungen des Windows festlegen
SetViewPortExtEx(printCanvHandle,v.cx, -v.cy,nil); // die Abmessungen des Viewports festlegen
// als allererstes den Gravurflächenrand zeichnen
myRect := Rect(0, 0, StrToInt(EditGravFlaecheWidth.Text) * 10,
StrToInt(EditGravFlaecheHeight.Text) * 10);
Printer.Canvas.Rectangle(myRect);
for i:=0 to Schilder.Count-1 do
begin
tempSchild := TSchild(Schilder[i]);
// Zeilen des Schildes zeichnen
for a:=0 to tempSchild.Zeilen.Count-1 do
begin
tempZeile := TZeile(tempSchild.Zeilen[a]);
Printer.Canvas.Font.Name := tempZeile.txtSchriftart;
Printer.Canvas.Font.Style := tempZeile.txtStyle;
//Printer.Canvas.Font.Height := Trunc(-tempZeile.txtGroesse * Font.PixelsPerInch / 72)*10;
//PixelToMM(tempZeile.txtHeight)*10;
//Printer.Canvas.Font.PixelsPerInch:=GetDeviceCaps(outDC, LOGPIXELSY);
//Printer.Canvas.Font.Size := tempZeile.txtGroesse;
//Printer.Canvas.Font.Size := Trunc(((-tempZeile.txtHeight * 72) / Printer.Canvas.Font.PixelsPerInch)*10);
Printer.Canvas.TextOut( PixelToMM(tempSchild.xPos + tempZeile.xPos)*10,
PixelToMM(tempSchild.yPos + tempZeile.yPos)*10,
tempZeile.txt);
end;
end;
Printer.EndDoc;
end;
end;
ich stelle also die auf 0,1 mm einheiten um, um dann zu zeichnen....
wie kann ich denn nun von der Schriftgröße in punkt (in tempZeile.txtGroesse enthalten)
in mm umrechnen? oder ich habe auch die möglichkeit die höhe des textes (in tempZeile.txtHeight) enthalten zu verwenden...
hat einer einen vorschlag?
mfg marcus