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.