AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Image bewegen

Ein Thema von Jonski · begonnen am 28. Nov 2009 · letzter Beitrag vom 30. Nov 2009
Antwort Antwort
Seite 3 von 10     123 45     Letzte »    
Jonski

Registriert seit: 28. Nov 2009
Ort: Hessen
75 Beiträge
 
Delphi 7 Personal
 
#21

Re: Image bewegen

  Alt 28. Nov 2009, 22:21
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.
Jonas
MFG Jonski
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#22

Re: Image bewegen

  Alt 28. Nov 2009, 22:30
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#23

Re: Image bewegen

  Alt 28. Nov 2009, 22:30
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#24

Re: Image bewegen

  Alt 28. Nov 2009, 22:35
Zitat von DeddyH:
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...
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#25

Re: Image bewegen

  Alt 28. Nov 2009, 22:38
Er weist die Bitmap beide Male Image1 zu, das macht ja keinen Sinn.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Jonski

Registriert seit: 28. Nov 2009
Ort: Hessen
75 Beiträge
 
Delphi 7 Personal
 
#26

Re: Image bewegen

  Alt 28. Nov 2009, 22:41
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.
Jonas
MFG Jonski
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#27

Re: Image bewegen

  Alt 28. Nov 2009, 22:43
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Jonski

Registriert seit: 28. Nov 2009
Ort: Hessen
75 Beiträge
 
Delphi 7 Personal
 
#28

Re: Image bewegen

  Alt 28. Nov 2009, 22:47
Ich hab den ganzen Teil mit den Tasten nochmal gelöscht und überlege nochmal.
Jonas
MFG Jonski
  Mit Zitat antworten Zitat
Jonski

Registriert seit: 28. Nov 2009
Ort: Hessen
75 Beiträge
 
Delphi 7 Personal
 
#29

Re: Image bewegen

  Alt 28. Nov 2009, 22:53
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!!!
Jonas
MFG Jonski
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#30

Re: Image bewegen

  Alt 28. Nov 2009, 22:54
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]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 10     123 45     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:42 Uhr.
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