AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Längster Eintrag einer Listbox ermittel?
Thema durchsuchen
Ansicht
Themen-Optionen

Längster Eintrag einer Listbox ermittel?

Ein Thema von thiagojonas · begonnen am 18. Dez 2008 · letzter Beitrag vom 26. Dez 2008
Antwort Antwort
Seite 3 von 3     123   
thiagojonas

Registriert seit: 31. Aug 2008
Ort: Wolfenbüttel
338 Beiträge
 
#21

Re: Längster Eintrag einer Listbox ermittel?

  Alt 18. Dez 2008, 23:22
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?
  Mit Zitat antworten Zitat
thiagojonas

Registriert seit: 31. Aug 2008
Ort: Wolfenbüttel
338 Beiträge
 
#22

Re: Längster Eintrag einer Listbox ermittel?

  Alt 18. Dez 2008, 23:50
So habe was geschrieben, was mir die Differenz zum längsten Wert ausspuckt.

Delphi-Quellcode:
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;
Mann müsste dann die Variable "Lösung" nehmen und dann "xLösungen * ' ' (Leerzeichen), damit die alle eine Länge erhalten.
Aber das mache ich morgen, nach der Schule

Kann mir jemand sagen ob der Ansatz so richtig ist?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Längster Eintrag einer Listbox ermittel?

  Alt 19. Dez 2008, 07:03
[edit]
mist, hatte ausversehn editiser, statt kommentiert

dieser (der ursprüngliche) Beitrag ist also futsch
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#24

Re: Längster Eintrag einer Listbox ermittel?

  Alt 19. Dez 2008, 07:44
Moin, Moin.
Wenn auch kürzer gefasst, das wurde schon in #2 vorgeschlagen.
Ob's diesmal hilft?
Ralph
  Mit Zitat antworten Zitat
thiagojonas

Registriert seit: 31. Aug 2008
Ort: Wolfenbüttel
338 Beiträge
 
#25

Re: Längster Eintrag einer Listbox ermittel?

  Alt 21. Dez 2008, 22:04
@himitsu

Danke, aber irgendwie blicke ich da nicht durch.
Könntest du mir das noch ein bisschen näher erläutern?
Danke
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.119 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
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz