Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#9

AW: Textbreite innerhalb der Titelleiste

  Alt 18. Jun 2010, 21:33
@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.
  Mit Zitat antworten Zitat