AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TObjektList

Ein Thema von valon · begonnen am 21. Okt 2004 · letzter Beitrag vom 21. Okt 2004
Antwort Antwort
Seite 1 von 2  1 2      
valon

Registriert seit: 27. Sep 2004
86 Beiträge
 
#1

TObjektList

  Alt 21. Okt 2004, 11:09
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?
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

Re: TObjektList

  Alt 21. Okt 2004, 11:17
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
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
valon

Registriert seit: 27. Sep 2004
86 Beiträge
 
#3

Re: TObjektList

  Alt 21. Okt 2004, 11:21
Danke für deine Antwort!

Ich werde es gleich mal testen.

Ich melde mich sicherlich nochmal
  Mit Zitat antworten Zitat
valon

Registriert seit: 27. Sep 2004
86 Beiträge
 
#4

Re: TObjektList

  Alt 21. Okt 2004, 11:50
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?
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#5

Re: TObjektList

  Alt 21. Okt 2004, 11:55
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
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
valon

Registriert seit: 27. Sep 2004
86 Beiträge
 
#6

Re: TObjektList

  Alt 21. Okt 2004, 12:05
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?}



Item := TOpenDialogEntity.Create;
Item.FileName := ListBox1.Items[i];
ObjectList.Add(Item);
end;
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#7

Re: TObjektList

  Alt 21. Okt 2004, 12:40
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
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
valon

Registriert seit: 27. Sep 2004
86 Beiträge
 
#8

Re: TObjektList

  Alt 21. Okt 2004, 12:58
Danke!
Jetzt ist es mir klargeworden!

Danke für deine Hilfe.
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#9

Re: TObjektList

  Alt 21. Okt 2004, 13:12
Zitat von valon:
Danke!
Jetzt ist es mir klargeworden!

Danke für deine Hilfe.
Gerngeschehen

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
valon

Registriert seit: 27. Sep 2004
86 Beiträge
 
#10

Re: TObjektList

  Alt 21. Okt 2004, 13:36
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 !
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:29 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