Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit Androidapi.Handheld;
- interface
- uses
- System.SysUtils,
- FMX.Types,
- FMX.Dialogs,
- FMX.Platform.Android,
- FMX.KeyMapping,
- Androidapi.Appglue,
- Androidapi.Input;
- type
- TOnScannerCompleted = procedure(ScanFormat, ScanContent: string) of object;
- TOnScannerError = procedure(ResultCode: Integer) of object;
- type
- TOnKeyUpHandheld = procedure (Keycode: Word) of object;
- TOnKeyDownHandheld = procedure (Keycode: Word) of object;
- THandheld = class(TObject)
- private
- { Private declarations }
- function MyHandleAndroidKeyEvent(AEvent: PAInputEvent): Int32;
- procedure SetActive(const Value: Boolean);
- protected
- FActive: Boolean;
- public
- { Public declarations }
- OnKeyUp: TOnKeyUpHandheld;
- OnKeyDown: TOnKeyDownHandheld;
- OnScannerCompleted: TOnScannerCompleted;
- OnScannerError: TOnScannerError;
- procedure DoScan;virtual;abstract;
- constructor Create;
- destructor Destroy; override;
- property Active: Boolean read FActive write SetActive;
- end;
- var
- LastInstance: THandheld;
- OldHandleAndroidInputEvent: function(App: PAndroid_app; Event: PAInputEvent): Int32; cdecl;
- implementation
- function MyHandleAndroidInputEvent(var App: PAndroid_app; AEvent: PAInputEvent): Int32; cdecl;
- var
- EventType: Int64;
- begin
- Result := OldHandleAndroidInputEvent(App, AEvent);
- EventType := AInputEvent_getType(AEvent);
- if EventType = AINPUT_EVENT_TYPE_KEY then
- if Assigned(LastInstance) then
- LastInstance.MyHandleAndroidKeyEvent(AEvent); // Keyboard input
- end;
- constructor THandheld.Create;
- begin
- inherited;
- LastInstance:=Self;
- OnKeyUp:=nil;
- OnKeyDown:=nil;
- Factive := false;
- OldHandleAndroidInputEvent := GetAndroidApp^.onInputEvent;
- GetAndroidApp^.onInputEvent := @MyHandleAndroidInputEvent;
- end;
- destructor THandheld.Destroy;
- begin
- GetAndroidApp^.onInputEvent := OldHandleAndroidInputEvent;
- LastInstance := nil;
- inherited;
- end;
- function THandheld.MyHandleAndroidKeyEvent(AEvent: PAInputEvent): Int32;
- var
- KeyCode, vkKeyCode, ScanCode: Word;
- KeyKind: TKeyKind;
- begin
- Result := 0;
- KeyCode := AKeyEvent_getKeyCode(AEvent);
- vkKeyCode := PlatformKeyToVirtualKey(KeyCode, KeyKind);
- //Read special (unknown keys)
- if (vkKeyCode = 0) and (KeyKind = TKeyKind.Unknown) then
- begin
- case AKeyEvent_getAction(AEvent) of
- AKEY_EVENT_ACTION_DOWN:
- begin
- ScanCode := AKeyEvent_getScanCode(AEvent);
- if Assigned(OnKeyDown) then OnKeyDown(Scancode);
- end;
- AKEY_EVENT_ACTION_UP:
- begin
- ScanCode := AKeyEvent_getScanCode(AEvent);
- if Assigned(OnKeyUp) then OnKeyUp(Scancode);
- end;
- end;
- end;
- end;
- procedure THandheld.SetActive(const Value: Boolean);
- begin
- FActive := Value;
- end;
- initialization
- LastInstance:=nil;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement