Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Zu jedem Font verfügbare Grösse ermitteln! (https://www.delphipraxis.net/143968-zu-jedem-font-verfuegbare-groesse-ermitteln.html)

R2009 27. Nov 2009 06:12


Zu jedem Font verfügbare Grösse ermitteln!
 
Hi DP'ler,
wie ermittelt man zu einem Font die zur Verfügung stehenden Grössen?

Grüsse
Rainer

mkinzler 27. Nov 2009 07:36

Re: Zu jedem Font verfügbare Grösse ermitteln!
 
Wozu benötigst du das? Da die meisten Windows Fonts TrueType-Fonts, also Vektorfonts, sind ist das imho nicht nötig, bzw. es gibt keine Größe.

R2009 27. Nov 2009 09:32

Re: Zu jedem Font verfügbare Grösse ermitteln!
 
Hi mkinzler,
ist ganz einfach ich will die Grösse einstellbar machen!

Grüsse
Rainer

mkinzler 27. Nov 2009 09:36

Re: Zu jedem Font verfügbare Grösse ermitteln!
 
Aber Vektorfonts haben keine feste Größe, sondern sind in der Größe anpassbar

R2009 27. Nov 2009 09:41

Re: Zu jedem Font verfügbare Grösse ermitteln!
 
Hi mkinzler,

ich glaube wir reden aneinander vorbei!
Wenn du Wordpad öffnest siehst du links oben die Schriftart.
Direkt daneben wird die Schriftgrösse angezeigt. Genau um die geht es mir.
Kann ich die willkürlich setzen? Kam mir bis jetzt immer so vor als sei das vorgegeben!

Grüsse
Rainer

Medium 27. Nov 2009 09:42

Re: Zu jedem Font verfügbare Grösse ermitteln!
 
Der Standard-Fontdialog (wie er u.a. via OI in Delphi auch zu sehen ist) gibt doch schon die übliche Auswahl, und schränkt diese bei non-TTFs entprechend ein. Wenn du den Dialog an und für sich nicht benutzen magst, könnte man aus dessen Sourcen aber vermutlich was verwursten :)

Edit: Ja, du kannst sie völlig frei setzen - ausser bei nicht True-Type Fonts wie z.B. Terminal o.ä.
Edit2: Bzw. kannst du da auch einen beliebigen Wert eingeben, das Ergebnis ist dann allerdings imho die nächste tatsächlich vorhandene Größe.

mkinzler 27. Nov 2009 09:43

Re: Zu jedem Font verfügbare Grösse ermitteln!
 
Theoretisch ist bei Vektorfonts jede Größe möglich. U.U wirkt die Schrift dann gestaucht oder gequetscht

Hawkeye219 27. Nov 2009 09:59

Re: Zu jedem Font verfügbare Grösse ermitteln!
 
Hallo,

eine schnelle Google-Suche führte zu einem Thread by stackoverflow.

Gruß Hawkeye

R2009 27. Nov 2009 12:57

Re: Zu jedem Font verfügbare Grösse ermitteln!
 
Hallo Hawkeye,

was dein Link soll weiss ich nicht hat aber mit dem Thema überhaupt nichts zu tun.
Gegoogled hab ich auch schon sonst hätte ichs nicht ins Forum gesetzt.

Grüsse
rainer

R2009 27. Nov 2009 13:01

Re: Zu jedem Font verfügbare Grösse ermitteln!
 
Sakrament luja,

ich will doch nur rausfinden welche Grössen wirklich möglich sind um sie aufzulisten.
Ich keine true types nutzen keine skalierbare Schriften, ich will nur ganz normale Schrift.
Und ich will auch den Standarddialog nicht benutzen.
Ich werd mich da aber jetzt durchwurschteln (durch den Standarddialog).

Grüsse und vielen dank
Rainer

Bernhard Geyer 27. Nov 2009 13:03

Re: Zu jedem Font verfügbare Grösse ermitteln!
 
Zitat:

Zitat von R2009
ich will doch nur rausfinden welche Grössen wirklich möglich sind um sie aufzulisten.

Wie schon gesagt: Bei TrueType/Opentype ist das egal.

Zitat:

Zitat von R2009
Ich keine true types, ich will nur ganz normale Schrift.

TrueType/OpenType ist "ganz normal". Pixelfonts sind unter Windows seit Windows 95 die Ausnahme.

Medium 27. Nov 2009 13:21

Re: Zu jedem Font verfügbare Grösse ermitteln!
 
Zitat:

Zitat von R2009
Hallo Hawkeye,

was dein Link soll weiss ich nicht hat aber mit dem Thema überhaupt nichts zu tun.
Gegoogled hab ich auch schon sonst hätte ichs nicht ins Forum gesetzt.

Grüsse
rainer

Auf der Seite hinter dem Link ist eine weitere Seite verlinkt, wo exakt beschrieben wird wie man das tut, was du willst. Vorm Rumkacken lesen bitte.

