AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

FontDialog - Font Size

Ein Thema von Sidi61 · begonnen am 18. Dez 2015 · letzter Beitrag vom 23. Dez 2015
Antwort Antwort
Sidi61

Registriert seit: 13. Jun 2006
97 Beiträge
 
Delphi XE5 Professional
 
#1

FontDialog - Font Size

  Alt 18. Dez 2015, 23:24
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:
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
Gruß
Sidi61
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: FontDialog - Font Size

  Alt 19. Dez 2015, 00:44
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;
  Mit Zitat antworten Zitat
Sidi61

Registriert seit: 13. Jun 2006
97 Beiträge
 
Delphi XE5 Professional
 
#3

AW: FontDialog - Font Size

  Alt 19. Dez 2015, 11:31
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

Gruß
Sidi61
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: FontDialog - Font Size

  Alt 19. Dez 2015, 12:34
Du kannst z.B. Canvas.Font.Height = - 20 eingeben. Dann ist die Schifthöhe 20 Pixel. In dem Fall greift PixelsPerInch nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: FontDialog - Font Size

  Alt 19. Dez 2015, 12:46
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Sidi61

Registriert seit: 13. Jun 2006
97 Beiträge
 
Delphi XE5 Professional
 
#6

AW: FontDialog - Font Size

  Alt 19. Dez 2015, 15:55
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

hab´s entsprechend eingebaut, funktioniert hat es aber erst nach dem ich folgendes rausgeschmissen hatte:
Delphi-Quellcode:
 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
Dazu findet man ja viele Foreneinträge unter dem Stichwort in Millimeter drucken.
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
  Mit Zitat antworten Zitat
Sailor

Registriert seit: 20. Jul 2008
Ort: Balaton
112 Beiträge
 
Delphi 2010 Professional
 
#7

AW: FontDialog - Font Size

  Alt 19. Dez 2015, 18:57
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.
  Mit Zitat antworten Zitat
Sidi61

Registriert seit: 13. Jun 2006
97 Beiträge
 
Delphi XE5 Professional
 
#8

AW: FontDialog - Font Size

  Alt 23. Dez 2015, 17:07
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ß

Geändert von Sidi61 (23. Dez 2015 um 23:20 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz