![]() |
Re: Image bewegen
Also ich habe folgendes Problem, dass Delphi sagt Undefinierter Bezeichner Image1 und so weiter und sofort:
Delphi-Quellcode:
Bitte helft mir.
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm1 = class(TForm) Image1: TImage; Image2: TImage; procedure FormCreate(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); var Bitmap:TBitmap; begin Bitmap:=TBitmap.Create; try Bitmap.Width:=Image1.Width; Bitmap.Height:=Image1.Height; Bitmap.Canvas.pen.color:=clGreen; Bitmap.Canvas.pen.width:=10; Bitmap.Canvas.Ellipse(5,5,50,50); Image1.Picture.Assign(Bitmap); finally Bitmap.Free; end; Bitmap:=TBitmap.Create; try Bitmap.Width:=Image2.Width; Bitmap.Height:=Image2.Height; Bitmap.Canvas.pen.color:=clBlue; Bitmap.Canvas.pen.width:=10; Bitmap.Canvas.Ellipse(5,5,50,50); Image1.Picture.Assign(Bitmap); finally Bitmap.Free; end; with Image1 do begin transparent:=true; end end; procedure FormKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState); begin if Image1.Left - 10 > Image2.Left then begin Image1.Left := Image1.Left - 10; end else begin case Key of VK_LEFT: Image1.Left := Image1.Left - 10; end end if Image1.Left + 10 > Image2.Left then begin Image1.Left := Image1.Left + 10; end else begin case Key of VK_RIGHT: Image1.Left := Image1.Left + 10; end end if Image1.Top - 10 > Image.Top then begin Image1.Top := Image1.Top - 10; end else begin case Key of VK_DOWN: Image1.Top := Image1.Top - 10; end end if Image1.Top + 10 > Image2.Top then begin Image1.Top := Image1.Top + 10; end else begin case Key of VK_UP: Image1.Top := Image1.Top + 10; end end end; end. |
Re: Image bewegen
Zitat:
|
Re: Image bewegen
:pale: Du solltest vielleicht erst einmal ein Grundlagentutorial durcharbeiten. Du hast doppelten Code im FormCreate(die Bitmap wird 2 mal erzeugt) und für das KeyDown-Ereignis musst Du im Objektinspektor auf dem Reiter "Ereignisse" einen Doppelklick bei "OnKeyDown" machen. Daraufhin erzeugt Dir Delphi das Codegerüst automatisch, Du musst nur noch den Code zwischen begin und end einfügen sowie evtl. Variablen.
|
Re: Image bewegen
Zitat:
|
Re: Image bewegen
Er weist die Bitmap beide Male Image1 zu, das macht ja keinen Sinn.
|
Re: Image bewegen
Jaja ich weiß was ich falsch gemacht habe.
Hier nochmal eine verbesserte Variante nur bewegt sich der Kreis nicht mehr:
Delphi-Quellcode:
nit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm1 = class(TForm) Image1: TImage; Image2: TImage; procedure FormCreate(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); var Bitmap1,Bitmap2:TBitmap; begin Bitmap1:=TBitmap.Create; try Bitmap1.Width:=Image1.Width; Bitmap1.Height:=Image1.Height; Bitmap1.Canvas.pen.color:=clGreen; Bitmap1.Canvas.pen.width:=10; Bitmap1.Canvas.Ellipse(5,5,50,50); Image1.Picture.Assign(Bitmap1); finally Bitmap1.Free; end; Bitmap2:=TBitmap.Create; try Bitmap2.Width:=Image2.Width; Bitmap2.Height:=Image2.Height; Bitmap2.Canvas.pen.color:=clBlue; Bitmap2.Canvas.pen.width:=10; Bitmap2.Canvas.Rectangle(10,10,1000,15); Image2.Picture.Assign(Bitmap2); finally Bitmap2.Free; end; with Image1 do begin transparent:=true; end; with Image2 do begin transparent:=true; end; end; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Image1.Left - 10 > Image2.Left then begin Image1.Left := Image1.Left - 10; end else begin case Key of VK_LEFT: Image1.Left := Image1.Left - 10; end; end; if Image1.Left + 10 > Image2.Left then begin Image1.Left := Image1.Left + 10; end else begin case Key of VK_RIGHT: Image1.Left := Image1.Left + 10; end; end; if Image1.Top - 10 > Image2.Top then begin Image1.Top := Image1.Top - 10; end else begin case Key of VK_DOWN: Image1.Top := Image1.Top - 10; end; end; if Image1.Top + 10 > Image2.Top then begin Image1.Top := Image1.Top + 10; end else begin case Key of VK_UP: Image1.Top := Image1.Top + 10; end; end; end; end. |
Re: Image bewegen
Hol tief Luft, schau Dir Deinen Code nochmal in Ruhe an und dann überlege, was Du eigentlich erreichen willst. Als Tipp: erst die Taste ermitteln, dann erst prüfen, ob sich das Image bewegen darf/soll.
|
Re: Image bewegen
Ich hab den ganzen Teil mit den Tasten nochmal gelöscht und überlege nochmal.
|
Re: Image bewegen
Ich komme hier nicht weiter:
Delphi-Quellcode:
Ich habe keine Ahnung wie ich mit Tasten umgehe!!!
case Key of
VK_LEFT: if Image1.Left -10 Image2.Left then begin Image1.Left := Image1.Left - 10; end end |
Re: Image bewegen
Da kommt eine Nachricht an "Taste gedrückt". Nun musst Du ermitten, ob das eine der Pfeiltasten ist, damit Du weißt, in welche Richtung sich das Image denn überhaupt ggf. bewegen soll(das war der case-Block). Innerhalb dieses Blocks musst Du nun je Taste schauen, ob die Bewegung in diese Richtung überhaupt ohne Kollision möglich ist. Daher musst Du den Code von oben nur anders verschachteln, dann passt das schon.
[edit] Das ist ja fast schon richtig, Du hast nur das "<" vergessen. [/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:48 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