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
Post a Comment