Delphi-PRAXiS

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/)
-   -   Breite/Zeichenanzahl bei Memofeldern? (https://www.delphipraxis.net/189521-breite-zeichenanzahl-bei-memofeldern.html)

Marco Steinebach 21. Jun 2016 09:51

Breite/Zeichenanzahl bei Memofeldern?
 
Hallo zusammen,
bitte entschuldigt den etwas dämlichen Betreff.
Also: ich habe ein Memo-Feld (TMemo), das, pro Zeile, bis zu höchstens 28 Zeichen darstellen soll.
Also, Font auf Courier New 12, sollte ja ziemlich das unproportionalste sein, und die Breite entsprechend hingezaubert.
Jetzt mein Problem:
Wenn ich das Feld, sagen wir, 400 Pixel breit mache, passen dann beim einen Rechner nicht 30, bei einem anderen evtl. 50 Zeichen pro Zeile rein, weil der 'ne andere Auflösung hat, oder bin ich hier völlig auf dem Holzweg.
Und, um himmelswillen, gibt es für den Kram 'ne formel, also sowas wie Schriftgröße*3,7 ergibt die Breite in Pixeln?

Für Antworten wäre ich sehr dankbar!
Viele Grüße
Marco

nahpets 21. Jun 2016 10:21

AW: Breite/Zeichenanzahl bei Memofeldern?
 
Ob's 'ne Formel gibt, weiß ich nicht. Aber wie wäre es damit:

Man nehme ein TLabel mit AutoSize := True und dem Font des TMemos.
Nun schreibt man in die Caption des Label 28 * W (oder ein anderes Zeichen, bei Courier New ist das ja egal).

Durch AutoSize des Labels bekommt man nun die Breite des Textes. Da ein Memo ggfls. noch die Scrollbars sichtbar hat, muss man deren Breite zur Labelbreite addieren und dann Width vom Memo auf die Labelbreite setzen.

Das Label kann man zur Laufzeit in der Berechnungsroutine erstellen, so dass man das nicht als sichtbare Komponente auf dem Formular braucht.
Delphi-Quellcode:
lb         := TLabel.Create(Nil);
lb.Font    := Memo.Font;
lb.Autosize := True;
lb.Caption := '01234567890123456789012345678';
Memo.Width := lb.Width; // Hier eventuell was dazu für die Scrollbar.
lb.Free;

Der schöne Günther 21. Jun 2016 10:41

AW: Breite/Zeichenanzahl bei Memofeldern?
 
Habe ich bislang ehrlich gesagt auch so gemacht: Im Hintergrund ein TLabel erstellt, auf AutoSize gesetzt, die entsprechende Schriftart und den Text gesetzt und dann einfach geschaut wie breit der Text ist. :oops:

Marco Steinebach 21. Jun 2016 11:28

AW: Breite/Zeichenanzahl bei Memofeldern?
 
Hallo zusammen,
Meine Güte: warum umständlich, wenn es auch einfach geht. Dürfte die einfachste und sie nächste Lösung sein!
Vielen Dank noch mal und viele Grüße
Marco

ibp 21. Jun 2016 11:39

AW: Breite/Zeichenanzahl bei Memofeldern?
 
guckst du hier!
oder mit
Delphi-Quellcode:
XXX.Canvas.TextWidth('Lorem ipsum dolor sit amet, consetetur sadipscing elitr');
XXX.Canvas.TextHeight('X');


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:16 Uhr.

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