33.2.OrangeUI控件使用说明(虚拟键盘控制-防止Edit遮挡)(Frame中处理2)

新建一个工程,

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

在主窗体中引用OrangeUI的uComponentType这个单元,

在主窗体上放置一个模拟虚拟键盘显示的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);

 

 

再新建一个Frame,Name为FrameLogin,单元名为LoginFrame.pas,

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

 

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

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

 

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

edtPassword和edtUserName的控件类型必须是TSkinFMXEdit,

 

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

 

IFrameVirtualKeyboardAutoProcessEvent=interface

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

//当前需要处理的控件

function GetCurrentPorcessControl(AFocusedControl:TControl):TControl;

//虚拟键盘放在哪里

function GetVirtualKeyboardControlParent:TControl;

end;

 

在LoginFrame.pas的uses中引用uUIFunction单元,

在FrameLogin的声明中加入IFrameVirtualKeyboardAutoProcessEvent,

 

 

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

 

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

var

ALoginFrame:TFrameLogin;

begin

ALoginFrame:=TFrameLogin.Create(Self);

ALoginFrame.Parent:=Self;

ALoginFrame.Align:=TAlignLayout.Client;

 

 

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

 

 

 

 

 

 

 

发表评论