![]() |
Array vom Inhalt einer Listbox
Hallo an Alle!
Ich habe eine gefüllte Listbox (im Zahlenformat TDateTime z.B. "00:13:34"). Nun möchte ich den Inhalt der Listbox in ein Array einlesen lassen. Aber ich habe keine Ahnung welchen Datentyp ich dafür nehmen soll?!
Delphi-Quellcode:
So geht's wohl anscheinend nicht!
time:array[1..100] of TDateTime;
Und meine zweite Frage ist, wenn ich das Array mit den Daten habe, dann soll er mir in einer Schleife z.B. die ersten 30 Einträge zusammen addieren! Danke im voraus! Gruß! |
Re: Array vom Inhalt einer Listbox
Grundsätzlich schon, man darf halt nur keine reservierten Wörter (time) verwenden:
Delphi-Quellcode:
zeiten:array[1..100] of TDateTime;
|
Re: Array vom Inhalt einer Listbox
Wenn ich dann aber das Array füllen möchte mit:
Delphi-Quellcode:
Dann kommt immer der Fehler: Inkompatible Typen: 'TDateTime' und 'String'
for i:=1 to listbox1.Count-1 do
begin zeiten[i]:=memo1.Lines[i]; end; Gruß! |
Re: Array vom Inhalt einer Listbox
|
Re: Array vom Inhalt einer Listbox
Sorry, hatte einen Fehler. Ich meinte natürlich nicht das Memo sondern:
Delphi-Quellcode:
Jetzt gehts erst einmal von der Syntax. Aber nun schreibt er: Listenindex überschreitet das Maximum (59)!
for i:=1 to listbox1.Count-1 do
begin zeiten[i]:=strtoTime(listbox2.Items[i]); end; "zeiten" ist meine globale Variable
Delphi-Quellcode:
zeiten:array[1..200] of TDateTime;
Gruß! |
Re: Array vom Inhalt einer Listbox
Hat sich erledigt. Habe den Fehler selber gefunden!
Habe jetzt nur noch die Frage, wie kann ich z.B. die ersten 30 Einträge in dem Array zusammen addieren kann! Möglichst mit einer Schleife! |
Re: Array vom Inhalt einer Listbox
Anmerkung: Das erste Item der Listbox hat den Index 0, so übergehst du immer das erste Item!
Zu deinem Fehler:
Delphi-Quellcode:
Edit: Habs abgesendet wegen dem Tipp
for i:=1 to listbox1.Count-1 do //Listbox 1
begin zeiten[i]:=strtoTime(listbox2.Items[i]); //Listbox 2 end;
Delphi-Quellcode:
for i := 1 to 30 do
myDoubleVariable := myDoubleVariable+Zeiten[i] |
Re: Array vom Inhalt einer Listbox
Irgendwie funtkioniert es noch nicht so!
Ich habe jetzt:
Delphi-Quellcode:
Wenn ich das Array auslese kommt nur unsinniges bei raus!
for i:=0 to listbox2.Count-1 do
begin zeiten[i]:=strtoTime(listbox2.Items[i]); end; Gruß! |
Re: Array vom Inhalt einer Listbox
1. Wenn du Zeiten
Delphi-Quellcode:
deklarierst dann solltest du auch auf 1+ zugreifen. Du greifst aber ab 0 drauf zu
[1..100]
2. Hat die Listbox auch 100 einträge? |
Re: Array vom Inhalt einer Listbox
Hallo Testy,
Du muss die Deklaration vom Array ändern, oder die For-Schleife :
Delphi-Quellcode:
oder das einlesen ändern:
time:array[0..99] of TDateTime; // nicht [1..100]
Delphi-Quellcode:
Bis bald Chemiker
for i:=0 to listbox2.Count-1 do
begin zeiten[i+1]:=strtoTime(listbox2.Items[i]); // nicht zeiten[i] = 0 end; |
Re: Array vom Inhalt einer Listbox
Hallo,
die Einträge einer ListBox sind zahlenmäßig nicht festgelegt. Wenn dann ein Array als Speicherstruktur herhalten soll, dann ist da ein dynamisches Array sehr vorteilhaft:
Delphi-Quellcode:
Grüße vom marabu
function StrToTimeArray(s: TStrings): TDoubleDynArray;
var index: Integer; begin SetLength(Result, s.Count); for index := Low(Result) to High(Result) do Result[index] := StrToTime(s[index]); end; procedure TDemoForm.ButtonClick(Sender: TObject); var dda: TDoubleDynArray; total: Double; begin dda := StrToTimeArray(RichEdit.Lines); total := Math.Sum(Copy(dda, 0, 3)); ShowMessage(TimeToStr(total)); end; |
Re: Array vom Inhalt einer Listbox
Ich habe es jetzt so:
Delphi-Quellcode:
zeiten:array[1..300] of TDateTime;
Delphi-Quellcode:
Uns so geht es auch!
for i:=1 to listbox2.Count-1 do
begin zeiten[i]:=strtotime(listbox2.Items[i-1]); end; Zitat:
Danke für die Mühe!!!! Gruß! |
Re: Array vom Inhalt einer Listbox
Siehe #11 :-D (marabu war schneller)
|
Re: Array vom Inhalt einer Listbox
Wie funktioniert das von marabu!? Kann dort mit vielen Befehlen nicht viel anfangen!
Gibt es nichts einfacheres? Wo man z.B. die obere Grenze eines Arrays mit listbox1.count-1 festlegen kann. Gruß! |
Re: Array vom Inhalt einer Listbox
Die Größe legst Du mit SetLength() fest. Ansonsten sag doch mal, was Du nicht verstehst.
|
Re: Array vom Inhalt einer Listbox
Ich verstehe nicht was die Function macht! Wo liest sie die Daten aus der Listbox ein?
Und in der Procedure:
Delphi-Quellcode:
Was wird da zusammen addiert?
dda := StrToTimeArray(RichEdit.Lines);
total := Math.Sum(Copy(dda, 0, 3)); Kann ich das nicht einfach dann so machen:
Delphi-Quellcode:
????
SetLength(listbox1.count-1)
Gruß! |
Re: Array vom Inhalt einer Listbox
Ich habe Dir mal ein sinnfreies Beispiel erstellt:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type //Dynamisches Array als Datentyp definieren TDynArray = array of TDateTime; TForm1 = class(TForm) ListBox1: TListBox; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } //Als Objektvariable definieren DynArray: TDynArray; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var i: integer; begin //Benötigte Größe setzen SetLength(DynArray,ListBox1.Items.Count); //Array füllen for i := 0 to ListBox1.Items.Count - 1 do DynArray[i] := StrToTime(ListBox1.Items[i]); end; end. |
Re: Array vom Inhalt einer Listbox
Hallo,
RichEdit.Lines hat den gleichen Typ wie ListBox.Items - man kann die beiden also austauschen. Freundliche Grüße |
Re: Array vom Inhalt einer Listbox
Hi marabu,
falls Du mich damit meinst: das ist mir schon bekannt, aber ich wollte es für den Fragesteller etwas einfacher machen. :wink: |
Re: Array vom Inhalt einer Listbox
Habe einen Fehler: "Im Projekt ist eine Exception der Klasse EAccesViolation aufgetreten. Meldung: Zugriffsverletzung bei Adresse...."
Und markiert wird dann anschließend diese Zeile hier:
Delphi-Quellcode:
Gruß!
DynArray[i] := StrToTime(ListBox2.Items[i]);
|
Re: Array vom Inhalt einer Listbox
Versteh ich nicht. Welche Delphi-Version hast Du denn?
|
Re: Array vom Inhalt einer Listbox
Welchen Wert hat den dann i?
|
Re: Array vom Inhalt einer Listbox
Hast Du evtl. bei SetLength ListBox1 stehen?
|
Re: Array vom Inhalt einer Listbox
Soooo, nun geht's! Ich hatte die Objektvariable nicht im PrivateTeil drin stehen! Nochmals vielen Dank!
Habe nun eine Schleife in der ich den Inhalt zusammen zähle:
Delphi-Quellcode:
Warum muss ich eigentlich unten nochmal i-1 schreiben? Ansonsten kommt ein falsches Ergebnis raus!
for i:=1 to zaehler do
begin gesamtzeit:=gesamtzeit+DynArray[i-1]; Trotzdem, nochmal vielen Dank! Gruß! |
Re: Array vom Inhalt einer Listbox
Ein dynamisches Array beginnt immer mit dem Index 0 und endet mit dem Index Anzahl_der_Elemente - 1.
|
Re: Array vom Inhalt einer Listbox
Ja schon klar, aber wieso geht das denn nicht:
Delphi-Quellcode:
Kommt jedenfalls ein falsches Ergebnis raus!
for i:=0 to zaehler do
begin gesamtzeit:=gesamtzeit+DynArray[i]; |
Re: Array vom Inhalt einer Listbox
Welcher Wert steht denn in Zaehler?
|
Re: Array vom Inhalt einer Listbox
Im Moment steht er auf 40! Also es werden 40 Zeiten aus meiner Listbox in das Array geschrieben und dann zusammen addiert!
|
Re: Array vom Inhalt einer Listbox
Dann ist das klar. Ich habe doch eben gesagt: das erste Element des Arrays hat Index 0 und das Letzte Index Anzahl - 1, Du liest also über das Array-Ende hinaus. Erstaunlich, dass das keine AV gab.
|
Re: Array vom Inhalt einer Listbox
Ahhh, Danke, jetzt habe ich es auch verstanden! Wie rum ist es denn nun besser, oder ist es egal!
Delphi-Quellcode:
Oder:
for i:=1 to zaehler do
begin gesamtzeit:=gesamtzeit+DynArray[i-1];
Delphi-Quellcode:
Beides führt zum richtigen Ergebnis!
for i:=0 to zaehler-1 do
begin gesamtzeit:=gesamtzeit+DynArray[i]; |
Re: Array vom Inhalt einer Listbox
Am Besten wäre es so, wie marabu bereits geschrieben hatte, dann sind Indexfehler ausgeschlossen:
Delphi-Quellcode:
Schau mal die beiden Funktionen High und Low in der Hilfe nach.
for i := Low(DynArray) to High(DynArray) do
gesamtzeit := gesamtzeit + DynArray[i]; |
Re: Array vom Inhalt einer Listbox
:shock: Habe mir deins und marabu's nochmal angeschaut. Aber wie definier ich nun low und high für mein Beispiel?
|
Re: Array vom Inhalt einer Listbox
So wie DeddyH geschrieben hat ;-)
|
Re: Array vom Inhalt einer Listbox
Zitat:
|
Re: Array vom Inhalt einer Listbox
Lass dir mal Low( DynArray) und High( DyArray) anzeigen
|
Re: Array vom Inhalt einer Listbox
Zitat:
High( DyArray) = 59 |
Re: Array vom Inhalt einer Listbox
Dann wundert es mich wirklich das 0 rauskonmmt :gruebel:
|
Re: Array vom Inhalt einer Listbox
Jetzt habe ich es hinbekommen! Hatte noch einen Fehler drin! Mein Array war immer so groß wie die Listbox, es sollte aber nur so groß wie mein Zähler sein! Nun geht es mit low und high!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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 by Thomas Breitkreuz