Prozedur Formkeydown und Button im Formular

kdfssl

Grünschnabel
Hi ich wollte meine Figur in meinem Fall ein image über den Bildschirm laufen lassen, was auch geht, aber auf ein klick ,eines Buttons im Formular, soll sich die geschwindigkeit ändern mit der sich die Figur bewegt. Das problem ist, dass sich solch ein Focus auf dem Button befindet den ich nicht loswerde. Mein vorschlag war dann die FormKeyDown prozedur in der ButtonClick prozedur mit einzubinden aber dann sagt mir Delphi es fehlen parameter. Ich weiß auch ehrlich gesagt nicht welche ich dort angeben soll.
hier mein code :
(die einzelnen bilder sind nur die perspektiven der Figur)
implementation
var speed : integer;

{$R *.DFM}

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case Key of
VK_LEFT: begin
if (image1.visible=true) or (image2.visible=true) or (image4.visible=true)
then
begin
image1.visible:=false;
image3.visible:=true;
image4.visible:=false;
image2.visible:=false;
end;
Image1.Left := Image1.Left - speed;
Image2.Left := Image1.Left - speed;
Image3.Left := Image1.Left - speed;
Image4.Left := Image1.Left - speed;
Key := 0;
end;
VK_RIGHT: begin
if (image2.visible=true) or (image3.visible=true) or (image4.visible=true)
then
begin
image1.visible:=true;
image3.visible:=false;
image4.visible:=false;
image2.visible:=false;
end;
Image1.Left := Image1.Left + speed;
Image2.Left := Image1.Left - speed;
Image3.Left := Image1.Left - speed;
Image4.Left := Image1.Left - speed;
Key := 0;
end;
VK_UP: begin
if (image1.visible=true) or (image2.visible=true) or (image3.visible=true)
then
begin
image1.visible:=false;
image3.visible:=false;
image4.visible:=true;
image2.visible:=false;
end;
Image1.top := Image1.top - speed;
Image2.top := Image1.top - speed;
Image3.top := Image1.top - speed;
Image4.top := Image1.top - speed;
Key := 0;
end;
VK_DOWN: begin
if (image1.visible=true) or (image3.visible=true) or (image4.visible=true)
then
begin
image1.visible:=false;
image3.visible:=false;
image4.visible:=false;
image2.visible:=true;
end;
Image1.top := Image1.top + speed;
Image2.top := Image1.top - speed;
Image3.top := Image1.top - speed;
Image4.top := Image1.top - speed;
Key := 0;
end;
end;
if (image1.Top > 100) and (image1.left > 100) then
button1.visible:=true;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
speed:=speed+10;
formkeydown(Sender: TObject; var Key: Word; Shift: TShiftState);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
speed:=1;
image1.visible:=true;
image2.visible:=false;
image3.visible:=false;
image4.visible:=false;
end;

vielen Dank für eure Hilfe!
 

CSANecromancer

Erfahrenes Mitglied
Das problem ist, dass sich solch ein Focus auf dem Button befindet den ich nicht loswerde.
Und was genau ist da das Problem?

Mein vorschlag war dann die FormKeyDown prozedur in der ButtonClick prozedur mit einzubinden aber dann sagt mir Delphi es fehlen parameter. ...
formkeydown(Sender: TObject; var Key: Word; Shift: TShiftState);
Der Aufruf an sich stimmt schon. Aber die Parameterliste ist komplett daneben.
Die Prozedur FormKeyDown ist innerhalb deiner Form schon definiert, also ist es nicht nur unnötig, sondern sogar falsch, beim Prozeduraufruf die Datentypen mit anzugeben.
Das sollte eher so aussehen:
Code:
var
  Key: Word;
...
Key := VK_LEFT; // oder sonst ein beliebiger Wert.
FormKeyDown(self, Key, []);
self ist das aufrufende Objekt, in Key kannst du den Tastenwert der gewünschten gedrückten Taste reichschreiben und [] steht für eine Menge TShiftStates, in diesem Fall eben keine, d.h. kein Shift, kein Ctrl, kein Alt etc.
 

HarryXVI

Erfahrenes Mitglied
eine andere möglichkeit wäre (so wie ich es gemacht habe), den button beim programmstart inaktiv zu lassen, dann liegt da kein fokus mehr drauf und du kannst perfekt mit den tasten arbeiten. Sobald das Image dann eine Position erreicht hat, aktivierst du den Button.
 

kdfssl

Grünschnabel
Keine Ahnung was du mit aktivieren meinst aber sichter bzw unsichtbar machen klappt nicht.
Problem ist, dass er nicht mehr in die Prozedur Tform1.Formkeydown geht, nachdem man auf einem Button geklickt hat.
 

kdfssl

Grünschnabel
Hat auch leider Nichts gebracht.
Meine nächster versuch war, einfach die formkeydown Prozedur aufzurufen,
aber mit formkeydown(39;[]) sagt er mir: 'nicht genügend wirkliche parameter'.

Ich weiß leider nicht was ich als Parameter angeben muss.
 

kdfssl

Grünschnabel
tja die ganze Sache hat sich erledigt. Es liegt an Delphi 4 mit Delphi 2007 klappt es mit meine originalcode...Das soll mal einer erst mla rausbekommen...
trotzdem thx!