Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TObjektList (https://www.delphipraxis.net/32276-tobjektlist.html)

valon 21. Okt 2004 10:09


TObjektList
 
Hallo!

Ich möchte in einem Objekt der Klasse TObjektList mehrere Objekte einfügen.

Die zu einfügende Objekte sind von der Klasse:
Delphi-Quellcode:
TOpenDialogEntity=class(TObject)
  private
    //******
    FFilename: String;
  public
   //**********

 property Filename: String read FFilename write FFilename;
  end;
Ich möchte jetzt jeden Eintrag einer ListBox in ein Objekt der Klasse TOpenDialogEntity zb. in sein TOpenDialogEntity.Filename einfügen,
und dieses Objekt dann in einem TObjektList Objekt verwalten.
das heisst: am ende soll jeder Eintrag der ListBox als Objekt in einer ObjektListe eingetragen sein.

Wie gehe ich da am besten vor?

mirage228 21. Okt 2004 10:17

Re: TObjektList
 
Hi,

das eintragen kannst Du so lösen:

Delphi-Quellcode:
uses
  Contnrs;

// Du kannst diese Prozedur so oft aufrufen, wie Du willst ;)
procedure SpeichernOderSo;
var
  i: integer;
  Item: TOpenDialogEntity;
begin
  if Assigned(ObjectList) then
    FreeAndNil(ObjectList);
  ObjList := TObjectList.Create;
  for i := 0 to ListBox.Count-1 do
  begin
    Item := TOpenDialogEntity.Create;
    Item.FileName := ListBox.Items[i];
    ObjList.Add(Item);
  end;
end;

// abruf dann so z.B.
var
  Item: TOpenDialogEntity;
begin
  Item := TOpenDialogEntity(ObjList[0]);
end;
Ich hoffe das hilft Dir weiter :)

mfG
mirage228

valon 21. Okt 2004 10:21

Re: TObjektList
 
Danke für deine Antwort!

Ich werde es gleich mal testen.

Ich melde mich sicherlich nochmal :hi:

valon 21. Okt 2004 10:50

Re: TObjektList
 
Hi , ich nochmal!

Ich will alle Selektierten Einträge der ListBox einfügen.
Delphi-Quellcode:
procedure Speichern;
var
  i: integer;
  Item: TOpenDialogEntity;
begin
  if Assigned(ObjectList) then
    FreeAndNil(ObjectList);

  ObjectList := TObjectList.Create;
  for i := 0 to ListBox1.Count-1 do
  begin
    if ListBox1.Selected[i]=True then
    begin
      Item := TOpenDialogEntity.Create;
      Item.FileName := ListBox1.Items[i];
      ObjectList.Add(Item);
    end;
  end;
end;
Kann das den überhaupt funktionieren? Den Ich übergebe der ObjektListe doch einen Zeiger auf Item.Aber da es ja eine Funktion ist und Item: TOpenDialogEntity; eine lokale Variable ist wird sie beim verlassen der Funktion vom Speicher gelöscht.
Das heisst die ObjektListe zeigt auf leeren Speicher. Oder irre ich mich da?

mirage228 21. Okt 2004 10:55

Re: TObjektList
 
Hi,

soweit ich weiss werden nur Datentypen wie Integers entfernt, falls die Prozedur verlassen wird. Der für das Objekt assoziierte Speicher muss explizit mit .Free() (bzw. dem TObjectList.Free(), falss OwnsObjects = True) freigegeben werden.

mfG
mirage228

valon 21. Okt 2004 11:05

Re: TObjektList
 
Kann ich es eigentlich so machen, wie ich es oben geändert habe um die selektierten EInträge einzufügen.

[delphi]
for i := 0 to ListBox1.Count-1 do
begin
if ListBox1.Selected[i]=True then
begin

{wenn ich mehrere selktierte Einträge habe wird doch für jeden Schleifendurchlauf Item neu created.Geht das?
Ich kann doch Item nur 1mal createn. Ausser ich lösche es jedes mal danach wenn ich die Funktion verlasse, aber dann ist
sie ja wieder aus der ObjektList weg,oder?} :gruebel:



Item := TOpenDialogEntity.Create;
Item.FileName := ListBox1.Items[i];
ObjectList.Add(Item);
end;

mirage228 21. Okt 2004 11:40

Re: TObjektList
 
Es wird ein neues Item erzeugt, richtig. Jedoch ist das alte Item ja noch im Speicher erhalten (da es ja explizit freigegeben werden muss). Item zeigt aber nun nicht mehr auf dieses, sondern auf das nun mit Create erstellte Item. Die ObjectList zeigt noch auf das alte "Item".
Daher sind alle korrekt in der ObjektListe drin.

mfG
mirage228

valon 21. Okt 2004 11:58

Re: TObjektList
 
Danke!
Jetzt ist es mir klargeworden!

Danke für deine Hilfe.

mirage228 21. Okt 2004 12:12

Re: TObjektList
 
Zitat:

Zitat von valon
Danke!
Jetzt ist es mir klargeworden!

Danke für deine Hilfe.

Gerngeschehen :)

mfG
mirage228

valon 21. Okt 2004 12:36

Re: TObjektList
 
Sorry nochmal. Ich verstehe das unten markierte nicht.

Delphi-Quellcode:
// Du kannst diese Prozedur so oft aufrufen, wie Du willst ;)


// abruf dann so z.B.
var
  Item: TOpenDialogEntity;
begin
  Item := TOpenDialogEntity(ObjList[0]);[color=red]//???????????????????????????
end;
Wie kann ich jetzt auf die Einträge der objectListe zugreifen. Wenn ich zb. Filenamen des ersten Eintrags ermitteln möchte.

Das war die letzte Frage für heute ! :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:55 Uhr.
Seite 1 von 2  1 2      

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