2016-11-29 78 views
-2

我想在我的应用程序中使用VCL Style。 我在事件的一些代码OnShow中,onResize受到...如何在运行时Delphi VCL Style更改时禁用事件

在款式多变触发其他形式的活动。(FormShow,FormResize)

如何禁用转变作风时事件。

对于改变风格,我使用代码:

TStyleManager.TrySetStyle(cbStyles.Items[cbStyles.ItemIndex], True); 

示例代码:

procedure TForm1.AddLog(AMsg: String); 
begin 
    if cbEnableLog.Checked 
    then Memo1.Lines.Append(AMsg); 
end; 

procedure TForm1.bChangeClick(Sender: TObject); 
begin 
    TStyleManager.TrySetStyle(cbStyles.Items[cbStyles.ItemIndex],True); 
end; 

procedure TForm1.FormResize(Sender: TObject); 
begin 
    AddLog('FormResize'); 
end; 

procedure TForm1.FormShow(Sender: TObject); 
begin 
    AddLog('FormShow'); 
end; 

Called events.

+0

有没有自动的方式来做到这一点。你必须自己编写代码。通过测试您设置的布尔值,让您的所有事件早日获得救助。 –

回答

1

声明一个布尔变量,f.ex. InStyleChange: boolean;。在您致电TStyleManager.TrySetStyle()之前将其设置为True,然后重置为False

在你想绕过类似事件写代码的所有事件处理:

procedure TForm1.FormResize(Sender: TObject); 
begin 
    if InStyleChange then exit; 
    AddLog('FormResize'); 
end; 
+0

当我使用像这样的代码。它运行几次。然后在我的应用程序中引发异常。 – zgn

+1

@zgn,什么类型的异常?如果你在'TrySetStyle'之前和之后登录,事件是否有更晚的时间? –

+0

@zgn此答案中建议的更改不会导致您描述的行为。不要指望我们调试我们看不到的东西。现在是您学习调试自己的代码的时候了。 –