![]() |
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:
Ich möchte jetzt jeden Eintrag einer ListBox in ein Objekt der Klasse TOpenDialogEntity zb. in sein TOpenDialogEntity.Filename einfügen,
TOpenDialogEntity=class(TObject)
private //****** FFilename: String; public //********** property Filename: String read FFilename write FFilename; end; 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? |
Re: TObjektList
Hi,
das eintragen kannst Du so lösen:
Delphi-Quellcode:
Ich hoffe das hilft Dir weiter :)
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; mfG mirage228 |
Re: TObjektList
Danke für deine Antwort!
Ich werde es gleich mal testen. Ich melde mich sicherlich nochmal :hi: |
Re: TObjektList
Hi , ich nochmal!
Ich will alle Selektierten Einträge der ListBox einfügen.
Delphi-Quellcode:
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.
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; Das heisst die ObjektListe zeigt auf leeren Speicher. Oder irre ich mich da? |
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 |
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; |
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 |
Re: TObjektList
Danke!
Jetzt ist es mir klargeworden! Danke für deine Hilfe. |
Re: TObjektList
Zitat:
mfG mirage228 |
Re: TObjektList
Sorry nochmal. Ich verstehe das unten markierte nicht.
Delphi-Quellcode:
Wie kann ich jetzt auf die Einträge der objectListe zugreifen. Wenn ich zb. Filenamen des ersten Eintrags ermitteln möchte.
// 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; Das war die letzte Frage für heute ! :wink: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:13 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-2025 by Thomas Breitkreuz