2016-11-29 12 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이 대답에서 제안 된 변경 사항은 설명하는 동작을 초래할 수 없습니다. 우리가 볼 수없는 것을 디버깅 할 것이라고 기대하지 마십시오. 자신의 코드를 디버깅하는 법을 배워야 할 때입니다. –