OK, erstmal hab ich 'nen winzigen Fehlerentdeckt ... da oben in den Beispielen hate ich ' ' (Leerzeichen) statt '_' verwendet ... aber wenn man Unterstrichte haben möchte, dann sollte man diese schon verwenden
Delphi-Quellcode:
MaxTextLen = 0;
For i := ListBox1.Items.Count - 1 downto 0 do
MaxTextLen := Max(TextLaenge(Label1.Font, ListBox1.Items[i]), MaxTextLen);
das geht alle Items durch, mißt
[i]TextLaenge(Label.Font, ListBox1.Items) wie lang jedes Item ist und gibt am Ende die größe Länge in
MaxTextLen zurück.
Delphi-Quellcode:
MaxTextLen := 0;
LongestText := -1;
For i := ListBox1.Items.Count - 1 downto 0 do Begin
i2 := TextLaenge(Label1.Font, ListBox1.Items[i]);
If i2 >= MaxTextLen Then Begin
MaxTextLen := i2;
LongestText := i;
End;
End;
hier wird das selbe gemacht, nur daß in
LongestText zusätzlich noch der Item-Intex des ersten Items ist, wälches der größen Länge entspricht.
Delphi-Quellcode:
TextLaenge(Label1.Font, 'text')
// entsoricht
Label1.Canvas.TextWidth('text')
man kann bei der Litbox auch direkt über das Canvas gehen
For i := ListBox1.Items.Count - 1 downto 0 do
MaxTextLen := Max(Label1.Canvas.TextWidth(ListBox1.Items[i]), MaxTextLen);[/delphi]
Delphi-Quellcode:
MaxTextLen := 0;
LongestText := -1;
For i := ListBox1.Items.Count - 1 downto 0 do Begin
i2 := Label1.Canvas.TextWidth(ListBox1.Items[i]);
If i2 >= MaxTextLen Then Begin
MaxTextLen := i2;
LongestText := i;
End;
End;
nja und im Folgendem wird die Breide des Strings
S gemessen und von der Soll-Länge
X abgezogen - übrig bleibt die Läge, welche noch mit "_" gefüllt werden muß ... also die übrige Läge durch due Breite eines "_" teilen und man hat die Anzahl der noch benötigten "_".
tja und zum Schluß wird ein String erzeigt, welche dieser Anzahl entpricht und an S angehängt und alles in einem Label ausgegeben.
( [
oh]function StringOfChar(Ch: Char; Count: Integer): string;[/
oh] erzeugt einen String aus einer Vielzahl (
Count Zeichen lang) eines bestimmten Zeichens (
Ch) )
Delphi-Quellcode:
X := 123; // Label-Text soll 123 Pixel breit sein
S := 'der Text';
i := X - Label1.Canvas.TextWidth(S); // Länge der "_" in Pixeln
i := i div Label1.Canvas.TextWidth('_'); // Länge der "_" in Zeichen (abgerundet)
Label1.Caption := S + StringOfChar('_', i);
i := (X - Label1.Canvas.TextWidth(S)) div Label1.Canvas.TextWidth('_');
Label1.Caption := S + StringOfChar('_', i);