![]() |
Re: Längster Eintrag einer Listbox ermittel?
gut, da hast du recht, aber gibt es nicht irgend eine funktion, die die anzahl eines strings zählt und nicht die breite der einzelnen Buchstaben der einträge?
|
Re: Längster Eintrag einer Listbox ermittel?
So habe was geschrieben, was mir die Differenz zum längsten Wert ausspuckt.
Delphi-Quellcode:
Mann müsste dann die Variable "Lösung" nehmen und dann "xLösungen * ' ' (Leerzeichen), damit die alle eine Länge erhalten.
procedure TForm2.Button2Click(Sender: TObject);
var ausgabe :string; var ausgabe2 :string; var i:integer; var anzahl:integer; var anzahl2:integer; var laenge:integer; var lösung:integer; var exe:string; var target:string; begin laenge := 0; for i := 0 to Listbox1.Items.Count - 1 do begin exe := Listbox1.items[i]; if length(exe)> laenge then begin laenge:=length(exe); // Längste Wert wird in der Listbox herausgesucht. target:=exe; end; ausgabe := target; //Ausgabe erhält den längsten Wert der Listbox anzahl:= Length(ausgabe); //Anzahl erhält die Anzahl der Zeichen des längsten Wertes in der Listbox ausgabe2 := Listbox1.items.Strings[i]; anzahl2:= Length(ausgabe2);// Anzahl der Zeichen der Werte in der Listbox lösung := anzahl - anzahl2; //Subtrahiert Anzahl der Zeichen des längsten Wertes mit der Anzahl der Zeichen der anderen Werte showmessage( IntToStr(lösung));// Zeigt das Ergebnis end; end; Aber das mache ich morgen, nach der Schule :-D Kann mir jemand sagen ob der Ansatz so richtig ist? |
Re: Längster Eintrag einer Listbox ermittel?
[edit]
mist, hatte ausversehn editiser, statt kommentiert :wall: dieser (der ursprüngliche) Beitrag ist also futsch |
Re: Längster Eintrag einer Listbox ermittel?
Moin, Moin.
Wenn auch kürzer gefasst, das wurde schon in #2 vorgeschlagen. Ob's diesmal hilft? |
Re: Längster Eintrag einer Listbox ermittel?
@himitsu
Danke, aber irgendwie blicke ich da nicht durch. Könntest du mir das noch ein bisschen näher erläutern? Danke |
Re: Längster Eintrag einer Listbox ermittel?
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 :roll:
Delphi-Quellcode:
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.
MaxTextLen = 0;
For i := ListBox1.Items.Count - 1 downto 0 do MaxTextLen := Max(TextLaenge(Label1.Font, ListBox1.Items[i]), MaxTextLen);
Delphi-Quellcode:
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.
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;
Delphi-Quellcode:
man kann bei der Litbox auch direkt über das Canvas gehen
TextLaenge(Label1.Font, 'text')
// entsoricht Label1.Canvas.TextWidth('text') 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); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz