新建一个工程,

 

uUIFunction.pas这个单元添加到工程中去,并且在主窗体中引用此单元,

 

 

在主窗体中引用OrangeUIuComponentType这个单元,

在主窗体上放置一个模拟虚拟键盘显示的Panel控件,

在虚拟键盘弹出的时候,会把这个Panel的高度设置为虚拟键盘的高度,

再设置主窗体的虚拟键盘事件:

 

在虚拟键盘显示事件OnVirtualKeyboardShown中,

加上用于通知Frame虚拟键盘事件显示的过程,

CallSubFrameVirtualKeyboardShown(Sender,Self,KeyboardVisible,Bounds);

 

虚拟键盘隐藏事件OnVirtualKeyboardHidden事件加上

加上用于通知Frame虚拟键盘事件隐藏的过程,

CallSubFrameVirtualKeyboardHidden(Sender,Self,KeyboardVisible,Bounds); 

 

 

并且在主窗体的OnShow事件中加入

启用模拟虚拟键盘、指定虚拟键盘模拟控件的代码,

修复Android下的虚拟键盘的代码,

以及处理虚拟键盘隐藏和显示的代码

如下图所示:

 

  //Windows平台下的模拟虚拟键盘控件

  IsSimulateVirtualKeyboardOnWindows:=True;

  //模拟虚拟键盘控件的高度

  SimulateWindowsVirtualKeyboardHeight:=160;

  GlobalAutoProcessVirtualKeyboardControlClass:=TSkinFMXPanel;

  GlobalAutoProcessVirtualKeyboardControl:=pnlVirtualKeyBoard;

  GlobalAutoProcessVirtualKeyboardControl.Visible:=False;

 

 

  {$IFNDEF MSWINDOWS}

  //在模拟器下设置为透明

  pnlVirtualKeyBoard.SelfOwnMaterialToDefault.IsTransparent:=True;

  pnlVirtualKeyBoard.Caption:='';

  {$ENDIF}

 

 

  //修复Android下的虚拟键盘隐藏和显示

  GetGlobalVirtualKeyboardFixer.StartSync(Self);

 

 

 

再新建一个FrameNameFrameLogin,单元名为LoginFrame.pas,

我们用它来做为登陆界面,

 

放好ScrollBox,取名为sbClient,Align设置为Client,

ScrollBox上面放好ScrollBoxContent,取名为sbcClient,

 

再在ScrollBoxContent上面放好用户名和密码所需要的控件,

edtPasswordedtUserName的控件类型必须是TSkinFMXEdit,

 

 

就要实现在uUIFunction.pas单元中定义的IFrameVirtualKeyboardEvent接口,

 

  IFrameVirtualKeyboardAutoProcessEvent=interface

    ['{D25150F4-EB4C-4097-93FE-51BFD19FF29D}']

    //当前需要处理的控件

    function GetCurrentPorcessControl(AFocusedControl:TControl):TControl;

    //虚拟键盘放在哪里

    function GetVirtualKeyboardControlParent:TControl;

  end;

 

 

LoginFrame.pasuses中引用uUIFunction单元,

FrameLogin的声明中加入IFrameVirtualKeyboardAutoProcessEvent,

 

 

 

再加入接口的两个方法,并实现它们,

 

 

 

在窗体的FormShow事件中动态创建LoginFrame来显示登陆页面,

var

  ALoginFrame:TFrameLogin;

begin

  ALoginFrame:=TFrameLogin.Create(Self);

  ALoginFrame.Parent:=Self;

  ALoginFrame.Align:=TAlignLayout.Client;

 

 

可以直接在Windows平台下点击SkinFMXEdit来模拟的虚拟键盘弹出的效果: