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

uUIFunction.pas中有在Frame中处理虚拟键盘的相关函数和接口,

这个文件在OrangeUI Samples(示例)\OrangeProjectCommon目录里面,

 

新建一个工程,

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

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

 

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

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

CallSubFrameVirtualKeyboardShown(Sender,Self,KeyboardVisible,Bounds);

 

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

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

CallSubFrameVirtualKeyboardHidden(Sender,Self,KeyboardVisible,Bounds);

 

并且在主窗体的OnShow事件中加入修复Android下的虚拟键盘隐藏和显示的代码:GetGlobalVirtualKeyboardFixer.StartSync(Self);

 

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

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

 

在Frame上放好Panel,取名为pnlVirtualKeyboard,

Align设置为Bottom,

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

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

 

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

如下图所示:

Frame要想响应虚拟键盘显示和隐藏的事件,

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

 

IFrameVirtualKeyboardEvent=interface

[‘{3EA28E86-BEC2-432A-A744-C5210B0D3B85}’]

//显示虚拟键盘

procedure DoVirtualKeyboardShow(KeyboardVisible: Boolean; const Bounds: TRect);

//隐藏虚拟键盘

procedure DoVirtualKeyboardHide(KeyboardVisible: Boolean; const Bounds: TRect);

end;

在LoginFrame.pas的引用uUIFunction单元,

在FrameLogin的声明中加入IFrameVirtualKeyboardEvent,

再加入接口的两个方法,

并实现这两个方法:

就是在虚拟键盘隐藏的时候,把pnlVirtualKeyboard的高度设置为0,

在虚拟键盘显示的时候,把它的高度设置为虚拟键盘的高度,

这样,ScrollBox的滚动空间就在虚拟键盘上面了,不会被挡住,

再设置ScrollBox.VertScrollBar的滚动位置为刚好显示出来登陆按钮,

 

 

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

var

ALoginFrame:TFrameLogin;

begin

ALoginFrame:=TFrameLogin.Create(Self);

ALoginFrame.Parent:=Self;

ALoginFrame.Align:=TAlignLayout.Client;

 

 

 

 

发表评论