Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Texthöhe ermitteln (https://www.delphipraxis.net/170121-texthoehe-ermitteln.html)

himitsu 2. Sep 2012 09:12

AW: Texthöhe ermitteln
 
Bei FMX geht man z.B. für die Berechnung der Größe des Labels über das Canvas des Editd, welches sich im Label versteckt.
Und wenn das Canvas nicht existiert, dann wurde im FMX ein globales Canvas versteckt, welches dann genutzt wird, ohne es ständig neu erstellen zu müssen.

Amateurprofi 2. Sep 2012 13:15

AW: Texthöhe ermitteln
 
Zitat:

Zitat von Popov (Beitrag 1181004)
Guck dir evtl. Font.Height an. Es sagt nicht aus wie viel Canvas Pixel Höhe die Schrift hat, inc. Leerräume, sondern die Schrift selber. Vielleicht bringt es dir was.

Ist aber schon lange her, dass ich mal etwas damit gemacht habe. Kann auch sein, dass ich Blödsinn erzähle.

Nein, dass ist überhaupt kein Blödsinn.
Jedoch, ich möchte nicht die Höhe der Schrift, sondern Schrift + Leerräume.

p80286 2. Sep 2012 13:30

AW: Texthöhe ermitteln
 
Eine weitere Möglichkeit wäre es, die Font-Dateien zu lesen.
Zumindestens zu TrueTypeFonts, hat es Doku von MS gegeben, inzwischen nur noch OpenType http://www.microsoft.com/typography/otspec/default.htm

Das könnte schon beinahe die Methode Materialvolumen*Spez.Gewicht=Gewicht sein.

Gruß
K-H

Amateurprofi 2. Sep 2012 13:40

AW: Texthöhe ermitteln
 
Zitat:

Zitat von Bjoerk (Beitrag 1181007)
Das ist jetzt aber völlig unlogisch. Wenn du schon die Graphics einbinden mußt (wegen TFont), kannst du’s auch gleich so (wie der Rest der Welt auch) machen:
Delphi-Quellcode:
function GetTextHeight(const FontName: string; const FontSize: integer;
  const FontStyle: TFontStyles = []): integer;
var
  Bitmap: TBitmap;
begin
  // TCanvas.TextHeight gibt die Höhe der Schriftart, die Oberlänge plus der
  // Unterlänge, nicht die eigentliche Höhe des angegebenen Strings zurück
  Bitmap:= TBitmap.Create;
  try
    Bitmap.Canvas.Font.Name:= FontName;
    Bitmap.Canvas.Font.Size:= FontSize;
    Bitmap.Canvas.Font.Style:= FontStyle;
    Result:= Bitmap.Canvas.TextHeight('Test');
  finally
    Bitmap.Free;
  end;
end;

Und was meinst du, passiert dann "hinter den Kulissen".
Ich würde wetten, in etwa das, was in meiner Funktion gemacht wird, aber ich spare mir die Bitmap.
Mag sein, dass das Windows-intern alles ganz anders abläuft als ich es mir vorstelle, aber da habe ich keinen Einblick.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:28 Uhr.
Seite 2 von 2     12   

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