Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Figur mit Tasten Bewegen (https://www.delphipraxis.net/60706-figur-mit-tasten-bewegen.html)

ontorius 11. Jan 2006 10:21


Figur mit Tasten Bewegen
 
So, ich hab jetzt so viel Zeit dafür verschwendet, um eine Figur oder eine Graphik mit Tasten bewegen zu können, und es klappt immernoch nicht. Jetzt frag ich hier nach. Ich brauche eine Prozedur für das Tastenereignis und die Deklarierung im Kopf der Unit. Ich hab schon ähnliche Themen im Forum gelesen, aber dabei wurde keine Deklarierungten angegeben wonach das Programm Delphi aber immer fragt.

Schaedel 11. Jan 2006 10:29

Re: Figur mit Tasten Bewegen
 
Du hast ein TImage Objekt?
Das kannst du mit dem Ereignis OnKeyDown,des Formular, über die Virtual Keys steuern.
Du solltest aber nach jeder Bewegung das Image refreshen weil es sonst ruckelt.

Viele Grüße

Schaedel

Daniel B 11. Jan 2006 10:30

Re: Figur mit Tasten Bewegen
 
Hi,

Ereignisse von Form1: OnKeyDown, OnKeyUp, OnKeyPress. Ausserdem im OI das KeyPreview auf True stellen.

inherited 13. Jan 2006 11:59

Re: Figur mit Tasten Bewegen
 
Wenn dus schnell brauchst(die oben genannten sind "relativ" langsam):

Delphi-Quellcode:
if GetAsyncKeystate(VK_LEFT) < 0 then
    begin
      //Blubberdifasel
    end;
das geht auch für vk_right, vk_up, vk_down, vk_escape, vk_prior, vk_next

konda 13. Jan 2006 13:55

Re: Figur mit Tasten Bewegen
 
Delphi-Quellcode:
unit LaufenUnit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls;

type
  TForm1 = class(TForm)
    Shape1: TShape;
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var absu,absl,absr,abso: integer;
begin
     //beim rand anstoßen
     abso:= shape1.top;
     absu:= form1.clientheight-(shape1.top+shape1.height);
     absl:= shape1.left;
     absr:= form1.clientwidth-(shape1.left+shape1.width);
     if (abso>10) then abso:= 10;
     if (absu>10) then absu:= 10;
     if (absl>10) then absl:= 10;
     if (absr>10) then absr:= 10;
     //bewegung des balles
     if (key=38) then shape1.top:= shape1.top-abso;
     if (key=40) then shape1.top:= shape1.top+absu;
     if (key=37) then shape1.left:= shape1.left-absl;
     if (key=39) then shape1.left:= shape1.left+absr;
end;

end.
bei dem Code kannst du dein Objekt nicht aus der Form hinaus bewegen. :zwinker:

3_of_8 13. Jan 2006 13:58

Re: Figur mit Tasten Bewegen
 
Heißt das, wenn GetAsyncKeystate(VK_ANYTHING)<0 bedeutet, dass die Taste mit dem Scancode VK_ANYTHING gerade gedrückt ist? Wenn ja, dann wäre das die Funktion, nach der ich schon so lange gesucht habe!

Airblader 13. Jan 2006 15:02

Re: Figur mit Tasten Bewegen
 
Ja, so ist es.
GetASyncKeyState liefert zwar immer feste Werte, aber der Check auf kleiner 0 hat bei mir bisher immer optimal funktioniert :)

air

inherited 14. Jan 2006 08:55

Re: Figur mit Tasten Bewegen
 
sicherer ist noch wenn du abfragst ob es ungleich (<>) 0 ist.

3_of_8 14. Jan 2006 09:45

Re: Figur mit Tasten Bewegen
 
Was genau gibt denn jetzt GetAsyncKeyState zurück?

jim_raynor 14. Jan 2006 10:17

Re: Figur mit Tasten Bewegen
 
Zitat:

Zitat von Windows SDK
If the function succeeds, the return value specifies whether the key was pressed since the last call to GetAsyncKeyState, and whether the key is currently up or down. If the most significant bit is set, the key is down, and if the least significant bit is set, the key was pressed after the previous call to GetAsyncKeyState. The return value is zero if a window in another thread or process currently has the keyboard focus.

Also ein Vergleich auf <>0 bringt nicht das gewünschte Ergebnis. Wenn die Taste gedrückt wird, ist das höchstwertige Bit 1 was bei Integer eine negative Zahl bedeutet ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:27 Uhr.
Seite 1 von 2  1 2      

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