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

时间:2016-11-29 06:09:01

标签: delphi delphi-xe3 vcl-styles

我想在我的应用程序中使用VCL Style。 我在事件OnShow,OnResize ......中有一些代码。

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

1 个答案:

答案 0 :(得分:1)

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

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

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