AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Effektive Höhe Buchstaben und Canvas.TextHeight
Thema durchsuchen
Ansicht
Themen-Optionen

Effektive Höhe Buchstaben und Canvas.TextHeight

Ein Thema von aschne1 · begonnen am 29. Mär 2006 · letzter Beitrag vom 16. Okt 2006
Antwort Antwort
aschne1

Registriert seit: 18. Jul 2004
Ort: Davos
64 Beiträge
 
Delphi 2005 Professional
 
#1

Effektive Höhe Buchstaben und Canvas.TextHeight

  Alt 29. Mär 2006, 15:23
Hallo

Mit Canvas.TextHeight kann ich die Schrifthöhe vor dem Zeichnen abfragen. Diese entspricht aber nicht genau der Distanz von oberster bis zur untersten Stelle eines Buchstabens. Wie kann ich diese Distanz berechnen? Hat jemand eine Idee?

Danke und Gruss
Armin
aschne1
  Mit Zitat antworten Zitat
Flare

Registriert seit: 26. Jan 2006
Ort: Leipzig
529 Beiträge
 
Delphi 7 Professional
 
#2

Re: Effektive Höhe Buchstaben und Canvas.TextHeight

  Alt 29. Mär 2006, 15:33
Ich hätte da so eine Vermutung, und zwar ist diese Höhe höchstwarscheinlich der Abstand vom unteren Rand zum Beispiel von "g" und dem oberen Rand von zum Beispiel "F".
Wenn das so ist, dann wäre zum Beispiel die Höhe von "F" 2/3 mal Canvas.TextHeight + 1/3.


Flare
Willy Scheibel
  Mit Zitat antworten Zitat
aschne1

Registriert seit: 18. Jul 2004
Ort: Davos
64 Beiträge
 
Delphi 2005 Professional
 
#3

Re: Effektive Höhe Buchstaben und Canvas.TextHeight

  Alt 29. Mär 2006, 15:46
@Flare

Ist Deine Vermutung für 'F' irgendwo dokumentiert? Ich möchte das Ganze nicht mit dem Geodreieck am TFT ausmessen.
Aber ein definierter Referenzbuchstabe (Uppercase) würde mir schon ausreichen, wenn es nicht gerade ein 'Q' ist!

Danke Dir.
Armin
aschne1
  Mit Zitat antworten Zitat
Flare

Registriert seit: 26. Jan 2006
Ort: Leipzig
529 Beiträge
 
Delphi 7 Professional
 
#4

Re: Effektive Höhe Buchstaben und Canvas.TextHeight

  Alt 29. Mär 2006, 15:50
Dokumentiert wird es schon irgendwo sein. Ich habe das F genommen, weil es irgendwie für mich der größte Buchstabe ist ^^
Ich meine im allgemeinen einen Großbuchstaben.


Flare
Willy Scheibel
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: Effektive Höhe Buchstaben und Canvas.TextHeight

  Alt 29. Mär 2006, 15:54
Das kann von Schrift zu Schrift unterschiedlich sein.

1. Die Schriftart muss genug Höhe und Tiefe für alle Zeichen haben. Es muss also nicht nur ein "U" hinein passen, sondern auch ein "Ü" mit den Punkten darüber.

2. Viele Schriftarten enthalten einen Durchschuss, also einen zusätzlichen Abstand vom oberen Pixelrand zum ersten Buchstabenpixel (engl. "Internal Leading"). Siehe hier:
http://www.catch22.net/tuts/img/editor10.gif

Den Abstand kannst du so bestimmen (die Schrift muss in den Canvas gesetzt sein):
Delphi-Quellcode:
var
  tm: TTextMetric;
begin
  GetTextMetrics(Canvas.Handle, tm);
  Result := tm.tmInternalLeading;
end;
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#6

Re: Effektive Höhe Buchstaben und Canvas.TextHeight

  Alt 12. Apr 2006, 19:27
Ich nahm immer das kleine "q" als niedrigsten und das "AE" als den hoechsten Buchstaben!
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
wallaby

Registriert seit: 16. Okt 2006
Ort: Koblenz
4 Beiträge
 
#7

Re: Effektive Höhe Buchstaben und Canvas.TextHeight

  Alt 16. Okt 2006, 18:04
Hallo!

Ich bin bei der Suche nach einer Lösung auf dieses Forum gestoßen.
Und so alt ist der Thread ja nicht, sodass man ihn ruhig aufwärmen
kann.

Zum Problem: Wenn ich an TextWidth einen Text übergebe, bekomme ich
die Breite des Textes in aktueller Schrift und Größe in Pixeln zurück-
geliefert. TextHeight ist es aber egal, welchen Text ich übergebe -
ob "g", "F" oder gar "." - ich erhalte immer den gleichen Wert zurück,
der wohl dem gesammten Space der Schrift entspricht (vom höchsten bis
zum tiefsten Bogen aller Zeichen). Warum übergebe ich dann überhaupt
einen String?
Im vorliegenden Fall will ich die Höhe aller Ziffern ermitteln, um
eine Zahl mit festgelegtem Abstand unter eine Grafik zu drucken.

Ich werde jetzt mal Experimente mit dem "Internal Leading" machen.
Oder ich ändere meine Ausrichtung der Schrift (derzeit BaseLine).

Danke und Gruß Patrick
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#8

Re: Effektive Höhe Buchstaben und Canvas.TextHeight

  Alt 16. Okt 2006, 23:09
Hallo,
Zitat von wallaby:
Zum Problem: Wenn ich an TextWidth einen Text übergebe, bekomme ich
die Breite des Textes in aktueller Schrift und Größe in Pixeln zurück-
geliefert. TextHeight ist es aber egal, welchen Text ich übergebe -
ob "g", "F" oder gar "." - ich erhalte immer den gleichen Wert zurück,
der wohl dem gesammten Space der Schrift entspricht (vom höchsten bis
zum tiefsten Bogen aller Zeichen). Warum übergebe ich dann überhaupt
einen String?
Weil TextHeight und TextWidth intern die API-Routine MSDN-Library durchsuchenGetTextExtentPoint32 aufrufen. Und diese gibt immer beide Werte (Höhe und Breite) zurück.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:52 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