Delphi-PRAXiS
Seite 3 von 10     123 45     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Image bewegen (https://www.delphipraxis.net/144048-image-bewegen.html)

Jonski 28. Nov 2009 22:21

Re: Image bewegen
 
Also ich habe folgendes Problem, dass Delphi sagt Undefinierter Bezeichner Image1 und so weiter und sofort:
Delphi-Quellcode:
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.
Bitte helft mir.

Namenloser 28. Nov 2009 22:30

Re: Image bewegen
 
Zitat:

Zitat von Jonski
Also ich habe folgendes Problem, dass Delphi sagt Undefinierter Bezeichner Image1 und so weiter und sofort:
Delphi-Quellcode:
...
procedure FormKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);
...

Du kannst das nicht einfach so in den Code schreiben. Mach einen Doppelklick im Objectinspektor auf das Feld neben "OnKeyDown" (im Reiter "Ereignisse"). Dann kopier den Code dort hinein und lösche die alte procedure.

DeddyH 28. Nov 2009 22:30

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.

Namenloser 28. Nov 2009 22:35

Re: Image bewegen
 
Zitat:

Zitat von DeddyH
:pale: Du solltest vielleicht erst einmal ein Grundlagentutorial durcharbeiten. Du hast doppelten Code im FormCreate(die Bitmap wird 2 mal erzeugt)

Naja, sie wird aber jedesmal auch wieder freigegeben. Wenn du genau hinsiehst, wirst du außerdem bemerken, dass der Code nicht identisch ist. Beim ersten Mal ist es Image1, beim zweiten Mal Image2. Allerdings hat er es in der letzten Zeile (mit Assign) vergessen zu ändern. Grundlagentutorials könnten natürlich nicht schaden...

DeddyH 28. Nov 2009 22:38

Re: Image bewegen
 
Er weist die Bitmap beide Male Image1 zu, das macht ja keinen Sinn.

Jonski 28. Nov 2009 22:41

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.

DeddyH 28. Nov 2009 22:43

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.

Jonski 28. Nov 2009 22:47

Re: Image bewegen
 
Ich hab den ganzen Teil mit den Tasten nochmal gelöscht und überlege nochmal.

Jonski 28. Nov 2009 22:53

Re: Image bewegen
 
Ich komme hier nicht weiter:

Delphi-Quellcode:
case Key of
  VK_LEFT:
  if Image1.Left -10  Image2.Left then
    begin
    Image1.Left := Image1.Left - 10;
    end
  end
Ich habe keine Ahnung wie ich mit Tasten umgehe!!!

DeddyH 28. Nov 2009 22:54

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 20:29 Uhr.
Seite 3 von 10     123 45     Letzte »    

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