2016-11-29 7 views
-2

Я хочу использовать VCL Style в своем приложении. У меня есть некоторый код событий OnShow, OnResize ...Как отключить события во время выполнения Delphi 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; 

Called events.

+0

Там нет автоматического способа сделать это. Вы должны будете сами его закодировать. Попросите все ваши события выручить раньше, тестировав логическое значение, которое вы установили. –

ответ

1

Объявите логическую переменную, f.ex. InStyleChange: boolean;. Установите его True, прежде чем звонить по телефону TStyleManager.TrySetStyle() и сбрасывать на False сразу после.

Во всех обработчиков событий, где вы хотите, чтобы обойти код события записи вроде:

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

Когда я использую этот код. его работа несколько раз. Затем возникает исключение в моем приложении. – zgn

+1

@zgn, какой тип исключения? Если вы регистрируете до и после 'TrySetStyle', будут ли события позже? –

+0

@zgn Изменение, предложенное в этом ответе, не может привести к описанному вами поведению. Не ожидайте от нас отладки, чего мы не можем видеть. Пришло время научиться отлаживать собственный код. –

Смежные вопросы