Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   Mehrere TImages mit einer Procedure erstellen (https://www.delphipraxis.net/190432-mehrere-timages-mit-einer-procedure-erstellen.html)

Jim Carrey 10. Okt 2016 16:12

AW: Mehrere TImages mit einer Procedure erstellen
 
Zitat:

Zitat von Benni0811 (Beitrag 1350392)
Wie kombiniere ich das jetzt mit der TObjectlist?

Also ohne Generics (ja, haut mich), müsstest du jetzt eine TObjectList irgendwo erstellen und sie füllen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
 MeineObjectList: TObjectList;
 Test: TBild;
begin
 MeineObjectList := TObjectList.Create;

 Key := 'Feld'+IntToStr(Feldx)+','+IntToStr(Feldy);
 Test := TBild.Create;
 Test.FImageName:=Key;
 Test.FImageHeight:=Feldsize;
 Test.FImageWidth:=Feldsize;
 Imagelist1.GetBitmap(0,Test.FImageContent);

 MeineObjectList.Add(Test);

 // Irgendwo musst du dann auch die ObjectListe wieder freigeben.
end;
Ich habe das jetzt nicht getestet aber das müsste doch eigentlich so funktionieren, oder?

haentschman 10. Okt 2016 17:18

AW: Mehrere TImages mit einer Procedure erstellen
 
Moin...:P
Zitat:

Ich habe den Crashkurs jetzt gelesen und außerdem der Klasse die Eigenschaften ImageTop und ImageLeft hinzugefügt:
:thumb: Ein Schritt nach dem Anderen...

Zitat:

Also ohne Generics (ja, haut mich)
...:zwinker: knapp daneben. Warum sollte er nicht die neuen Möglichkeiten nutzen? :P

Delphi-Quellcode:
TForm1 = class(TForm) // bestehend
.
.
private
  MeineObjectList := TObjectList<TBild>; // die Instanz der Liste
public
  constructor Create;
  destructor Destroy; override;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 //MeineObjectList: TObjectList;
 Test: TBild;
begin
 // MeineObjectList := TObjectList<TBild>.Create(True);
 // -> Generics, das True bedeutet das die Listeneinträge von der Liste verwaltet werden (Freigabe)
 // -> Verlagern in den constructor
 Key := 'Feld'+IntToStr(Feldx)+','+IntToStr(Feldy);
 Test := TBild.Create;
 Test.FImageName:=Key;
 Test.FImageHeight:=Feldsize;
 Test.FImageWidth:=Feldsize;
 Imagelist1.GetBitmap(0,Test.FImageContent);

 MeineObjectList.Add(Test);

 // Irgendwo musst du dann auch die ObjectListe wieder freigeben.
end;
... und dann greifst du auf die Liste zu um mit dem Bild (TBild) zu arbeiten...
Delphi-Quellcode:
var
  DasBild: TBild;
begin
  DasBild := MeineObjectList[DeinGewünschterIntex]; // durch die Generics kannst das Object direkt ohne Casten benutzen
end;
... die Listen haben noch weitere Funktionen um auf das Bild zuzugreifen.
http://docwiki.embarcadero.com/Libra...ns.TObjectList
http://docwiki.embarcadero.com/Libra...ctList_Methods

...Freigabe der "MeineObjectList"
Delphi-Quellcode:
constructor Create;
begin
  MeineObjectList := TObjectList<TBild>.Create(True);
end;

destructor Destroy;
begin
  MeineObjectList.Free;
  inherited;
end;

himitsu 10. Okt 2016 17:30

AW: Mehrere TImages mit einer Procedure erstellen
 
Man kann statt der
Delphi-Quellcode:
TObjektList
/
Delphi-Quellcode:
TObjektList<TBild>
auch ein
Delphi-Quellcode:
TObjectDictionary<string,TBild>
verwenden, denn da kann man dann auch noch schöner auf ein bestimmtes Bild zugreifen.

Also statt über den Index, welchen man vorher noch suchen müsste, direkt über den Namen.
Delphi-Quellcode:
//MeineObjectList.Add(Test);
MeineObjectList.Add(Key, Test); // oder MeineObjectList.Add(Test.ImageName, Test);

DasBild := MeineObjectList['DerBildName'];
Oder statt dem Namen direkt die Koordinaten
Delphi-Quellcode:
var MeineObjectList: TObjectDictionary<TPoint,TBild>;

MeineObjectList.Add(Point(FeldY, FeldY), Test);

DasBild := MeineObjectList[Point(HoleY, HoleY)];

Blup 11. Okt 2016 10:30

AW: Mehrere TImages mit einer Procedure erstellen
 
Konstruktoren und Destruktoren sollte man in der Regel überschreiben, nicht neu definieren.
Sonst werden diese nicht aufgerufen.
Dabei auch den richtigen Konstruktor überschreiben und das inherited nicht vergessen.
Delphi-Quellcode:
TForm1 = class(TForm) // bestehend
.
.
private
  MeineObjectList := TObjectList<TBild>; // die Instanz der Liste
public
  constructor Create(AOwner: TComponent); override;
  destructor Destroy; override;
end;

constructor Create(AOwner: TComponent);
begin
  inherited;
  MeineObjectList := TObjectList<TBild>.Create(True);
end;

destructor Destroy;
begin
  MeineObjectList.Free;
  inherited;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:25 Uhr.
Seite 2 von 2     12   

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