2016-11-29 67 views
-2

私のアプリケーションでVCLスタイルを使用したいと思います。 は私が 実行時のイベントを無効にする方法Delphi VCLスタイルの変更

がどのように変化するスタイルでイベントを無効にする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.

+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この回答に示唆された変更は、あなたが記述した動作につながりません。我々が見ることができないものをデバッグすることを期待しないでください。自分のコードをデバッグすることを学ぶべき時です。 –

関連する問題