Einzelnen Beitrag anzeigen

Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#7

Re: Allgemeine Frage zu Zuweisungen von Instanzen

  Alt 14. Jun 2007, 15:13
Eine Gegenfrage...warum willst du die Liste außerhalb der Componente erzeugen, wenn sie eh nur von der Componente benutzt wird ?

Das mit dem direkten Zuweisen der Zeiger funktioniert deshalb nicht, weil es eben Objekt sind und die nicht nur Daten enthalten. Hinzu kommt, das deine Liste in der Komponente eine Property ist, d.h. da spielt dann noch das Streaming-System für VCL-Komponenten mit rein (wichtig um das z.B. in DFM-Dateien zu speichern) sowie die RTTI.

Ich gehe mal davon aus das du später diese Liste im Objektinspektor editieren willst, dir aber ggf. mehrfach laden bei mehreren XEdit's sparen möchtest. Dann hier mal ein Beispiel wie es funktioniert:


Die Componente (also..der entscheidende Teil davon):

Delphi-Quellcode:
   TXEdit = class(TEdit)
   PRIVATE
      fsearchlist:TStrings;
   PUBLIC
      Constructor Create(AOwner:TComponent);
      Destructor Destroy;Override;
   PUBLISHED
       property Searchlist : TStrings read fsearchlist write fsearchlist;
   END;

   IMPLEMENTATION

   Constructor TXEdit.Create(AOwner:Tcomponent);
   begin
     inherited create(AOwner);
     fsearchlist := TStringlist.create;
   end;
   
   Destructor TXEdit.Destroy;
   begin
    fsearchlist.free;
    inherited;
   end;
Get und Set-Methoden sind nicht unbedingt notwendig, das die Liste beim erzeugen der Komponente gleich mit erzeugt wird und beim zerstören der Komponente freigegeben wird. Das ist wichtig, damit die Liste später auch in der DFM-Datei landet.

Nun zum Programm, das gerne eine Liste an mehrere XEdits verteilen will:

Delphi-Quellcode:
    Procedure TForm1.Button1Click(Sender:TObject);
    var
     iList : TStrings;
    begin
      iList := TStringlist.create;
      iList.loadfromfile('C:\Searchlist.txt');
      XEdit1.Searchlist.assign(iList);
      XEdit2.Searchlist.assign(iList);
      XEdit3.Searchlist.assign(ilist);
      ilist.free;
    end;
Feddich..alle 3 Edits enthalten nun ein kopie der daten aus ilist.

Hoffe das hilft.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat