2016-11-29 2 views
-2

Ich möchte VCL Style's in meiner Anwendung verwenden. Ich habe einige Codes in Veranstaltungen OnShow, OnResize ...So deaktivieren Sie Ereignisse, wenn Laufzeit Delphi VCL Style ändert

Beim Wechsel Stil andere Form Ereignisse ausgelöst. (Technologieformulare, FormResize)

Wie Ereignisse, wenn sie auf Stil ändern deaktivieren.

Für Stil ändern i verwenden Code:

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

Beispielcode:

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

Es gibt keinen automatischen Weg, dies zu tun. Sie müssen es selbst programmieren. Lassen Sie alle Ihre Ereignisse frühzeitig ausbrechen, indem Sie einen von Ihnen festgelegten Booleschen Wert testen. –

Antwort

1

Deklarieren Sie eine boolean Variable, zb InStyleChange: boolean;. Stellen Sie True ein, bevor Sie TStyleManager.TrySetStyle() anrufen und gleich danach auf False zurücksetzen.

In allen Event-Handler in dem Sie das Ereignis Code schreiben wie umgehen möchten:

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

Wenn ich diesen Code verwende. es läuft einige Male. Dann löst Ausnahme in meiner Anwendung aus. – zgn

+1

@zgn, welche Art von Ausnahme? Wenn Sie sich vor und nach "TrySetStyle" anmelden, gibt es später Ereignisse? –

+0

@zgn Die in dieser Antwort vorgeschlagene Änderung kann nicht zu dem von Ihnen beschriebenen Verhalten führen. Erwarte nicht von uns, was wir nicht sehen können. Es ist Zeit für Sie zu lernen, Ihren eigenen Code zu debuggen. –

Verwandte Themen