Avatar billede jgthb Nybegynder
29. maj 2006 - 19:28 Der er 9 kommentarer og
1 løsning

key events

Hej

Jeg undrer mig lidt over noget kode en fra mit hold engang skrev. Åbenbart har piltasterne nogle numre (op-tasten har 38). Hvor finder man alle andre tasters numre?
Nedenunder står et uddrag af koden.

"
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
{ Kaldes automatisk når spilleren trykker på en tast.}
var
  x, y: integer;
  linje: string;
begin

    if kanFlytte then begin
    case key of
      38: // Op
        begin
          imodY:=spiller.Top-48;  // Ryk opad
          kanFlytte:=false;
        end;
"
      ...
Avatar billede stone Forsker
29. maj 2006 - 19:44 #1
Avatar billede kroning Nybegynder
29. maj 2006 - 19:47 #2
Det er forkert at benytte konstanter, istedet vør man bruge VK_UP, VL_DOWN osv. Kik i windows.pas.

Her er en del fra Delphi help:
VK_LBUTTON    Left mouse button
VK_RBUTTON    Right mouse button
VK_CANCEL    Control+Break
VK_MBUTTON    Middle mouse button
VK_BACK    Backspace key
VK_TAB    Tab key
VK_CLEAR    Clear key
VK_RETURN    Enter key
VK_SHIFT    Shift key
VK_CONTROL    Ctrl key
VK_MENU    Alt key
VK_PAUSE    Pause key
VK_CAPITAL    Caps Lock key
VK_KANA    Used with IME
VK_HANGUL    Used with IME
VK_JUNJA    Used with IME
VK_FINAL    Used with IME
VK_HANJA    Used with IME
VK_KANJI    Used with IME
VK_CONVERT    Used with IME

VK_NONCONVERT    Used with IME
VK_ACCEPT    Used with IME
VK_MODECHANGE    Used with IME
VK_ESCAPE    Esc key
VK_SPACE    Space bar
VK_PRIOR    Page Up key
VK_NEXT    Page Down key
VK_END    End key
VK_HOME    Home key
VK_LEFT    Left Arrow key
VK_UP    Up Arrow key
VK_RIGHT    Right Arrow key
VK_DOWN    Down Arrow key
VK_SELECT    Select key
VK_PRINT    Print key (keyboard-specific)
VK_EXECUTE    Execute key
VK_SNAPSHOT    Print Screen key
VK_INSERT    Insert key
VK_DELETE    Delete key
VK_HELP    Help key

VK_LWIN    Left Windows key (Microsoft keyboard)
VK_RWIN    Right Windows key (Microsoft keyboard)
VK_APPS    Applications key (Microsoft keyboard)
VK_NUMPAD0    0 key (numeric keypad)
VK_NUMPAD1    1 key (numeric keypad)
VK_NUMPAD2    2 key (numeric keypad)
VK_NUMPAD3    3 key (numeric keypad)
VK_NUMPAD4    4 key (numeric keypad)
VK_NUMPAD5    5 key (numeric keypad)
VK_NUMPAD6    6 key (numeric keypad)
VK_NUMPAD7    7 key (numeric keypad)
VK_NUMPAD8    8 key (numeric keypad)
VK_NUMPAD9    9 key (numeric keypad)

VK_MULTIPLY    Multiply key (numeric keypad)
VK_ADD    Add key (numeric keypad)
VK_SEPARATOR    Separator key (numeric keypad)
VK_SUBTRACT    Subtract key (numeric keypad)
VK_DECIMAL    Decimal key (numeric keypad)
VK_DIVIDE    Divide key (numeric keypad)
VK_F1    F1 key
VK_F2    F2 key
VK_F3    F3 key
VK_F4    F4 key
VK_F5    F5 key
VK_F6    F6 key
VK_F7    F7 key
VK_F8    F8 key
VK_F9    F9 key
VK_F10    F10 key
VK_F11    F11 key
VK_F12    F12 key
VK_F13    F13 key
VK_F14    F14 key
VK_F15    F15 key

