Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Listbox Items weiterverarbeiten (https://www.delphipraxis.net/106494-listbox-items-weiterverarbeiten.html)

The_Doomed 11. Jan 2008 18:40


Listbox Items weiterverarbeiten
 
Also hallo erstmal
ich hab dieses Schuljahr mit Delphi angefangen hatte aber schon n paar vorkenntnisse^^

so zu meinen Problem
Es geht um die Brechnung eines Mittelwertes mit Zahlen (Strings) die in einer listbox stehen
bisher bin ich so weit gekommen dass nur zahlen in die listbox eingetragen werden können (is allerdings nicht die feine art)
nun möchte ich wenn ich alle werte eingetragen habe und den button zur brechnung des MW drücke
dass er alle items aus der liste in real Werte umwandelt und ich damit den mittelwert berechnen kann

Delphi-Quellcode:
 
procedure TForm1.Button1Click(Sender: TObject);
//Einfügen einer Zahl in die Listbox über StrToFloat - FloatToStr
var c:String; b:Integer; a:real ;
begin
b:=StrToInt(Edit2.Text);
a:=StrToFloat(Edit1.Text);
c:=FloatToStr(a);
Listbox1.Items.Add(c);
b:=b+1;
Edit2.Text:= IntToStr(b);
end;

procedure TForm1.Button2Click(Sender: TObject);
//Löschen eines ausgewählten Items
begin
Listbox1.DeleteSelected;
end;

procedure TForm1.Button3Click(Sender: TObject);
//Schleife zum Löschen der kompletten Liste (evt. gehts auch einfacher)
var a,b:Integer;
begin
a:=0;
b:=StrToInt(Edit2.Text);
Repeat
begin
Listbox1.Items.Delete(0);
b:=b-1;
Edit2.Text:=IntToStr(b);
end;
Until b=0;
end;

procedure TForm1.Button4Click(Sender: TObject);
//Stelle an der der Mittelwert aus den Items der Listbox berechnet werden soll
begin

end;
Und dann würde mich interessieren wie man TryStrTo... einsetzt - klappt bei mir nicht wegen Überladener Version ^^
ich liebe diese super zu interpretierenden Fehler (soll heißen kann damit nix anfangen)

Danke schon ma im Vorraus :coder2:

The_Doomed

mkinzler 11. Jan 2008 18:42

Re: Listbox Items weiterverarbeiten
 
Delphi-Quellcode:
if not TryStrToInt(Edit2.Text, b) then //Kein Integer

The_Doomed 11. Jan 2008 18:44

Re: Listbox Items weiterverarbeiten
 
achso hätt ich dazusagen sollen
das b und edit 2 is ne Zahl in nem Edit feld welche nur die anzahl der Einträge anzeigt die sich in der box befinden
um diese dann mit der schleife zu löschen
hat also mit dem problem ni wirklich was zu tun ^^

Matze 11. Jan 2008 18:45

Re: Listbox Items weiterverarbeiten
 
Mit einer For-Schleife:

Delphi-Quellcode:
for i := 0 to ListBox.Items.Count - 1 do
kannst du alle Items durchgehen, in einen entsprechenden Datentyp konvertieren und damit weiterrechnen.

The_Doomed 11. Jan 2008 18:48

Re: Listbox Items weiterverarbeiten
 
das hab ich auch schon anderswo gelesen aber ich habs ni verstanden wäre cool wenn man dass ma n bisschen ausführlicher erklären würde ich mach das noch ni so lange :angel2:

mkinzler 11. Jan 2008 18:50

Re: Listbox Items weiterverarbeiten
 
ListBox.Items.Count enthält die Anzahl der Einträge der Liste, da der Index bei 0 beginnt muss man dann 1 abziehen.

DeddyH 11. Jan 2008 18:50

Re: Listbox Items weiterverarbeiten
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
//Einfügen einer Zahl in die Listbox über StrToFloat - FloatToStr
var c:String; b:Integer; a:real ;
begin
b:=StrToInt(Edit2.Text);
a:=StrToFloat(Edit1.Text);
c:=FloatToStr(a);
Listbox1.Items.Add(c);
b:=b+1;
Edit2.Text:= IntToStr(b);
end;

procedure TForm1.Button2Click(Sender: TObject);
//Löschen eines ausgewählten Items
begin
  Listbox1.DeleteSelected;
end;

procedure TForm1.Button3Click(Sender: TObject);
//Schleife zum Löschen der kompletten Liste (evt. gehts auch einfacher)
begin
  ListBox1.Items.Clear;
end;

procedure TForm1.Button4Click(Sender: TObject);
//Stelle an der der Mittelwert aus den Items der Listbox berechnet werden soll
var i: integer;
    Summe, Mittel: double;
begin
  Summe := 0;
  Mittel := 0;
  for i := 0 to ListBox1.Items.Count - 1 do
    Summe := Summe + StrToFloat(ListBox1.Items[i]);
  if ListBox1.Items.Count > 0 then
    Mittel := Summe / ListBox1.Items.Count;
end;
Getippt und nicht getestet.

The_Doomed 11. Jan 2008 19:01

Re: Listbox Items weiterverarbeiten
 
und wie lass ich das mittel ausgeben ??
muss ich ja wieder in nen string konvertieren oder ?

mkinzler 11. Jan 2008 19:02

Re: Listbox Items weiterverarbeiten
 
Zitat:

und wie lass ich das mittel ausgeben ??
muss ich ja wieder in nen string konvertieren oder ?
Ja. Z.B. mit Format

The_Doomed 11. Jan 2008 19:04

Re: Listbox Items weiterverarbeiten
 
und das bedeutet

mkinzler 11. Jan 2008 19:06

Re: Listbox Items weiterverarbeiten
 
Mit Format kannt du den wert fomatieren

The_Doomed 11. Jan 2008 19:08

Re: Listbox Items weiterverarbeiten
 
das is mir ja klar aber ich weiß ni wie ich es anwende das lässt sich auch aus der supertollen für laien komplett unverstänlichen hilfe nicht herauslesen

DeddyH 11. Jan 2008 19:09

Re: Listbox Items weiterverarbeiten
 
Delphi-Quellcode:
ShowMessage(Format('%.2f',[Mittel]));
Gibt das Mittel mit 2 Nachkommastellen aus.

The_Doomed 11. Jan 2008 19:12

Re: Listbox Items weiterverarbeiten
 
gut funzt
danke

Matze 11. Jan 2008 20:06

Re: Listbox Items weiterverarbeiten
 
Du kannst dir übrigens zukünftig sehr leicht selbst helfen. Bei den Delphi-Funktionen wie TryStrToInt oder Format findest du die Parameter, die übergeben werden sollen, mit einer kurzen Erklärung in der Delphi-Hilfe (Caret im Editor auf den Funktionsnamen setzen und F1 drücken). Auch am Hint im Editor siehst du, welche Parameter eine Funktion erwartet.

The_Doomed 12. Jan 2008 07:49

Re: Listbox Items weiterverarbeiten
 
na ja da zeigt es aber immer sachen mit deren namen ich nix anfangen kann weil ich das einfach noch nicht lange genug mache aber ich denk mal das wird schon noch ^^

trotzdem danke

NickelM 16. Jan 2008 08:10

Re: Listbox Items weiterverarbeiten
 
Ehm sag mal hast du es jetzt mit der for schleife verstahnden????

Eigentlich ganz einfach:

Also Integer Variable machen(also bei procedure schreiben var : I : Integer.

Dann sagt du den Berecih bzw. die Anzahl der Wiederholungen der Anweisung z.b.

Delphi-Quellcode:
for I := 1 to 3 do //also 3 Mal(bei Indexen ist Count immer 1 höher deshalb -1)
TestForm := TForm.Create(Self); {dann wird das Formular 3 mal erstellt. (bin jetzt grad net daheim am Rechner und es kann sein, dass bei dem beispiel eine Zugriefsverletzung gibt, weil man das gleiche Form nicht 3 mal zeichnen kann.}
Aber ich hoffe du verstehst jetzt ein bischen besser wie for-Schleife geht :thumb:

The_Doomed 16. Jan 2008 19:41

Re: Listbox Items weiterverarbeiten
 
lol die schleife selbst war gar nicht mein problem wie auch der titel besagt wusste ich nicht
wie ich die items aus der listbox halt weiterverwenden kann ^^
weitere Frage kann man statt double auch einfach real nehmen oder is das von bedeutung (summe, mittel:double)

The_Doomed

DeddyH 16. Jan 2008 19:45

Re: Listbox Items weiterverarbeiten
 
Zitat:

Zitat von Delphi-Hilfe
Fundamentale reelle Typen
Typ Bereich Signifikante Stellen Größe in Byte
Real48 2.9 x 10^-39 .. 1.7 x 10^38 11-12 6
Single 1.5 x 10^-45 .. 3.4 x 10^38 7-8 4
Double 5.0 x 10^-324 .. 1.7 x 10^308 15-16 8
Extended 3.6 x 10^-4951 .. 1.1 x 10^4932 19-20 10
Comp -2^63+1 .. 2^63 -1 19-20 8
Currency -922337203685477.5808.. 922337203685477.5807 19-20 8
Der generische Typ Real ist in der aktuellen Implementation mit dem Typ Double identisch.

Generische reelle Typen
Typ Bereich Signifikante Stellen Größe in Byte
Real 5.0 x 10^-324 .. 1.7 x 10^308 15-16 8
Hinweis

Der Typ Real48 (6 Byte) hatte in früheren Object-Pascal-Versionen den Namen Real. Wenn Sie Quelltext neu compilieren, der den alten Typ Real (6 Byte) in Delphi enthält, ändern Sie diesen Typ in Real48. Die Compiler-Direktive {$REALCOMPATIBILITY ON} wandelt den Typ Real wieder in den alten 6-Byte-Typ um.
Die folgenden Erläuterungen beziehen sich auf die fundamentalen reellen Typen.

Real48 wird nur aus Gründen der Abwärtskompatibilität verwendet. Da das Speicherformat dieses Typs kein natives Format der Intel-Prozessorarchitektur ist, laufen die entsprechenden Operationen langsamer ab als mit anderen Gleitkommatypen.
Der Typ Extended bietet eine höhere Genauigkeit, ist aber nicht so einfach portierbar wie die anderen reellen Typen. Verwenden Sie Extended mit Bedacht, wenn Sie Datendateien anlegen, die gemeinsam und plattformübergreifend genutzt werden sollen.

Deshalb nehme ich Double, damit Irrtümer ausgeschlossen werden ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:41 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