Einzelnen Beitrag anzeigen

Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#1

Text zur Anzeige kürzen mit Punkten hinten

  Alt 28. Okt 2011, 00:17
Ich benutze Lazarus im {$mode delphi} für Win 32.

Hier geht es um einen Workaround, der vom Thread Verschiedene Controls an Procedur übergeben "abstammt".

Wenn eine Form in der TitleBar einen langen Text anzeigt und man die Form seitlich verkleinert (zusammenschiebt), wird der Text gekürzt und mit Punkten am Ende dargestellt, sobald der gesamte Text nicht mehr in die TitleBar passt. Dieses Verhalten will ich für verschiedene Controls nachbilden, die man z. B. als TitleBar für eine rahmenlose Form verwenden kann.

Bei meiner Recherche (Google, Foren-SF) habe ich zu diesem Thema nur Beiträge gefunden, die sich auf Pfade beziehen und die Punkte in der Mitte haben. Mir geht es aber um beliebigen Text, dem die Punkte hinten angehängt werden. (Wer einen fertigen Code kennt, kann ihn gerne posten.)

Für die Anzeige des gekürzten Textes mit Punkten kommen verschiedene Controls in Frage, die auch nicht unbedingt eine TitleBar darstellen müssen (TitleBar war nur ein Beispiel). Wichtig ist nur, dass das Control eine Caption- oder Text-Eigenschaft hat.

Hier eine Übersicht der Bedingungen, die in einer einzigen Procedure erfüllt werden sollen:

- Im Procedure-Kopf wird ein Control und der Text übergeben.

- Es wird geprüft, ob das Control eine Caption- oder Text-Eigenschaft besitzt.

- Die Textlänge wird in Pixel ermittelt und mit der Width des Controls verglichen.
. . . dabei wird die Schrift, Schrift-Größe, Fett-Schrift, usw. berücksichtigt.

- Ist der Text zu lang, um komplett im Control dargestellt zu werden,
. . . a) wird er gekürzt, sodass er ins Control passt und "..." angehängt,
. . . b) wird der komplette Text im Tooltipp des Controls angezeigt.


Nun werd ich mich daran machen, das Ganze in Code umzusetzen. Einige Ansätze wurden schon im o. g. "Abstamm"-Thread gezeigt. Über weitere Ideen und Anregungen würde ich mich freuen!

Guido.

Geändert von mkinzler (31. Okt 2011 um 11:07 Uhr) Grund: Threadtitel auf Wunsh von TE angepasst
  Mit Zitat antworten Zitat