由于我是第一次使用Gestures和GestureManager,因此我面临着因应用程序运行延迟而导致未知原因的非常陌生的情况。 (VCL类型申请)
似乎当我将TGestureManager应用于表单的Touch.GestureManager属性时,当第一次调用该表单时,应用程序冻结/延迟大约为5秒。即使根本没有启用(选中)手势也是如此。一旦我从表单中删除Touch.GestureManager属性,表单就会立即显示Form.Show事件。应用程序在启动时创建所有表单,因此在我调用Form.Show事件时已经创建了表单。
表单本身非常重(FullHD分辨率大小,其上放置了相当多的组件......),但没有使用GestureManager时没有显示任何速度问题...
到目前为止,我只能在网上找到一个关于此问题的主题,但答案并非真正有用(建议在PC上打开平板电脑和#34;选项。这已经完成了...)
干杯
修改 On" less-heavy"形式,(较少的组件),延迟略低,但仍然约2-3秒......
EDIT2码
创建延迟的示例:
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
var
Form1: TForm1;
implementation
{$R *.dfm}
uses Unit2;
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.show;
end;
end.
调用form2,它是一个干净的表单,上面有20个TAdvGlassButton对象(TMS组件包的一部分),以及GestureManager,它被分配给Form2.Touch.GestureManager属性。按下Button1时会产生大约2秒的延迟(并且应显示Form2);
答案 0 :(得分:0)
猜猜我只是想出了自己的回答问题"为什么"延迟出现了。
现在,"如何解决它",如果有人认为这个问题仍然存在......
至于'为什么'被认为是......:
看起来TMS Components(我可以确认)会自动获取父窗体的Touch属性! 因此,乍一看,看起来手势在整个表单和控件上工作只是因为按钮在任何时候都没有真正关注,但事实并非如此!除非受到限制,否则手势不应对他们起作用。既然它们是,我认为每个元素都分配了触摸属性。
因此,这会导致表单上有大量元素,在首次显示表单时都会使用Touch属性,这显然会导致我遇到的延迟。
在表单上创建一个面板并在所有控件后面实际上看起来没有任何改变,但它确实 - >表格是可见的,手势只在面板(背景)可见的区域工作(羞耻,让它们在按钮上工作会很好,但不是因为那么多的延迟!),并且不知何故符合我的需要。
现在,为什么TMS组件自动采用表单属性是一个非常好的问题,以及如何禁用该功能......