![]() |
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.
|
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 |
Re: Figur mit Tasten Bewegen
Hi,
Ereignisse von Form1: OnKeyDown, OnKeyUp, OnKeyPress. Ausserdem im OI das KeyPreview auf True stellen. |
Re: Figur mit Tasten Bewegen
Wenn dus schnell brauchst(die oben genannten sind "relativ" langsam):
Delphi-Quellcode:
das geht auch für vk_right, vk_up, vk_down, vk_escape, vk_prior, vk_next
if GetAsyncKeystate(VK_LEFT) < 0 then
begin //Blubberdifasel end; |
Re: Figur mit Tasten Bewegen
Delphi-Quellcode:
bei dem Code kannst du dein Objekt nicht aus der Form hinaus bewegen. :zwinker:
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. |
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!
|
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 |
Re: Figur mit Tasten Bewegen
sicherer ist noch wenn du abfragst ob es ungleich (<>) 0 ist.
|
Re: Figur mit Tasten Bewegen
Was genau gibt denn jetzt GetAsyncKeyState zurück?
|
Re: Figur mit Tasten Bewegen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:29 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