Add(MainForm,2953706,119,168) { Point(PHandle) link(onCreate,8770334:SetRawInput,[(163,188)(163,223)(107,223)(107,258)]) } Add(InlineCode,8770334,119,252) { WorkPoints=#11:SetRawInput| EventPoints=#9:onKeyDown|7:onKeyUp|8:onRepeat| DataPoints=#7:Control| Code=#15:unit HiAsmUnit;|0:|9:interface|0:|45:uses kol,Share,Debug,Windows,RInput,Messages;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|26: OldMessage:TOnMessage;|18: ctrl:PControl;|17: key,mes:UINT;|4: |68: function onMessage( var Msg: TMsg; var Rslt: Integer ): Boolean;|10: public |49: Control,onKeyDown,onKeyUp,onRepeat:THI_Event;|3: |50: procedure SetRawInput(var dt:TData; Idx:WORD);|5: end;|0:|14:implementation|0:|34:procedure THiAsmClass.SetRawInput;|38:var rid:array[0..0] of RAWINPUTDEVICE;|5:begin|43: ctrl:=PControl(ReadInteger(dt,Control));|32: OldMessage := ctrl.OnMessage;|35: Ctrl.OnMessage := onMessage; |27: RID[0].usUsagePage := 1;|27: RID[0].usUsage := 6;|41: RID[0].dwFlags := RIDEV_INPUTSINK;|37: RID[0].hwndTarget := Ctrl.Handle;|47: RegisterRawInputDevices(@RID,1,SizeOf(RID));|5:end; |0:|76:function THiAsmClass.onMessage( var Msg: TMsg; var Rslt: Integer ): Boolean;|6:const |22: WM_INPUT = $00FF;|17:var RI:RAWINPUT;|12: s:UINT;|5:begin|30:if Msg.message = WM_INPUT then|6: begin|22: s:=SizeOf(RAWINPUT);|81: GetRawInputData(HRAWINPUT(Msg.lParam),RID_HEADER,@RI,s,SizeOf(RAWINPUTHEADER));|46: if Ri.Header.dwType = RIM_TYPEKEYBOARD then|8: begin|82: GetRawInputData(HRAWINPUT(Msg.lParam),RID_INPUT,@RI,s,SizeOf(RAWINPUTHEADER));|113: if (key = RI.keyboard.vKey) and (mes = RI.keyboard.message) then _hi_OnEvent(onRepeat, RI.keyboard.vKey) else|32: case RI.keyboard.message of|57: WM_KEYDOWN:_hi_OnEvent(onKeyDown,RI.keyboard.vKey);|54: WM_KEYUP: _hi_OnEvent(onKeyUp,RI.keyboard.vKey);|9: end;|7: end;|27: key := RI.keyboard.vKey;|30: mes := RI.keyboard.message;|4:end;|45:Result := _hi_OnMessage(OldMessage,Msg,Rslt);|4:end;|0:|4:end.| link(Control,2953706:PHandle,[]) link(onKeyDown,7930936:doWork1,[]) link(onKeyUp,7930936:doWork2,[]) link(onRepeat,7930936:doWork3,[]) } Add(ChanelToIndex,7930936,168,252) { Count=3 Point(Data) link(onIndex,7108844:doGetString,[(208,258)(208,293)]) } Add(StrList,7108844,217,245) { Strings=#16:Нажата клавиша |15:Опущена клавиша|20:Удерживается клавиша| Point(doGetString) Point(onGetString) link(onGetString,3750159:doString,[]) } Add(FormatStr,3750159,266,252) { link(onFString,15090687:doAdd,[]) link(Str2,7930936:Data,[(279,240)(253,240)(253,303)(174,303)]) } Add(ListBox,15090687,315,252) { Left=50 Top=60 Width=130 Height=200 }