delphi - GetAsyncKeyState "strange" behavior -


i have 2 simple forms, form1 , form2 (delphi 7). form1 opens form2, , there wait specific key combination (ctrl + f2). once close form2 , form1, need check if ctrl key pressed. here example:

form2

procedure tform2.formkeydown(sender: tobject; var key: word;   shift: tshiftstate); begin   if (shift = [ssctrl]) , (key = vk_f2)     showmessage('ctrl + f2 pressed!'); end; 

form1

procedure tform1.btn1click(sender: tobject); begin   try     application.createform(tform2, form2);     form2.showmodal;       form2.release;     form2 := nil;   end; end;  procedure tform1.btn2click(sender: tobject); begin   if (getasynckeystate(vk_control) <> 0)     showmessage('ctrl pressed!'); end; 

problem is, everytime press ctrl + f2 on form2, seems ctrl key got stuck, , (getasynckeystate(vk_control) <> 0) return true.

please, know going on (and how solve)?

your test wrong. documentation:

if function succeeds, return value specifies whether key pressed since last call getasynckeystate, , whether key or down. if significant bit set, key down, , if least significant bit set, key pressed after previous call getasynckeystate.

to test key being down, @ significant bit being set. is, if value negative:

if getasynckeystate(vk_control) < 0 

i suggest should calling getkeystate instead, state when button pressed rather getasynckeystate state later when process message.


Comments

Popular posts from this blog

routing - AngularJS State management ->load multiple states in one page -

python - GRASS parser() error -

Swift game error message -