![]() |
Komponentenbreite an Textbreite anpassen
Guten Morgen, Allerseits.
Ich probiere schon seit zwei Stunden, die Breite eines Memo zur Laufzeit so einzustellen, dass ein vorgegebener Text reinpasst.
Delphi-Quellcode:
Das Memo ist - egal welche Schriftgröße ich nehme - immer ein wenig zu klein. Ich habe auch schon den Umweg gewählt, den Text direkt (ohne Verwendung von Canvas) einem Label.Caption zuzuweisen und dann die Breite des Labels zu verwenden - der Effekt ist derselbe.
begin
Label1.Font.Size := 18; Memo1.Font.Size := 18; w := Label1.Canvas.TextWidth('TESTTEXT'); Memo1.Width := w; d := w - Memo1.ClientWidth; Memo1.Width := d + w; Memo1.Clear; Memo1.Lines.Add('TESTTEXT'); ShowMessage(IntToStr(w) + '/' + IntToStr(d) + '/' + IntToStr(Memo1.Width)); end; Wer kann mir weiterhelfen? Vielen Dank und noch einen schönen Sonntag. Gruß Jürgen |
Re: Komponentenbreite an Textbreite anpassen
Moin moin,
der Text im Memo geht doch vorne nie gleich beim allerersten Pixel los, sondern erst mit einem kleinen Offset rechts davon. Genauso endet die Textanzeige am rechten Memo-Rand auch schon etwas vorm letzt möglichen Pixel. Ergo musst du diese Versatzlängen zur eigentlichen TextWidth einfach immer noch dazuaddieren:
Delphi-Quellcode:
Übrigens kann man die Größe dieser Abstandsränder bei einem Memo oder einem RichEdit auch selbst auslesen bzw. selbst einstellen, und zwar mittels EM_GETRECT bzw. EM_SETRECT.
Offsets := 8; // 8, sonst schlägt das "WordWrap" zu, wenn dieses TRUE ist
Memo1.ClientWidth := Offsets + Label1.Canvas.TextWidth(Label1.Caption); Auch schönen Sonntag noch, mfg |
Re: Komponentenbreite an Textbreite anpassen
@ r29d43
Guten Morgen ... und vielen Dank für Dein frühes Engagement. Das mit Offsets := 8 klappt nur bei Font.Size < 11 (bei Arial). Je größer die Schrift ist, desto größer wird dieser Wert. Ich habe das mal für Schriftgrößen bis 72 angeschaut: Zitat:
Gruß Jürgen |
Re: Komponentenbreite an Textbreite anpassen
hallo Jürgen. 8 war auch nur ein Beispiel.
schau dir nochmal den Beitrag über deinem genau an: Zitat:
|
Re: Komponentenbreite an Textbreite anpassen
Delphi-Quellcode:
Heißt:
var rec:TRect;
begin SendMessage(Memo1.Handle,EM_GETRECT,0,Integer(@rec)); Du sendest eine Nachricht (EM_GETRECT) an das Memo, das du sein Rechteck in Rec haben willst. (@ ist für die Adresse und diese muss auf Integer gecastet werden) In Rec steht das ganze dann. mfg MSSSSM |
Re: Komponentenbreite an Textbreite anpassen
Zur Vermeidung von Frust bei Leuten meines Alters sollte es Minderjährigen untersagt werden, im Forum Ihr Alter preiszugeben! :zwinker:
Erst mal vielen Dank, aber das Ganze wird mir immer unheimlicher:
Delphi-Quellcode:
funktioniert!
Memo1.Font.Size := 10;
Memo1.Height := 20; Memo1.Clear; Memo1.Text := 'TEST';
Delphi-Quellcode:
funktioniert nicht! - d.h. es funktioniert erst, wenn Memo1.Height > 37.
Memo1.Font.Size := 10;
Memo1.Height := 20; Memo1.Clear; Memo1.Lines.Add('TEST'); Jetzt könnte man annehmen, dass mit dem Lines.Add auch gleich ein Zeilenwechsel eingefügt wird, d.h. dass noch eine zweite leere Zeile vorhanden ist. Dem ist aber nicht so, denn die Abfrage von Lines.Count ergibt eindeutig 1. Gruß Jürgen |
Re: Komponentenbreite an Textbreite anpassen
Gegenprobe:
Delphi-Quellcode:
Wie sieht es damit aus?
Memo1.Font.Size := 10;
Memo1.Height := 20; Memo1.Clear; Memo1.Lines.Add('TEST'); Memo1.Lines.ItemIndex := 0; |
Re: Komponentenbreite an Textbreite anpassen
@ DeddyH
??? Schlecht! Ich will ja nicht die unsichtbare Zeile auslesen, sondern möchte, dass die Zeile angezeigt wird. Das könnte ich jetzt ja durch Memo1.Text := 'TEST' erreichen. Aber das Problem ist doch, dass ich zur Laufzeit feststellen möchte, wie groß ein Memo sein muss, um einen mehrzeiligen Text in vorgegebener Schriftgröße unterzubringen bzw. wie groß die Schriftgröße sein muss, damit ich diesen Text in einem Memo mit vorgegebener Größe unterbringen kann. Vielleicht stelle ich mich ja wirklich nur zu blös an?! Gruß Jürgen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:27 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-2025 by Thomas Breitkreuz