AGB  ·  Datenschutz  ·  Impressum  







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

Pfeiltasten erkennen!

Ein Thema von Nicolai1234 · begonnen am 4. Okt 2004 · letzter Beitrag vom 4. Okt 2004
Antwort Antwort
Nicolai1234

Registriert seit: 21. Feb 2004
1.008 Beiträge
 
Turbo Delphi für Win32
 
#1

Pfeiltasten erkennen!

  Alt 4. Okt 2004, 18:11
Ich will im meinem Spiel die Pfeiltasten zu Steuerung benutzen!
Ich habe folgenden Code von Daniel/Sakura genommen:
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
    VK_LEFT: begin
      Image1.Left := Image1.Left - 5;
      Key := 0;
    end;
    VK_RIGHT: begin
      Image1.Left := Image1.Left + 5;
      Key := 0;
    end;
    VK_UP: begin
      Image1.Top := Image1.Top - 5;
      Key := 0;
    end;
    VK_DOWN: begin
      Image1.Top := Image1.Top + 5;
      Key := 0;
    end;
  end;
end;
KeyPreview steht wie gefordert auf true!
Aber es passiert garnichts!
Wie muss ich es dann machen?
Ich habe Delphi 6 Professional!
Danke im voraus
  Mit Zitat antworten Zitat
djmasi

Registriert seit: 9. Jun 2004
Ort: Leipzig
105 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Pfeiltasten erkennen!

  Alt 4. Okt 2004, 18:21
Zitat von Delphi Hilfe:
Die Einstellung bezieht sich nicht auf Navigationstasten (TAB, Pfeiltasten usw.), da diese keine Tastaturereignisse auslösen. Ähnliches gilt, wenn eine Schaltfläche den Fokus hat oder wenn dessen Eigenschaft Default den Wert true hat. Die Eingabetaste wird von KeyPreview nicht berücksichtigt, da diese kein Tastaturereignis auslöst.
Und sobald ein anderes Control den Fokus hat funktioniert es nicht mehr. Also entweder bei jedem Control den Code rein oder aber über System-Hooks das ganze abfangen (Luckie hat das mal schön beschrieben)
Thomas Maßmann
"...ihr würdet selbst den lieben Gott einbetonieren, wenn eure Datenbank ihn eines Tag's erfasst..."
H.-R.-Kunze
Auch Delphi 9 Preview-Inhaber bin
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Pfeiltasten erkennen!

  Alt 4. Okt 2004, 18:26
Bei mir geht obiger Code einwandfrei, auch wenn ein Edit den Fokus hat.

Hooks wären wohl etwas übertrieben dafür.
  Mit Zitat antworten Zitat
djmasi

Registriert seit: 9. Jun 2004
Ort: Leipzig
105 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Pfeiltasten erkennen!

  Alt 4. Okt 2004, 18:28
Also ich hab nen Image und nen Button auf der Form. Sobald der Button den Fokus hat geht der Code net mehr.
Thomas Maßmann
"...ihr würdet selbst den lieben Gott einbetonieren, wenn eure Datenbank ihn eines Tag's erfasst..."
H.-R.-Kunze
Auch Delphi 9 Preview-Inhaber bin
  Mit Zitat antworten Zitat
Nicolai1234

Registriert seit: 21. Feb 2004
1.008 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Pfeiltasten erkennen!

  Alt 4. Okt 2004, 18:40
Zitat von Matze:
Bei mir geht obiger Code einwandfrei, auch wenn ein Edit den Fokus hat.

Hooks wären wohl etwas übertrieben dafür.
Bei mir eben nicht! Voran kann das liegen?
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#6

Re: Pfeiltasten erkennen!

  Alt 4. Okt 2004, 18:45
Nicolai1605,

Das Control mit dem Fokus (in deinem Fall TButton) verarbeitet keine Peiltasten Ereignisse.

"The key preview feature is a direct "echo" of the key events the active control sees
and controls will get only the key events they ask for."

Die Pfeiltasten kannst du über einen CM_DIALOGKEY handler abfangen.

// private Section
Delphi-Quellcode:
Procedure CMDialogKey(Var Msg: TWMKey); message CM_DIALOGKEY;


Procedure TForm1.CMDialogKey(Var Msg: TWMKEY);
Var
  handled: Boolean;
Begin
  handled := true;
  Case msg.charcode of
    VK_UP: Image1.Top := Image1.Top - 5;
    VK_DOWN: Image1.Top := Image1.Top + 5;
    VK_LEFT: Image1.Left := Image1.Left - 5;
    VK_RIGHT: Image1.Left := Image1.Left + 5;
  Else
    handled := False
  End;
  If handled Then
    msg.result := 1
  Else
    inherited;
End;
Thomas
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:16 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