Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   ListBox füllen (https://www.delphipraxis.net/181171-listbox-fuellen.html)

geosucher 21. Jul 2014 20:53

ListBox füllen
 
Hallo zusammen,

habe ein - sicher ganz blödes - Problem, programmiere mit Delphi XE5 FireMonkey für Android (Samsung Galaxy Tab).
Ich möchte eine ListBox füllen mit folgendem Code:

Delphi-Quellcode:
var FI     : array of TFileInfo;
    CountFI : Integer;

procedure TTabbedForm.LB_DatenSendenClick(Sender: TObject);
var i  : Integer;
    anh : String;
begin
 TabControl1.ActiveTab:=DateiTab;
 for I := 0 to CountFI-1 do
  begin
   if FI[i].Datum<>'' then
    anh:=FI[i].FileName+' * '+FI[i].Datum;
   if FI[i].Zeit<>'' then
    anh:=anh+' '+FI[i].Zeit;
   ListBox2.Items.Add(anh);
  end;
end;
CountFI ist im Beispiel gleich 2. Das Array ist entsprechend gefüllt. In der App habe ich dann nur einen Eintrag.
Im Debug zeigt er auch nur die Schleife für den Wert 1 an....???

Hat jemand eine Idee?

Gruß

Geosucher

mkinzler 21. Jul 2014 21:07

AW: ListBox füllen
 
Nur 1 oder nur 0?

Ich würde

Delphi-Quellcode:
for I := low(FI) to high(FI) do
verwenden.

himitsu 21. Jul 2014 21:23

AW: ListBox füllen
 
Wenn CountFI wirklich 2 ist, dann läuft der Code definitiv zwei Mal durch den code und fügt somit auch zwei einträge zu der ComboCox.


PS: Rate mal was passiert, wenn im zweiten oder x-ten Durchlauf mal das Datum = '' ist, also vorallem mit dem Inhalt von anh. :stupid:
Oder was passiert, wenn im Zweiten und nachfolgenden Durchläufen Datum und Zeit leer sind ... was kommt dann wohl für ein Inhalt bei der ComboBox an?


Zitat:

Delphi-Quellcode:
high(FI)

Schlag ihm doch nicht sowas vor. :lol:
Er will ja scheinbar die Länge unbedingt extra speichern und nicht die Größe direkt aus dem Array auslesen. :roll:

Man könnte natürlich auch noch fragen warum diese Variablen eigentlich global sind und ob eine (Objekt)Liste nicht schöner wäre.
Und warum die Varialbe anh nicht ordentlich initialisiert wird. (schade daß in Delphi, bei Strings, die entsprechende Compilerwarnung nicht funktioniert)

geosucher 22. Jul 2014 19:30

AW: ListBox füllen
 
Hallo,

danke für Eure Antworten. Ich habe das ganze mal umgebaut:

Delphi-Quellcode:
procedure TTabbedForm.LB_DatenSendenClick(Sender: TObject);
var I      : Integer;
    FF     : array of TFileInfo;
begin
 SetLength(FF,5);
 FF[0].FileName:='a.kml';
 FF[1].FileName:='b.kml';
 FF[2].FileName:='c.kml';
 FF[3].FileName:='d.kml';
 FF[4].FileName:='e.kml';
 for I := Low(FF) to High(FF) do
  ListBox2.Items.Add(FF[i].FileName);
end;
Bringt mich nicht wirklich weiter, in der Listbox werden Einträge a.kml - d.kml angezeigt....

Gruß

Geosucher

himitsu 22. Jul 2014 19:54

AW: ListBox füllen
 
In anderen Systemen (Mac, Windows, iOS, iOS-Simulator, ...) wird alles angezeigt?
Und nur nochmal zur Sicherheit nachgefragt: Im Debugger oder anders geloggt/nachgesehn (MessageBox?) hast du bereits, ob wirklich die Schleife 2, bzw. 5 Mal durchlaufen wird?
Alle Updates sind installiert?

Es kann natürlich auch ein Bug sein und wenn, dann solltest du Diesen im QC melden.
(bzw. das Bugfix XE6/XE7 kaufen, wobei soein Fehler schon als gravierend genug sein sollte, daß es hierfür schnell einen Hotfix geben könnte)
Als schnellen Bugfix könntest du z.B. einfach einen Dummy-Eintrag an die Liste anhängen. :stupid:
Delphi-Quellcode:
procedure TTabbedForm.LB_DatenSendenClick(Sender: TObject);
var I : Integer;
    FF : array of TFileInfo;
begin
  SetLength(FF,5);
  FF[0].FileName:='a.kml';
  FF[1].FileName:='b.kml';
  FF[2].FileName:='c.kml';
  FF[3].FileName:='d.kml';
  FF[4].FileName:='e.kml';
  for I := Low(FF) to High(FF) do
    ListBox2.Items.Add(FF[i].FileName);
  ListBox2.Items.Add('');
end;

geosucher 22. Jul 2014 20:30

AW: ListBox füllen
 
Hallo himitsu,

ich habe bisher nur die VCL-Variante getestet und die funktioniert glücklicherweise.
Ich habe RADStudio XE5 Update 2 installiert. Danach sollten noch 6 Hotfixes sein, muss ich noch
checken, ob da alles stimmt.
Die Idee mit dem dummy ist für das Erste eine Variante...

Danke!

Geosucher

mkinzler 23. Jul 2014 08:16

AW: ListBox füllen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Mit Delphi XE6 (Emulator) funktioniert es. (Habe kein XE5 mehr installiert)

Harry Stahl 23. Jul 2014 20:08

AW: ListBox füllen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also unter XE5, Update 2 funktioniert der Code:

Delphi-Quellcode:
unit Unit55;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
  FMX.Layouts, FMX.ListBox;

type
  TForm55 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form55: TForm55;

implementation

{$R *.fmx}

type
  TFileInfo = record
    FileName: string;
    Info: string;
  end;

procedure TForm55.Button1Click(Sender: TObject);
var I : Integer;
  FF : array of TFileInfo;
begin
  SetLength(FF,5);
  FF[0].FileName:='a.kml';
  FF[1].FileName:='b.kml';
  FF[2].FileName:='c.kml';
  FF[3].FileName:='d.kml';
  FF[4].FileName:='e.kml';
  for I := Low(FF) to High(FF) do
    ListBox1.Items.add(FF[i].FileName);
end;

end.
wie er soll, siehe anliegenden Screenshot vom Samsung-Device.

geosucher 25. Jul 2014 09:01

AW: ListBox füllen
 
Ok, sorry mein Fehler! Ich habe auf der Listbox einen Button (align: alBottom). Der lag quasi über dem letzten Eintrag.
Liegt der Button nicht auf der Lsitbox ist alles ok. Sorry, hoffe ich habe nicht zu viel Arbeit gemacht....

Danke!

Geosucher


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