![]() |
Texthöhe ermitteln
Um die Höhe eines Textes zu ermitteln, benutze ich folgende Funktion
Delphi-Quellcode:
FUNCTION GetFontHeight(FontHandle:HFont):integer;
var DC:HDC; OldFont:HFONT; Metrics:TTextMetric; begin DC:=GetDC(0); try OldFont:=SelectObject(DC,FontHandle); GetTextMetrics(DC, Metrics); SelectObject(DC,OldFont); finally ReleaseDC(0,DC); end; Result:=Metrics.tmHeight; end; Nun möchte ich die Höhe des Textes bei gegebenem Font, aber mit einem anderen Font.Size und/oder Font.Style ermitteln OHNE den Font.Size/Style des betreffenden Controls zu verändern. Wie kann ich das am einfachsten realisieren? |
AW: Texthöhe ermitteln
Ich würde eine unsichtbare andere Canvas dafür benutzen.
Gruß K-H |
AW: Texthöhe ermitteln
Wie wär's mit einem Label?
|
AW: Texthöhe ermitteln
PS: Schonmal in die
![]() [CL]Text Höhe[/CL] Jenachdem wie wann/ob, die Komponente den Font setzt (für die Anzeige), kann man entweder direkt das Canvas dieses Controls nutzen, Font+Size+Style setzen und die Texthöhe auslesen (also wenn das Control dem Canvas für die Anzeige, beim Anzeigen den Font neu zuweist), oder man nutzt eben ein anderes Canvas. |
AW: Texthöhe ermitteln
Zitat:
Zitat:
Zitat:
Ich möchte keine anderen Komponenten, ob sichtbar oder unsichtbar benutzen, sondern nur für den aktuellen Font eines Controls, aber mit ggfs. anderem Size/Style die Texthöhe bestimmen. Also eine Funktion analog GetFontHeight aus #1 mit zusätzlichen Parametern Size und Style, die die Schrifthöhe ermittelt, OHNE den Font.Size/Style des Controls zu ändern und ohne irgend ein anderes Control zu benutzen. Zitat:
|
AW: Texthöhe ermitteln
Die Funktionen, zum Messen der Text-Höhe/Breite brauchen nunmal einen Canvas (der einen DeviceContext kapselt) oder einen DeviceContext.
Also entweder nutzt du den Canvas/DC des Controls und änderst dort den Font oder du mußt eben einen anderen Canvas/DC benutzen (wofür sich in der CL passende Codes finden lassen). Wenn du wissen willst, wie schwer ein Auto ist, dann mußt du dieses zu einer Wage bringen oder du nimmst dir ein vergleichbares Auto und schaffst das zur Waage. :roll: (oder du kennst jemanden der weiß wie schwer es ist) |
AW: Texthöhe ermitteln
Man könnte auch sagen "wasch mich aber mach mich nicht nass".
Ist ja nicht soganz unüblich solche Forderungen zu stellen. Gruß K-H |
AW: Texthöhe ermitteln
Ich hab es jetzt so gelöst:
(Ist nicht ganz das was ich ursprünglich wollte, aber es funktioniert.)
Delphi-Quellcode:
FUNCTION GetFontHeight(AFont:TFont; ASize:integer; AStyles:TFontStyles):integer;
var f:TFont; DC:HDC; OldFont:HFONT; Metrics:TTextMetric; begin f:=TFont.Create; DC:=GetDC(0); try try f.Assign(AFont); f.Size:=ASize; f.Style:=AStyles; OldFont:=SelectObject(DC,f.Handle); GetTextMetrics(DC, Metrics); SelectObject(DC,OldFont); Result:=Metrics.tmHeight; except On Exception do result:=0; end; finally ReleaseDC(0,DC); f.Free; end; end; Zitat:
Zitat:
Falls doch noch jemand einen Weg kennt, wie das besser zu lösen ist, bin ich für jeden Hinweis dankbar. |
AW: Texthöhe ermitteln
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. |
AW: Texthöhe ermitteln
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 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 by Thomas Breitkreuz