@David:
erstmal gehts nicht um schneller oder langsammer sondern um die Frage: ist die so ermitteltete Breite eines Textes identisch zur Breite wenn man sie in der Schriftart in der Titelzeile eines Fenster zeichnen würde. Und die Antwort ist, nein. Du weist dem WMF Canvas nur den Font deklariert im TForm zu und nicht den den das Windows
OS zum Zeichnen der Titelzeile verwendet. (quasi Thema verfehlt)
Es gibt nur eine Methode das zu machen:
1.) mit SystemParamatersInfo() den Font als Struktur vom Betriebssystem holen
2.) diese Struktur und ein
GDI Font
Handle mit CreateFontIndirekt() umwandlen
3.) diese
Handle einen Canvas.Font.Handle zuweisen oder direkt über das Windows
GDI API das Gleiche ohne Umwege über den TCanvas.Font machen.
Nun streiche mal all diese Funktinen aus Kubs Funktion heraus und schau was im Vergleich zu deinem Vorschlag übrig bleibt. Ich sage es nur ungern so deutlich, es bleibt ne Menge heiße Luft die keinerlei Vorteile bringt, eher Nachteile.
Angenommen man möchte die Breite eines Textes im Font des TForms ermitteln, dann geht das am einfachsten so:
Delphi-Quellcode:
funcntion TForm1.GetTextWidth(const Text: String): Integer;
begin
Result := Canvas.TextWidth(Text);
end;
Also ein Einzeiler der exakt das gleiche Resultat bringt wie dein Source !
Gruß Hagen
PS: verzeih mir bitte die eventuell harten Worten, aber es ist nunmal nicht anders.