Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在运行时Delphi VCL样式更改时禁用事件_Delphi_Delphi Xe3_Vcl Styles - Fatal编程技术网

如何在运行时Delphi VCL样式更改时禁用事件

如何在运行时Delphi VCL样式更改时禁用事件,delphi,delphi-xe3,vcl-styles,Delphi,Delphi Xe3,Vcl Styles,我想在我的应用程序中使用VCL样式。 我有一些代码在事件上显示,调整大小 更改样式时触发其他表单事件。(FormShow、FormResize) 如何在更改样式时禁用事件 对于更改样式,我使用代码: TStyleManager.TrySetStyle(cbStyles.Items[cbStyles.ItemIndex], True); 示例代码: procedure TForm1.AddLog(AMsg: String); begin if cbEnableLog.Checked th

我想在我的应用程序中使用VCL样式。 我有一些代码在事件上显示,调整大小

更改样式时触发其他表单事件。(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;

声明一个布尔变量f.ex<代码>InStyleChange:布尔值。在调用
TStyleManager.TrySetStyle()
之前将其设置为
True
,然后立即重置为
False

在所有要绕过事件的事件处理程序中,编写如下代码:

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

没有自动的方法可以做到这一点。你得自己编代码。通过测试您设置的布尔值,让您的所有事件尽早恢复。当我使用类似于此代码的代码时。它运行了几次。然后在我的应用程序中引发异常。@zgn,什么类型的异常?如果您在
TrySetStyle
之前和之后登录,是否会有后续事件发生?@zgn此答案中建议的更改不会导致您描述的行为。不要期望我们调试我们看不到的东西。是时候学习调试自己的代码了。@LU-RD异常是:创建windows设备上下文时出错。谢谢。根据您为两个事件处理程序显示的代码,我建议的修改不可能成为异常的原因。显示引发异常的事件处理程序的真实完整代码。