String kürzen in Abhängigkeit der Zeichenbreite

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

String kürzen in Abhängigkeit der Zeichenbreite

Beitrag von m.fuchs »

Hallo,

ich benötige eine Funktion die einen String so kürzt dass er bei Ausgabe auf einem Canvas eine bestimmte Breite nicht überschreitet. Wie man das macht ist mir auch klar, meine Frage ist eher: gibt es dafür in der LCL schon eine fertige Funktion? Bis jetzt ist mir nämlich keine mit einem passenden Namen untergekommen.

mfg
Micha
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Martin V
Beiträge: 142
Registriert: Sa 30. Jan 2010, 19:35
OS, Lazarus, FPC: Linux64, Wiindows32, MacOS, Lazarus 1.8.2
CPU-Target: xxBit

Re: String kürzen in Abhängigkeit der Zeichenbreite

Beitrag von Martin V »

Mit tCanvas.Textwidth (String) : integer kann man für einen gegebenen String die Breite in Pixeln abfragen, ohne ihn auszugeben. Du mußt dann eine Schleife bauen und in der klein-Doofi-Variante immer einen Buchstaben weglassen, bis Du Deine Breitengrenze unterschreitest. Oder Du optimierst ihn geschwindigkeitsmäßig, indem Du mit größeren Schritten anfängst und dann kleinere Schritte verwendest (Regressionsalgorithmus): String halbieren, dann um ein Viertel länger bzw. kürzer, dann um ein Achtel usw. So gelangt man mit wenigen Schritten zum korrekten Ergebnis.

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: String kürzen in Abhängigkeit der Zeichenbreite

Beitrag von Scotty »

Du suchst nach DrawText() mit DT_ELLIPSIS (http://msdn.microsoft.com/en-us/library ... 85%29.aspx).

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: String kürzen in Abhängigkeit der Zeichenbreite

Beitrag von m.fuchs »

Scotty hat geschrieben:Du suchst nach DrawText() mit DT_ELLIPSIS [...]


Jo, das passt. Allerdings hab ich keine Möglichkeit gefunden auf die drei Doppelpunkte zu verzichten oder ein alternatives Suffix an den String zu hängen. Aber das wäre wohl auch eher ein ungewöhnliches Vorhaben.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: String kürzen in Abhängigkeit der Zeichenbreite

Beitrag von pluto »

Dann bleibt dir nur eins: Du musst selbst eine Funktion schreiben.
MFG
Michael Springwald

Antworten