VK_F16    F16 key
VK_F17    F17 key
VK_F18    F18 key
VK_F19    F19 key
VK_F20    F20 key
VK_F21    F21 key
VK_F22    F22 key
VK_F23    F23 key
VK_F24    F24 key
VK_NUMLOCK    Num Lock key
VK_SCROLL    Scroll Lock key
VK_LSHIFT    Left Shift key (only used with GetAsyncKeyState and GetKeyState)
VK_RSHIFT    Right Shift key (only used with GetAsyncKeyState and GetKeyState)
VK_LCONTROL    Left Ctrl key (only used with GetAsyncKeyState and GetKeyState)
VK_RCONTROL    Right Ctrl key (only used with GetAsyncKeyState and GetKeyState)

VK_LMENU    Left Alt key (only used with GetAsyncKeyState and GetKeyState)
VK_RMENU    Right Alt key (only used with GetAsyncKeyState and GetKeyState)
VK_PROCESSKEY    Process key
VK_ATTN    Attn key
VK_CRSEL    CrSel key
VK_EXSEL    ExSel key
VK_EREOF    Erase EOF key
VK_PLAY    Play key
VK_ZOOM    Zoom key
VK_NONAME    Reserved for future use
VK_PA1    PA1 key
VK_OEM_CLEAR    Clear key
Avatar billede stone Forsker
29. maj 2006 - 19:52 #3
hmm ja du har ret ...så afviser du bare mit svar
//stone
Avatar billede nielle Nybegynder
29. maj 2006 - 20:02 #4
Scancoder er nu ikke det samme som ASCII-koder.

Normalt er den bedste måde at finde dem på simpelthen at skrive et lille program som heletiden lytter på tastetryk og så udskriver værdien af Key.

Dog fandt jeg denne her:

    http://webster.cs.ucr.edu/Page_win32/WindowsAsmPgm/html/Ch08.html

    Afsnit: "8.4: Keyboard Messages", Tabel: "Table 8-1"

hvor at du kan se en del af dem.

Her ser du f.eks. at 38 = $26 (hex 26) angiver VK_UP = "Up arrow key".
Avatar billede jgthb Nybegynder
29. maj 2006 - 21:17 #5
hvorfor er det forkert, kroning? programmet virker i hvert fald. men hvordan ville du så omskrive:
"
if kanFlytte then begin
    case key of
      38: // Op
        begin
"
...
Avatar billede nielle Nybegynder
29. maj 2006 - 21:36 #6
I teorien kunne skankoderne ændre sig sådan at 38 betyder noget andet en pil-op tasten. Jeg tvivler nu på at det sker, og ud for den betragtning gør det ikke så meget at man bruger konstanter (IMHO)...

Men det bliver nu nemmere at læse koden hvis man bruger VK-konstanterne:

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
{ Kaldes automatisk når spilleren trykker på en tast. }
var
    x, y: integer;
    linje: string;
begin
    if kanFlytte then begin
        case key of
            VK_UP: // Op
            begin
                imodY := spiller.Top-48;  // Ryk opad
                kanFlytte := false;
            end;
Avatar billede kroning Nybegynder
29. maj 2006 - 22:17 #7
Ja det er måske forkert at sige at det er forkert, men det jeg mener er som nielle skriver at det er nemmere at læse koden hvis man bruger VK-konstanterne.
Avatar billede stone Forsker
29. maj 2006 - 22:39 #8
enig det er det optimale
Avatar billede jgthb Nybegynder
29. maj 2006 - 22:58 #9
Hvis du lige ligger et svar nielle, så giver jeg point.
Avatar billede nielle Nybegynder
30. maj 2006 - 06:27 #10
Springer over på denne her, men ellers tak for timbudet. :^)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester