Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.163 Beiträge
 
Delphi 12 Athens
 
#26

Re: Längster Eintrag einer Listbox ermittel?

  Alt 26. Dez 2008, 16:47
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);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat