![]() |
FontDialog - Font Size
Hallo zusammen,
irgendwie bekomme ich die Einstellung der Schriftgröße nicht hin. Wenn ich die Schriftgröße mittels FontDialog ermittel erhalte ich z.B. Arial 10 - nur was bedeutet diese 10 eigentlich genau, was ist das für eine Einheit und in welchem Bezug steht sie zur eigentlichen Schriftgröße. Übergebe ich diesen Wert an Printer.canvas.font.size erhalte ich einen Ausdruck in Größe 24 Punkt (verglichen mit Ausdruck aus Word). Den Ausdruck leite ich wie folgt ein:
Delphi-Quellcode:
Gruß
Printer.BeginDoc;
SetMapMode(Printer.Canvas.Handle, MM_LOMETRIC); //0,1mm Einheiten X-Achse nach rechts jedoch Y-Achse nach oben GetWindowExtEx(Printer.Canvas.Handle,w); //Drucker Auflösung ermitteln GetViewPortExtEx(Printer.Canvas.Handle,v); //Abmessung des Viewports auslesen SetMapMode(Printer.Canvas.Handle, MM_ANISOTROPIC); SetWindowExtEx(Printer.Canvas.Handle, w.cx, w.cy,nil); //Druckerauflösung bestätigen SetViewPortExtEx(Printer.Canvas.Handle, v.cx, -v.cy,nil); //Y-Achse kippen nach unten Sidi61 |
AW: FontDialog - Font Size
Size ist eine property, mit der Font.Height gesetzt wird (Eine Variable Size gibt es nicht). Für PixelsPerInch ist default der Bildschirm eingestellt. Die Printers rechnet diese Size automatisch um.
Delphi-Quellcode:
function TFont.GetSize: Integer;
begin Result := -MulDiv(Height, 72, FPixelsPerInch); end; procedure TFont.SetSize(const Value: Integer); begin Height := -MulDiv(Value, FPixelsPerInch, 72); end; procedure TPrinterCanvas.UpdateFont; var FontSize: Integer; begin if GetDeviceCaps(Printer.DC, LOGPIXELSY) <> Font.PixelsPerInch then begin FontSize := Font.Size; Font.PixelsPerInch := GetDeviceCaps(Printer.DC, LOGPIXELSY); Font.Size := FontSize; end; end; |
AW: FontDialog - Font Size
Hallo Bjoerk,
danke für deine Antwort aber ehrlich gesagt die Zusammenhänge in deinen Beispielen habe ich noch nicht ganz verstanden. Ich habe versucht deine Beispiele einzubauen, allerdings änderte sich die Schriftgröße nicht. Ich stelle mit Fontdialog nicht die Schriftgröße ein sondern ermittle sie lediglich und speichere die Werte ab, hier z.B. Arial Größe 10 Wird ein Ausdruck gestartet soll die Schrift nach Einleitung des Druckes (s. erster Beitrag) eingestellt werden, dies gelingt jedoch mit Printer.canvas.font.size := 10; leider nicht. Ich habe auch keinen Bezug zur Schriftgröße 10 d.h. wie viel Millimeter oder Zoll oder was auch immer drückt die Größe 10 eigentlich aus? Letztendlich ist ein Ausdruck mit Arial 10 egal aus welchem Programm und welcher Druckerauflösung immer gleich groß - also muss es hier eine Größendefinition geben. Ich wäre dir sehr dankbar wenn du in einem kurzen Beispiel aufzeigen könntest wie ich mit den in einer Datenbank gespeicherten Vorgaben 'Arial' und 10 die Schrift einstellen kann :gruebel: Gruß Sidi61 |
AW: FontDialog - Font Size
Du kannst z.B. Canvas.Font.Height = - 20 eingeben. Dann ist die Schifthöhe 20 Pixel. In dem Fall greift PixelsPerInch nicht. :wink:
|
AW: FontDialog - Font Size
Der Source von Bjoerk zeigt doch sehr schön, was Size bedeutet:
Die Höhe des Fonts bei einer Auflösung von 72dpi. Size 72 => 1" hoch => 2,54cm hoch Size 10 => 0,139" hoch => 0,35cm hoch Der Printer.Canvas sollte das auch so umrechnen und auch in der Größe darstellen (unabhängig von der vorhandenen physikalischen Auflösung). Der der rechnet das wieder um: Size 72 bei 72dpi => 72px Size 72 bei 96dpi => 96px Size 72 bei 600dpi => 600px Size 10 bei 72dpi => 10px Size 10 bei 96dpi => 13px Size 10 bei 600dpi => 83px |
AW: FontDialog - Font Size
Hallo Sir Rufo,
hab´s verstanden, der Zusammenhang zwischen FontSize aus Fontdialog und der echten Größe unter Berücksichtigung der Druckerauflösung ist mir nun klar. Ist wirklich super erklärt von dir :thumb: hab´s entsprechend eingebaut, funktioniert hat es aber erst nach dem ich folgendes rausgeschmissen hatte:
Delphi-Quellcode:
Dazu findet man ja viele Foreneinträge unter dem Stichwort in Millimeter drucken.
SetMapMode(Printer.Canvas.Handle, MM_LOMETRIC); //0,1mm Einheiten X-Achse nach rechts jedoch Y-Achse nach oben
GetWindowExtEx(Printer.Canvas.Handle,w); //Drucker Auflösung ermitteln GetViewPortExtEx(Printer.Canvas.Handle,v); //Abmessung des Viewports auslesen SetMapMode(Printer.Canvas.Handle, MM_ANISOTROPIC); SetWindowExtEx(Printer.Canvas.Handle, w.cx, w.cy,nil); //Druckerauflösung bestätigen SetViewPortExtEx(Printer.Canvas.Handle, v.cx, -v.cy,nil); //Y-Achse kippen nach unten Wollte das schon länger mal ausprobieren, scheitere aber immer an der Einstellung des Font, soll wohl nicht sein - oder hast du dazu noch eine Idee? Gruß Sidi61 |
AW: FontDialog - Font Size
Die Höhe eines Zeichensatzes wird in (typographischen) Punkten angegeben. Ein Punkt ist etwa 1/72", daher kommt die 72 in den Berechnungen. Die 10 bedeutet also 10 pt.
|
AW: FontDialog - Font Size
Hallo zusammen,
das Problem mit Font.Size habe ich nun richtig umgesetzt, beim Ausdruck ist mir jedoch noch ein seltsamer Umstand aufgefallen. Wenn ich die Seitenränder mit PageSetupDialog ermittle so scheint dieser Dialog die Mindestseitenränder des Druckers bereits zu berücksichtigen da er einen Seitenrand mit 0 mm nicht zulässt und automatisch korrigiert - hier 5 mm. Wenn ich nun einen Seitenrand mit 10 mm festlege und diesen umgerechnet in Pixel mit textout verwende rechnet Textout startet der Ausdruck jedoch 10 mm vom Mindestrand d.h. die 5 mm werden noch dazugerechnet. Gibt es eine Möglichkeit dass die Ränder absolut gesetzt werden oder muss ich die Mindestränder jedes mal abziehen?? Nachtrag: ok, habe die Berechnungen auf die druckbaren Bereiche reduziert und ziehe die Mindestränder des Druckers beim Setzen der Seitenränder einfach ab. Jetzt passt es perfekt Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:29 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