Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Texthöhe berechnen (mit Zeilenumbruch) (https://www.delphipraxis.net/89719-texthoehe-berechnen-mit-zeilenumbruch.html)

TheMiller 4. Apr 2007 19:14


Texthöhe berechnen (mit Zeilenumbruch)
 
Hallo,

ich zeichne in ein Recteck mit DrawText einen Text, den ich auch umbrechen lasse. Jetzt möchte ich schön unter dem Text einen weiteren ausgeben. Wenn ich aber die Funktion mit "dt_calcrect or dt_wordbreak" aufrufe, dann verändert sich das komplette Rechteck, was aber in meinem Fall nicht sein darf.
Dann habe ich die Funktion GetTextMetrics entdeckt, diese scheint aber keinen Textumbruch zu unterstützen. Was kann ich tun?

Danke

Keldorn 4. Apr 2007 20:37

Re: Texthöhe berechnen (mit Zeilenumbruch)
 
Hallo

dt_calcrect ändert doch aber nur die höhe, nicht das komplette Rechteck. Die Breite, die das Rechteck hatte, bleibt.

Mfg Frank

TheMiller 4. Apr 2007 20:38

Re: Texthöhe berechnen (mit Zeilenumbruch)
 
Nein, es ändert nicht nur die Höhe sondern manipuliert das gesamte Rechteck. Das ist ja mein Problem.

Keldorn 4. Apr 2007 20:41

Re: Texthöhe berechnen (mit Zeilenumbruch)
 
ist mir ehrlich gesagt so noch nicht aufgefallen, hast du etwas beispielcode?

TheMiller 4. Apr 2007 20:44

Re: Texthöhe berechnen (mit Zeilenumbruch)
 
Einfach mal so aus der Unit gezogen (etwas unübersichtlich vielleicht, da ich doch am Experminetieren bin)

Delphi-Quellcode:
  t:=jpg.Height+10+(i*Font.Height)+(i*25);
  l:=FLeftMargin;
  r:=ceil((Width/5)*3);
 
  b:=t+DrawText(Canvas.handle, PChar(Tasks.Strings[i]), Length(PChar(Tasks.Strings[i])), TaskRect, dt_calcrect or dt_wordbreak);
 
  t:=jpg.Height+10+(i*Font.Height)+(i*25);
  l:=FLeftMargin;
  r:=ceil((Width/5)*3);
  DrawText(Canvas.handle, PChar(Tasks.Strings[i]), Length(PChar(Tasks.Strings[i])), TaskRect, dt_wordbreak);
Kannst ja noch ein kleines ShowMessage rundrum legen und die Veränderung ansehen. Das Problem bei mir ist, dass ich zwei Textausgaben nebeneinander darstellen möchte, aber dies wegen der Veränderung des Rechtecks optisch nicht klappt

Keldorn 4. Apr 2007 21:01

Re: Texthöhe berechnen (mit Zeilenumbruch)
 
ok, da seh ich jetzt nicht durch, die vielen Variablen verwirren mich für diese Uhrzeit :).

und du verwirrst mich, in deinem ersten Posting möchtest du Text untereinader, im letzten nebeneinander ;-).
Für untereinander würde ich es so probieren:
Delphi-Quellcode:
Var r:Trect;
    s1,s2:string;
    hoehe:integer;
begin
  //untereinander
  r:=rect(20,30,150,100);
  s1:='Einfach mal so aus der Unit gezogen (etwas unübersichtlich vielleicht, da ich doch am Experminetieren bin)';
  s2:='Kannst ja noch ein kleines ShowMessage rundrum legen und die Veränderung ansehen. Das Problem bei mir ist, dass ich zwei Textausgaben nebeneinander darstellen möchte ';

  Hoehe:=DrawText(Canvas.handle, PChar(s1), Length(s1), R, dt_calcrect or dt_wordbreak);
  r.Bottom:=r.Top+hoehe;
  DrawText(Canvas.handle, PChar(s1), Length(s1), R, dt_wordbreak);
  //rechteck verschieben und anderen Text daruntersetzen
  offsetrect(r,0,hoehe);
  Hoehe:=DrawText(Canvas.handle, PChar(s2), Length(s2), R, dt_calcrect or dt_wordbreak);
  r.Bottom:=r.Top+hoehe;
  DrawText(Canvas.handle, PChar(s2), Length(s2), R, dt_wordbreak);

TheMiller 4. Apr 2007 21:07

Re: Texthöhe berechnen (mit Zeilenumbruch)
 
Joa... muss grad voll lachen...

Also, mein Ausgangsgedanke:

Ich wollte eine Art Liste mit 2 Spalten. Damit diese schön angeordnet sind, habe ich zwei Rechtecke - eins für jede Spalte. Die Left-Position des 2. Rechtecks wird von der Rigth-Position des ersten beeinflusst. Doch wenn die Schrift einen Zeilenumbruch drin hat, verschieben sich natürlich die Einträge, sodass die Reihen nicht mehr korrekt nebeneinander stehen. So schaut's aus...

Den Code werde ich mal testen.

Keldorn 4. Apr 2007 21:11

Re: Texthöhe berechnen (mit Zeilenumbruch)
 
ok :).

aber ich habs auch grad nochmal durchgesteppt. Die breite ändert sich auch, ist mir noch nie aufgefallen :oops:
aber du kannst doch dir die Breite vor Darwtext merken und dann danach wieder setzen?

TheMiller 4. Apr 2007 21:16

Re: Texthöhe berechnen (mit Zeilenumbruch)
 
Dafür hatte ich ja die vielen Variabeln (l (Left) t (Top) r (Right) b (Bottom)), aber da hatte ich wohl einen anderen Fehler drin. Ich hoffe halt nur, dass es eine andere, elegantere Lösung gibt...

Danke

Luckie 4. Apr 2007 22:15

Re: Texthöhe berechnen (mit Zeilenumbruch)
 
Hilfe lesen hilft:
Zitat:

DrawText returns the height of the formatted text but does not draw the text.
Man muss DrawText also zweimal aufrufen. Einmal mit dem Flag DT_CALCRECT um die Größe zu bestimmen und einmal ohne, um den Text dann auch auszugeben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:48 Uhr.
Seite 1 von 2  1 2      

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