Jak rozróżnić klawisze w OnKeyDown?

Odpowiedz Nowy wątek
2011-09-04 12:13
skater
0

Jeżeli w OnKeyDown formy dam taki kod

Caption := IntToStr(Ord(Char(Key)));

To w belce będzie wyświetlać kody ASCII klawiszy. Niby działa, ale jak wcisnę Lewy Ctrl i Prawy Ctrl to będzie zawsze 17.

Tuningowałem kod do takiej postaci

if Ord(Char(Key)) = 18 then Caption := 'right alt'
  else

Noi działa poprawnie. Wciskam prawy alt i jest dobrze.
Problem pojawia się przy lewym alt'cie. Jeżeli wcisnę Prawy alt, belka zmieni się za każdym razem. Niestety przy lewym alcie, dopiero co drugie wciśnięcie jest zaliczane o.O

Moje pytania:

  1. Jak rozróżnić Lewy i Prawy Ctrl bez zakładania hooka?
  2. Jak sprawić by każde wciśnięcie lewego altu było brane pod uwagę?

Pozostało 580 znaków

2011-09-04 12:59
0

Tylko małe pytanie: Po co do cholery najpierw zamieniasz bajt (a właściwie word) na char, żeby potem znowu go przetworzyć na bajta? Bo jak na mój rozum to nie ma sensu.

EDIT: Wytestowałem na lazarusie, 17 - Ctrl (nie ważne który), 16 - Shift (nie ważne który), 18 - Alt (nie ważne który).

Niestety przy lewym alcie, dopiero co drugie wciśnięcie jest zaliczane o.O

Wydaje mi się że wykonywane jest menu którego nie ma i jest zmieniany focus. Daj keypreviewa, powinno pomóc... No dobra, nie pomoże, ale pomoże ustawianie key:=0; .


Nie pisz do mnie PM o czymś co nie dotyczy bezpośrednio mnie. | Nie rozmawiaj ze mną jeśli brak Ci kultury (wystarczy że mi brakuje) | Nie jestem zły, jestem po prostu zły.
edytowany 3x, ostatnio: payl, 2011-09-04 13:10

Pozostało 580 znaków

2011-09-04 13:09
0
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if ((GetKeyState(VK_LCONTROL) and 128) = 128) then
   ShowMessage('VK_LCONTROL'); //lewy control
 if ((GetKeyState(VK_RCONTROL) and 128) = 128) then
   ShowMessage('VK_RCONTROL'); //prawy control
 if ((GetKeyState(VK_LMENU) and 128) = 128) then
   ShowMessage('VK_LMENU'); //lewy alt
 if ((GetKeyState(VK_RMENU) and 128) = 128) then
   ShowMessage('VK_RMENU'); //prawy alt
end;

A z tym lewym ALT to nie wiem o co chodzi u mnie (na Windows XP) wykrywa każde wciśnięcie.


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.

Pozostało 580 znaków

2011-09-04 14:37
skater
0

No jak wcisnę lewy alt, wychwyca, znowu, nie wychwyca, znowu wychwyca, znowu, nie wychwyca... it tak dalej.

Mówiłem: ustaw key na 0, i pomoże. - payl 2011-09-04 14:51

Pozostało 580 znaków

2011-09-04 14:56
skater
1

Wolę rozwiązanie kAzka.

Bo trudniejsze, bo yyyy... ??? Nie działa??? I dlatego piszesz że wybierasz rozwiązanie które nie działa i że nie działa? (clap). Zresztą, te rozwiązania można wymieszać jeśli umie się programować... - payl 2011-09-04 15:13

Pozostało 580 znaków

2011-09-04 15:23
skater
1

Nie, bo rozróżnia ctrl'e i alty.

Dobra, to idź się męcz, i wróć jak zrozumiesz że można oba rozwiązania wymieszać. - payl 2011-09-04 16:23

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0