Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Array vom Inhalt einer Listbox (https://www.delphipraxis.net/95751-array-vom-inhalt-einer-listbox.html)

marabu 12. Jul 2007 17:04

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:
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;
Grüße vom marabu

Testy 12. Jul 2007 17:06

Re: Array vom Inhalt einer Listbox
 
Ich habe es jetzt so:

Delphi-Quellcode:
  zeiten:array[1..300] of TDateTime;
Delphi-Quellcode:
for i:=1 to listbox2.Count-1 do
begin
zeiten[i]:=strtotime(listbox2.Items[i-1]);
end;
Uns so geht es auch!

Zitat:

2. Hat die Listbox auch 100 einträge?
Das ist noch das Problem! Weil die Listbox immer eine andere Anzahl von Einträgen hat! Habe mal was von variablen Arrays gehört. Wie kann ich das machen, wenn ich dir Größe nicht vorher weiss.
Danke für die Mühe!!!!

Gruß!

DeddyH 12. Jul 2007 17:24

Re: Array vom Inhalt einer Listbox
 
Siehe #11 :-D (marabu war schneller)

Testy 12. Jul 2007 17:41

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ß!

DeddyH 12. Jul 2007 17:48

Re: Array vom Inhalt einer Listbox
 
Die Größe legst Du mit SetLength() fest. Ansonsten sag doch mal, was Du nicht verstehst.

Testy 12. Jul 2007 17:52

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:
  dda := StrToTimeArray(RichEdit.Lines);
  total := Math.Sum(Copy(dda, 0, 3));
Was wird da zusammen addiert?

Kann ich das nicht einfach dann so machen:
Delphi-Quellcode:
SetLength(listbox1.count-1)
????

Gruß!

DeddyH 12. Jul 2007 17:59

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.

marabu 12. Jul 2007 18:02

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

DeddyH 12. Jul 2007 18:06

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:

Testy 12. Jul 2007 18:09

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:
DynArray[i] := StrToTime(ListBox2.Items[i]);
Gruß!


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:48 Uhr.
Seite 2 von 4     12 34      

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