![]() |
Komponenten über Befehl erstellen
N'Abend zusammen!
Ich sitze zur Zeit an einem Game, welches Komplett über TImage visualisiert wird. In diesem Spiel sollen per Tastendruck neue Images gesetzt werden, immer das gleiche. Ich hatte es erst so gelöst, dass ich die maximale Anzahl von Images außerhalb des sichtbaren Bereiches gesetzt habe und dann über den Tastendruck erst auf die definierte Position gesetzt :? Mein alter Informatiklehrer sagte, man könne Instanzen erzeugen... Ich habe es bereits mit create versucht, jedoch verstehe ich die Syntax nicht :oops:, und die Delphi Hilfe sagt mir, das Thema sei nicht vorhanden. Kann mir wer entweder ein konkretes Beispiel für create() zeigen, oder möglicher Weise sogar eine komplett andere Idee vorschlagen? ;) Liebe Grüße, Frank. [edit=SirThornberry]Schreibfehler im Titel korrigiert - Mfg, SirThornberry[/edit] |
Re: Komponenter über Befehl erstellen
Delphi-Quellcode:
Oder guck mal hier:
var
test: TImage; .... test := TImage.Create(self); test.parent := Form1; test.top := 20; test.left := 20; test.picture := ... ![]() |
Re: Komponenter über Befehl erstellen
Klingt sehr interessant und nachvollziehbar, aber .picture will meinen dateipfad nicht annehmen :(
Wie habe ich ihn denn zu deklarieren? |
Re: Komponenter über Befehl erstellen
Du musst ein TPicture-Objekt übergeben. ;)
|
Re: Komponenter über Befehl erstellen
Test.Picture.LoadFromFile könnte helfen.
|
Re: Komponenter über Befehl erstellen
Oh ja, das war's, danke :)
Trotz alledem, ich komme nicht weiter :( Sorry dass ich euer Forum mit solchen Fragen 'zumülle'... Nächstes Problem: Angeblich sei die Parent des Images nicht initialisiert worden, zumindest schmiert mir das Programm beim compilen ab. EAccessViolation im Project1.exe sagt er mir... |
Re: Komponenter über Befehl erstellen
Was hast du denn als Parent angegeben?
|
Re: Komponenter über Befehl erstellen
Wie in deinem Beispiel: Form1
|
Re: Komponenter über Befehl erstellen
Heißt dein Formular denn auch Form1? Ansonsten gib mal self an und guck was passiert.
|
Re: Komponenter über Befehl erstellen
Ja, es heißt Form1. Auch mit self als Parent bekomme ich den gleichen Fehler zurück.
Delphi-Quellcode:
procedure TForm1.keypressTIMERTimer(Sender: TObject);
begin // helpscreen if getAsyncKeyState(vk_f1) < 0 then helpimage.visible:=true else helpimage.visible:=false; // marker rechts if getasynckeystate(vk_right) < 0 then if markerimage.left=768 then markerimage.left:=0 else markerimage.left:=markerimage.left+32; // marker links if getasynckeystate(vk_left) < 0 then if markerimage.left=0 then markerimage.left:=768 else markerimage.left:=markerimage.left-32; // marker hoch if getasynckeystate(vk_up) < 0 then if markerimage.top=0 then markerimage.top:=448 else markerimage.top:=markerimage.top-32; // marker runter if getasynckeystate(vk_down) < 0 then if markerimage.top=448 then markerimage.top:=0 else markerimage.top:=markerimage.top+32; // cannon setzen if getasynckeystate(vk_up) < 0 then cannon:=timage.create(self); //cannon ist eine globale variable cannon.parent:=self; cannon.top:=markerimage.top; cannon.left:=markerimage.left; cannon.picture.loadfromfile('gfx\decal3.bmp'); end; |
Re: Komponenter über Befehl erstellen
ohje, du versuchst mehrmals das selbe Bild zu createn, dann krachts, außerdem hast du begin und end um den if-Befehl vergessen.
|
Re: Komponenter über Befehl erstellen
Achso ist das ;)
//edit: Ich kann das Bild öfters Createn. Ich denke, es lag an der Geschwindigkeit des Timers(50 ms), damit wahr wohl der Debugger überfordert ;) edit\\ Das begin / end ist nun wirklich ne doofe Sache gewesen *kopfaufdentischschlag*. Jetzt funktioniert es super, danke Jungs und Mädels :) [offtopic]Find's erstaunlich, wie schnell man hier beholfen ist, und das ohne, dass jemand sagt 'Ist doch Kinder*k*a*c*k*e'. So kenn ich's von anderen Foren[/offtpic] |
Re: Komponenter über Befehl erstellen
Zitat:
|
Re: Komponenter über Befehl erstellen
WHAAAA Balu hat ein neuen Avatar :duck: (OT)^^
Die Nettigkeit wird durch folgendes hervorgerufen: -Nette User -Nette Moderatoren die alles löschen was nicht nett ist^^ -Ein netter Admin der jeden zusammen****** der nicht nett ist->unnetter user geht oder wird zum netten user xD |
Re: Komponenter über Befehl erstellen
Zitat:
|
Re: Komponenter über Befehl erstellen
Zitat:
Zitat:
|
Re: Komponenter über Befehl erstellen
Ja, am Besten mit einem Dynamischen Array
Delphi-Quellcode:
var
Bilderchen: Array of TImage; ... if getasynckeystate(vk_up) < 0 then begin SetLength(Bilderchen, High(Bilderchen)+2); bilderchen[high(Bilderchen)]:=timage.create(self); with bilderchen[high(bilderchen)] do begin parent:=self; top:=markerimage.top; left:=markerimage.left; picture.loadfromfile('gfx\decal3.bmp'); end; end; |
Re: Komponenter über Befehl erstellen
Super, danke für den Tipp!
Es funktioniert so zwar super, aber schlau werde ich daraus trotzdem nicht, und ich möchte behaupten, das hilft mir nicht sehr viel weiter. Die einzelnen Befehle seien in der OH wieder nicht zu finden, sagt mir Delphi :( Magst du den Codeschnipsel vielleicht kommentieren? *liebguck* Lg, Frank. |
Re: Komponenter über Befehl erstellen
Naja, weil du es bist^^
Allerdings musst du mir noch sagen, was du nicht verstehts. Was Arrays sind? was das mit dem with x do ist oder was? |
Re: Komponenter über Befehl erstellen
Hehe :mrgreen:
Arrays sind - soweit ich weiß - Variablen, welche in begrenzten Bereichen gelten. Falls ich mich irre, bitte korrigieren. Jetzt verstehe ich nicht so ganz, was genau dynamische Arrays genau sind und wie das with x do zu verstehen ist. Ist's ne Schleife? Den Teil mit
Delphi-Quellcode:
habe ich auch noch nicht ganz verstanden. Vergrößert er den Bereich des Arrays um 2?
SetLength(Bilderchen, High(Bilderchen)+2);
|
Re: Komponenten über Befehl erstellen
AAAlso:
Arrays: ![]()
Delphi-Quellcode:
ist das gleiche wie
with bilderchen[high(bilderchen)] do
begin parent:=self; top:=markerimage.top; left:=markerimage.left; picture.loadfromfile('gfx\decal3.bmp'); end;
Delphi-Quellcode:
und spart Zeit^^
bilderchen[high(bilderchen)].parent:=self;
bilderchen[high(bilderchen)].top:=markerimage.top; bilderchen[high(bilderchen)].left:=markerimage.left; bilderchen[high(bilderchen)].picture.loadfromfile('gfx\decal3.bmp'); high liefert das höchste elemnt eines Arrays |
Re: Komponenten über Befehl erstellen
Super, danke !
Das heißt, es wird jedem Element aus dem Array einen anderer Namen gegeben? Wie kann ich dann später darauf zurückgreifen? Ich habe nämlich vor, die einzelnen Images später wieder destroyen zu lassen |
Re: Komponenten über Befehl erstellen
Du hast ein Array wo jedes Element eines deiner Images ist. Wie zerstört man ein normales Object? mit ".Free". Wenn nun jedes Array Element ein Object ist liegt es doch mehr als nah wie man es zerstört.
|
Re: Komponenten über Befehl erstellen
Liste der Anhänge anzeigen (Anzahl: 1)
Merci!
Das ist mein aktueller Stand. Noch ein Problem...
Delphi-Quellcode:
Sobald ich den Timer aktiviere, hängt sich die exe auf. Was stimmt da schon wieder nicht?
procedure TForm1.enemyTIMERTimer(Sender: TObject);
begin repeat begin Setlength(enemy1, high(enemy1)+2); enemy1[number]:=timage.create(self); with enemy1[number] do begin parent:=self; left:=0; picture.loadfromfile('gfx\enemy2.bmp'); transparent:=true; top:=2*raster+random(64); end; number:=number+1 end until number=stage*2 end; //edit Hat sich erledigt, der Buffer war überlastet... :lol: |
Re: Komponenten über Befehl erstellen
Was sollen wir jetzt mit der exe machen?
|
Re: Komponenten über Befehl erstellen
Gar nichts ;)
Wollte euch bloß einen Einblick davon verschaffen, was ich vor habe... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:18 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