2016-11-29 76 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此答案中建議的更改不會導致您描述的行爲。不要指望我們調試我們看不到的東西。現在是您學習調試自己的代碼的時候了。 –