![]() |
TObjectList als Result
Habe ein kleines Programm geschrieben das eine TObjectList als REsult nehmen soll nur jedes mal wenn ich den Button drücke hat er mir fehler raus das er auf bestimmte speicher nicht zugreifen kann oder das da was nicht stimmt.
bitte um hilfe
Delphi-Quellcode:
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Contnrs, JPeg; type TForm1 = class(TForm) Image1: TImage; Image2: TImage; Image3: TImage; Image4: TImage; Image5: TImage; Image6: TImage; Image7: TImage; Allrounder : TImage; Button1: TButton; procedure Button1Click(Sender: TObject); function imageloader : TObjectList; private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} function TForm1.imageloader: TObjectList; begin Result.Create; Result.Add(Image1); Result.Add(Image2); Result.Add(Image3); Result.Add(Image4); Result.Add(Image5); Result.Add(Image6); Result.Add(Image7); end; procedure TForm1.Button1Click(Sender: TObject); var MyList: TObjectlist; counter : integer; begin Mylist := ImageLoader; Allrounder := TImage(Imageloader.Items[5]); Allrounder.Picture.LoadFromFile('Unbenannt.jpg'); end; end. |
AW: TObjectList als Result
Zitat:
Delphi-Quellcode:
Hatten wir das nicht erst letzte Woche? Übrigens sollte man im Allgemeinen keine Objektinstanzen aus Funktionen zurückgeben, die innerhalb derer erst angelegt werden. Wo wird die Liste samt der enthaltenen Objekte denn wieder freigegeben?
Result := TObjectList.Create;
|
AW: TObjectList als Result
Wieso nicht?
Delphi-Quellcode:
NeueListe := FunktionIrgendwas();
try finally NeueListe.Free; end; |
AW: TObjectList als Result
Und wenn Du Dir das nach 6 Monaten noch einmal anschaust, wunderst Du Dich, dass da eine Freigabe erfolgt, ohne dass vorher ein Konstruktoraufruf ersichtlich ist, denn der steht ja woanders, womöglich noch in einer ganz anderen Unit.
|
AW: TObjectList als Result
Wenn man der Funktion einen aussagekräftigen Namen gibt anhand dem ersichtlich ist, dass das Objekt darin erstellt wird sehe ich da kein Problem. Aber ich denke das ist Geschmackssache.
|
AW: TObjectList als Result
Hier habe ich mich mal mit dem Thema beschäftigt:
![]() |
AW: TObjectList als Result
Da hier die Referenzen nicht in der Liste verwaltet werden, verwende ich bei sowas gern dynamische Arrays als Result.
|
AW: TObjectList als Result
![]() Klar gehen die erst ab Delphi 2010 aber es dürfte ja ein leichtes sein, sich ne schlanke TInterfacedObjectList mit entsprechendem Interface zu bauen, wenn man mit nem älteren Delphi hantiert. |
AW: TObjectList als Result
Früher gab es IInterfaceList bzw. IInterfaceListEx in der Classes-Unit.
|
AW: TObjectList als Result
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:01 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 by Thomas Breitkreuz