android虚拟按键 判断,如何检测虚拟键盘事件中的Android用Delphi

我不得不用键盘在tmemo同样的问题,尝试这两个函数和事件OnVirtualKeyboardShown和OnVirtualKeyboardHidden

public

{ Public declarations }

FSavedY: Single;

FocusControl: TControl;

ParentedControl: TFMXObject;

function FocusedControl: TControl;

function GetFocusedControlOffset(KeyboardRect: TRect): Single;

...

function TfrmFeedBackMobile.FocusedControl: TControl;

begin

Result := nil;

if Assigned(Focused) and (Focused.GetObject is TControl) then

Result := TControl(Focused.GetObject);

end;

function TfrmFeedBackMobile.GetFocusedControlOffset(KeyboardRect: TRect): Single;

var

Control: TControl;

ControlPos: TPointF;

KeyboardTop: Single;

begin

Result := 0;

KeyboardTop := Height - (KeyboardRect.Bottom - KeyboardRect.Top) - 66;

// At least, should be. 66 is the height of the keyboard "done" bar

Control := FocusedControl;

if Assigned(Control) then

begin

ControlPos := Control.LocalToAbsolute(PointF(0, 0));

Result := KeyboardTop - ControlPos.Y + Control.Height + 2;

if Result >= 0 then

Result := 0;

end;

end;

procedure TfrmFeedbackMobile.FormVirtualKeyboardHidden(Sender: TObject;

KeyboardVisible: Boolean; const Bounds: TRect);

begin

FocusControl.Parent:= ParentedControl;

FocusControl.AnimateFloat('Position.Y', FSavedY, 0.1);

FocusControl.Align := TAlignLayout.alClient;

FocusControl:= nil;

end;

procedure TfrmFeedbackMobile.FormVirtualKeyboardShown(Sender: TObject;

KeyboardVisible: Boolean; const Bounds: TRect);

begin

FocusControl:= FocusedControl;

if not (FocusControl is TMemo) then Exit;

FocusControl.Align := TAlignLayout.alNone;

FSavedY := FocusControl.Position.Y;

FocusControl.Position.Y:= 0;

FocusControl.AnimateFloat('Position.Y',

FSavedY + GetFocusedControlOffset(Bounds), 0.1);

ParentedControl:= FocusControl.Parent;

FocusControl.Parent:= frmFeedbackMobile;

FocusControl.BringToFront;

end;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值