![]() |
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 |
AW: Mehrere TImages mit einer Procedure erstellen
Übergabe eines Arrays?
|
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. |
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. |
AW: Mehrere TImages mit einer Procedure erstellen
statt einem Array
Delphi-Quellcode:
Besser eine Liste mit OwnsObjects=True
type
TMyImagesArray = array of TImages; // TMyImagesArray = TArray<TImages>; function GibMirWasDasGarantiertInEinemSpeicherleckEndet: TMyImagesArray; // oder procedure GibMirWasDasGarantiertInEinemSpeicherleckEndet(var ImagesList: TMyImagesArray);
Delphi-Quellcode:
var
Liste: TObjectList<TImages>; procedure GibMirWas(ImagesList: TObjectList<TImages>); PS: Gibt es kein 2DBox Box2D mehr im GetIt? ![]() [edit] Wo kommt Luckie plötzlich her :shock: |
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?
|
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 ![]() 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: |
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:
Wie kann ich dem Bild eine Bitmap zuweisen?
type
TBild = Class private x,y,Width,Height:Integer; Name:String; public Constructor Init(x,y,Width,Height:Integer; Name:String); End; 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. |
AW: Mehrere TImages mit einer Procedure erstellen
Hallo...:P
Knapp daneben... :P Ich zeige es anhand eines Beispieles:
Delphi-Quellcode:
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.
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; ![]() 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: |
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:
Außerdem habe ich in einer Procedure den Eigenschaften verschiedene Werte zugewiesen:
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;
Delphi-Quellcode:
Feldx und Feldy sind Variablen zur bestimmeug der Position des Feldes, Feldsize ist die Konstante die die Größe der Felder festlegt.
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; Wie kombiniere ich das jetzt mit der TObjectlist? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:23 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-2025 by Thomas Breitkreuz