Delphi-PRAXiS
Seite 1 von 2  1 2      

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)

Benni0811 3. Okt 2016 19:25

Mehrere TImages mit einer Procedure erstellen
 
Hallo Zusammen,

Ich programmiere gerade ein Spiel, in dem man sich seine eigen Stadt aufbauen kann. Das ganze auf geschieht auf einem Gitter mit über 500 Quadratischen Feldern. Um nicht für jedes einzelne Feld ein TImage von Hand erstellen zu müssen, habe ich mir überlegt diese erst im Programm zu erstellen. Jetzt meine Frage:
Kann man mit einer Prozedure mehrere TImages erstellen, ohne diese vorher einzeln im Var-Bereich zu deklarieren? den Namen der Bilder würde ich über eine Stringvariable festlegen.

Grüße

mkinzler 3. Okt 2016 19:27

AW: Mehrere TImages mit einer Procedure erstellen
 
Übergabe eines Arrays?

Benni0811 3. Okt 2016 19:32

AW: Mehrere TImages mit einer Procedure erstellen
 
Wie würde das aussehen?

Ich programmiere erst seit 2 monaten mit Pascal und habe noch nie arrays benutzt und mich auch noch nie damit beschäftigt wie diese funktionieren.

Luckie 3. Okt 2016 20:59

AW: Mehrere TImages mit einer Procedure erstellen
 
Dann ist das jetzt die Gelegenheit sich damit zu beschäftigen. Hilfe findest du dazu hier im Forum und auf den einschlägigen Tutorialseiten im Internet.

Aber für die Zukunft: Eine Objektliste mit Objekten, die das TImage und weiter Eigenschaften beinhalten, wäre hier wohl geeigneter.

himitsu 3. Okt 2016 21:12

AW: Mehrere TImages mit einer Procedure erstellen
 
statt einem Array

Delphi-Quellcode:
type
  TMyImagesArray = array of TImages; // TMyImagesArray = TArray<TImages>;

function GibMirWasDasGarantiertInEinemSpeicherleckEndet: TMyImagesArray;
// oder
procedure GibMirWasDasGarantiertInEinemSpeicherleckEndet(var ImagesList: TMyImagesArray);
Besser eine Liste mit OwnsObjects=True
Delphi-Quellcode:
var
  Liste: TObjectList<TImages>;

procedure GibMirWas(ImagesList: TObjectList<TImages>);

PS: Gibt es kein 2DBox Box2D mehr im GetIt?
Bei Google suchendelphi 2d game engine

[edit] Wo kommt Luckie plötzlich her :shock:

Benni0811 4. Okt 2016 17:44

AW: Mehrere TImages mit einer Procedure erstellen
 
Danke für die Antworten, ich habe jetzt eine Objectlist mit verschiedenen Bildern. Ich habe auch herausgefunden, dass man die Bilder mit der Funktion GetItem aufrufen kann. Wie Kombiniere ich das jetzt mit der Erstellung neuer Bilder mit Einer Stringvariable als Bildnamen und unterschiedlichen Koordinaten?

haentschman 4. Okt 2016 17:59

AW: Mehrere TImages mit einer Procedure erstellen
 
Hallöle...:P
Schau dir mal TDictiorary bzw. TObjectDictonary an. Dann macht du dir eine Datenklasse mit dem Bild und den Eigenschaften welche du möchtest. Dann hast du einen KEY welcher das Bild identifiziert... fertsch. :P
http://docwiki.embarcadero.com/Libra...jectDictionary

Beim Arbeiten mit Listen kannst über den Index zugreifen. Bei generischen Listen kriegst du das entsprechende Objekt zurück. :zwinker:

Arbeite dich mal durch. Wenn du fragen hast kann ich notfalls ein Beispiel machen. :zwinker:

Benni0811 5. Okt 2016 13:10

AW: Mehrere TImages mit einer Procedure erstellen
 
Okay ich habe folgende Fragen:

Ich habe mir eine Klasse erstellt mit Eigenschaften des Bilds(Mithilfe von Google). Die sieht so aus:
Code:
type
    TBild = Class
    private
      x,y,Width,Height:Integer;
      Name:String;
    public
      Constructor Init(x,y,Width,Height:Integer; Name:String);
End;
Wie kann ich dem Bild eine Bitmap zuweisen?
Wie übertrage ich die Daten auf ein neues Bild?
Ist die Klasse überhaupt richtig?

Und wie Kombiniere ich das ganze mit der Objectlist?

Wie du siehst bin ich damit etwas überfordert, ich wäre dir für ein kleines Beispiel sehr dankbar.

Edit: Habe gerade gemerkt, dass beim kompilieren die Fehlermeldung: "[dcc32 Fehler] Unit1.pas(14): E2065 Ungenügende Forward- oder External-Deklaration: 'TBild.Init'" erscheint.

haentschman 5. Okt 2016 13:31

AW: Mehrere TImages mit einer Procedure erstellen
 
Hallo...:P

Knapp daneben... :P

Ich zeige es anhand eines Beispieles:
Delphi-Quellcode:
TBlubb = class // der Klassenname ist egal
  private
    FImageContent: TBitmap;
    FImageHeight: Integer;
    FImageName: string;
    FImageWidth: Integer;
  public
    property ImageName: string read FImageName write FImageName; // der Name des Bildes für z.b. die Anzeige etc.
    property ImageContent: TBitmap read FImageContent write FImageContent; // das eigentliche Bild incl. der Originalhöhe etc.
    property ImageHeight: Integer read FImageHeight write FImageHeight; // Höhe des Bildes vom Original abweichend -> muß gesetzt werden
    property ImageWidth: Integer read FImageWidth write FImageWidth; // Breite des Bildes vom Original abweichend -> muß gesetzt werden
    // und so weiter
  end;
Du mußt dir das Tutorial aus dem DT anschauen. Du mußt lernen was Klassen sind, was Propertys sind und wie man das verwendet. :warn: Sonst kommst du auf keinen grünen Zweig.
https://www.delphi-treff.de/tutorial...phi-crashkurs/ ...Klassen ab Seite 8

Wenn du das verstanden hast, können wir mit der Objectliste weitermachen. 8-)
PS: Wenn du Klassen verstanden hast, wirst du auch die Vorteile von Klassen erkennen. :wink:

Benni0811 10. Okt 2016 16:08

AW: Mehrere TImages mit einer Procedure erstellen
 
Ich habe den Crashkurs jetzt gelesen und außerdem der Klasse die Eigenschaften ImageTop und ImageLeft hinzugefügt:
Delphi-Quellcode:
TBild = Class
    private
      FImageContent: TBitmap;
      FImageHeight: Integer;
      FImageName: string;
      FImageWidth: Integer;
      FImageTop: Integer;
      FImageLeft: Integer;
    public
      property ImageName: string read FImageName write FImageName;
      property ImageContent: TBitmap read FImageContent write FImageContent;
      property ImageHeight: Integer read FImageHeight write FImageHeight;
      property ImageWidth: Integer read FImageWidth write FImageWidth;
      property ImageTop: Integer read FImageTop write FImageTop;
      property ImageLeft: Integer read FImageLeft write FImageLeft;
    End;
Außerdem habe ich in einer Procedure den Eigenschaften verschiedene Werte zugewiesen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var Test:TBild;
begin
    Key:='Feld'+IntToStr(Feldx)+','+IntToStr(Feldy);
    Test:=TBild.Create;
    Test.FImageName:=Key;
    Test.FImageHeight:=Feldsize;
    Test.FImageWidth:=Feldsize;
    Imagelist1.GetBitmap(0,Test.FImageContent);
end;
Feldx und Feldy sind Variablen zur bestimmeug der Position des Feldes, Feldsize ist die Konstante die die Größe der Felder festlegt.

Wie kombiniere ich das jetzt mit der TObjectlist?


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:11 Uhr.
Seite 1 von 2  1 2      

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