MarioM. 27. Nov 2009 13:37

Re: Zu jedem Font verfügbare Grösse ermitteln!
 
Da wollen Dir Leute helfen, und Du reagierst so darauf... nicht nett!

Da steht doch ganz eindeutig
Zitat:

See here for an explanation on how to enumerate fonts / font sizes for a specific font.
Mehr kannst Du nun wirklich nicht verlangen. Oder hast Du es nicht so mit dem Englischen?

taaktaak 27. Nov 2009 13:44

Re: Zu jedem Font verfügbare Grösse ermitteln!
 
hier ist etwas aus der DP

Hawkeye219 27. Nov 2009 14:21

Re: Zu jedem Font verfügbare Grösse ermitteln!
 
Hallo,
Zitat:

Zitat von Bernhard Geyer
Bei TrueType/Opentype ist das egal.

Ich habe mich nicht in das Thema eingearbeitet, aber die Reaktion auf die einzige Antwort im verlinkten Thread lässt etwas anderes vermuten:

Zitat:

I realise OpenType/TrueType will scale to any size, but they do often have particular sizes that have been manually hinted to look good.
Offenbar gibt es einige "bevorzugte" Schriftgrößen. Wegen dieser Zusatzinformation habe ich auch auf stackoverflow verlinkt, nicht auf die dort angegebene Seite. Meine Vermutung war, dass es Rainer um genau diese Einschränkungen geht.

Gruß Hawkeye

p80286 27. Nov 2009 15:08

Re: Zu jedem Font verfügbare Grösse ermitteln!
 
@Medium
@MarioM

Tut mir leid aber auch ich, habe das Here übersehen.


Zitat:

Zitat von R2009
Sakrament luja,

ich will doch nur rausfinden welche Grössen wirklich möglich sind um sie aufzulisten.
Ich keine true types nutzen keine skalierbare Schriften, ich will nur ganz normale Schrift.
Und ich will auch den Standarddialog nicht benutzen.
Ich werd mich da aber jetzt durchwurschteln (durch den Standarddialog).

Grüsse und vielen dank
Rainer

Und für diese Reaktion habe ich vollstes Verständnis, weil auch ich vor ein paar Jahren nach einem "normalen" Font gesucht habe, und ich mit diesem ScriptTimesarialPodoniTeenRockwell-Zeug herzlich wenig anfangen kann/konnte.
(ich brauchte etwas mit fixedPitch)

Gruß
K-H

Medium 27. Nov 2009 16:32

Re: Zu jedem Font verfügbare Grösse ermitteln!
 
Überlesen ist noch lange kein Grund jemanden anzufahren, der freiwillig und unentgeldlich Hilfe leistet. Dann frag ich freundlich nach, was ich evtl. übersehen habe auf der verlinkten Seite, aber doch nicht so.
Bevor ich eine empfohlene Quelle abtu, die mir ggf. die Arbeit erleichtert oder gar den Tag rettet, schau ich sie mir schon etwas genauer an. Zudem war die Rede von "hat aber mit dem Thema überhaupt nichts zu tun", was ja sogar was den direkten Link angeht schlicht nicht stimmt. Dort wurde nämlich genau das selbe gefragt; folglich hat der TE nichtmal ansatzweise darin gelesen.

Und naja... TrueType ist seit wie vielen Jahren der Standard unter Windows?

p80286 27. Nov 2009 17:28

Re: Zu jedem Font verfügbare Grösse ermitteln!
 
Zitat:

Zitat von Medium
Überlesen ist noch lange kein Grund jemanden anzufahren, der freiwillig und unentgeldlich Hilfe leistet. Dann frag ich freundlich nach, was ich evtl. übersehen habe auf der verlinkten Seite, aber doch nicht so.

Da hast Du Recht.

Zitat:

Zitat von Medium
... Zudem war die Rede von "hat aber mit dem Thema überhaupt nichts zu tun", was ja sogar was den direkten Link angeht schlicht nicht stimmt. Dort wurde nämlich genau das selbe gefragt; folglich hat der TE nichtmal ansatzweise darin gelesen.

oder aber es gab ein Verständnisproblem?!

Zitat:

Zitat von Medium
Und naja... TrueType ist seit wie vielen Jahren der Standard unter Windows?

Na und? Manchmal ist die Darstellung einfach nur ......Da wünscht man sich die guten alten Bildschirmfonts zurück (OK da gab es auch solche und solche). Ich kann mich noch lebhaft daran erinnern, wie ich damals gesucht habe und wieder und wieder vor die Wand gelaufen bin.
Hinterher wußte ich, daß ich die falschen Vokabeln genutzt habe, und daher nie die "richtige" Antwort bekommen habe. Und natürlich meine falsche Schlußfolgerung TruType=proportional.

(Bei Microsoft gibt/gab es übrigens eine Doku zu TTF "www.microsoft.com/typography/tt/ttf_spec" )

Gruß
K-H

R2009 27. Nov 2009 17:37

Re: Zu jedem Font verfügbare Grösse ermitteln!
 
Hallo taaktaak,
danke dein Hinweis hat mir geholfen, das ist dabei rausgekommen:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  imin,imax:integer;  <<---hab ich auf die schnelle hinzugefügt. Hat im Original gefehlt
implementation

{$R *.dfm}
procedure GetSizes(var List:TStringlist;FontName:String;Min,Max:Integer);<<--- im Orginal
// list:tstrings hab ich durch var list:tstinglist ersetzt. Warum ist wohl klar

var DC : HDC;
    LF : TLogFont;

  function EnumSize(var LogFont:TLogFont;var TextMetric:TTextMetric;
                    FontType:Integer;Data:LParam):Integer; stdcall;
  const TTSizes : Array[0..15] of Integer
                = (8,9,10,11,12,14,16,18,20,22,24,26,28,36,48,72);
  var  i,H    : Integer;
        DC     : HDC;
  begin
   if FontType=TrueType_FontType then begin // get sizes from const array
     for i:=0 to High(TTSizes) do
       if TTSizes[i]>=iMin then
         if TTSizes[i]<=iMax then
           TStrings(Data).Add(IntToStr(TTSizes[i]));
     Result:=0;
     end
                                 else begin // get sizes from WinAPI
    DC:=GetDC(0);

    try
      with TextMetric do
        H:=MulDiv(tmHeight-tmInternalLeading,72,GetDeviceCaps(DC,LogPixelsY));
        // 
        // folgende "Übersetzung" berechnet für Courier, 10 pts das falsche Ergebnis 9 pts
        // ist also NICHT äquivalent zu MulDiv()
        // 
        // H:=((tmHeight-tmInternalLeading)*72) div GetDeviceCaps(DC,LogPixelsY);
        // 

      if H>=TTSizes[0] then // no smaller size than MinSize of TrueType
        if H>=iMin then
          if H<=iMax then
            if TStrings(Data).IndexOf(IntToStr(H))<0 then
              TStrings(Data).Add(IntToStr(H));
      Result:=1;

    finally
      ReleaseDC(0,DC);
      end;

    end;

  end;

  procedure SortList;
  var i   : Integer;
      t   : String;
      Done : Boolean;
  begin
    repeat
      Done:=true;
      for i:=0 to List.Count-2 do
        if StrToInt(List[i])>StrToInt(List[i+1]) then begin
          t       :=List[i];
          List[i] :=List[i+1];
          List[i+1]:=t;
          Done    :=false;
          end;
      until Done
  end;

begin
  DC:=GetDC(0);

  iMin:=Min;
  iMax:=Max;
  if iMax=0 then iMax:=999;

  try
    fillchar(LF,SizeOf(LF),0);
    LF.lfCharSet:=Default_CharSet;
    Move(FontName[1],LF.lfFaceName,length(FontName));

    List.BeginUpdate;
    List.Clear;
    EnumFontFamiliesEx(DC,LF,@EnumSize,LParam(List),0);
    Sortlist;
    List.EndUpdate;

  finally
    ReleaseDC(0,DC);
    end;

end;

procedure TForm1.Button1Click(Sender: TObject);
var l:Tstringlist;
begin
  l:=tstringlist.Create;
  GetSizes(L,'Arial',0,100);
  ListBox1.Items.Assign(l);
  l.free;
end;

end.
Grüsse
Rainer

Ps: An alle die sich hier durch meine Reaktion "angemacht" oder ungerecht behandelt fühlen:
Es tut mir leid wenn ich jemanden ungerecht behandelt haben sollte.
War vielleicht der Frust darüber, dass man komplexeste Sachverhalte, in relativ kurzer Zeit, einfach lösen kann und
bei so einfachen Dingen wie der Fontgrösse fast kapitulieren muss.
Die unsachlichen Bemerkungen in diesem Thread möchte ich nicht kommentieren!

Medium 27. Nov 2009 19:38

Re: Zu jedem Font verfügbare Grösse ermitteln!
 
Zitat:

Zitat von R2009
Die unsachlichen Bemerkungen in diesem Thread möchte ich nicht kommentieren!

Das geht vermutlich an meine Adresse. Ich will mich für etwaige Formulationsfehlgriffe... ja hm, ich werd halt dezent ungehalten wenn auf gut gemeinte Hilfe so schroffe Reaktionen kommen ;)
Nix für ungut, und ein wenig kann ich das ja verstehen wenn einen so "pisselige" Dinge Stunde um Stunde kosten. Da is am Riemen reißen ne Aufgabe...

DeddyH 27. Nov 2009 19:42

Re: Zu jedem Font verfügbare Grösse ermitteln!
 
Jetzt habt Euch wieder lieb und gut is :zwinker:

Medium 27. Nov 2009 19:59

Re: Zu jedem Font verfügbare Grösse ermitteln!
 
Ich hab mich sowas von lieb, schon immer! :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:24 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