2016-09-18 3 views
4

DX 베를린의 VCL 스타일로 [X] 닫기 버튼을 비활성화하고 싶습니다.Delphi - VCL 스타일의 [x] 닫기 버튼 해제

Wy이 코드는 VCL 스타일과 호환되지 않습니까? 당신이 caNoneFormClose 이벤트에서 작업을 설정하면

EnableMenuItem(GetSystemMenu(Form3.Handle, LongBool(False)),SC_CLOSE, MF_BYCOMMAND or MF_GRAYED); 
+1

스타일 엔진에서 버그가 발생 했나요? 위와 같이'SC_CLOSE'를 비활성화하면 ** 스타일이없는 응용 프로그램에서도 ** Alt - F4를 비활성화하지 않습니다. –

+0

@Tom Delphi 10 Seattle에서는 예상대로 작동하는 것 같습니다. 10.1 베를린을 아직 시도하지 않았습니다. –

+0

@ Jerry 예상대로 작동합니까? OP의 문제점이나 Alt-F4에 관한 의견을 참고 하시겠습니까? 시애틀과 베를린에서 모두 테스트했습니다 –

답변

3

, 당신은 아무것도 일어날되지 않습니다 (적십자 클릭) 폼을 닫습니다하려고합니다. 이 방법으로 버튼을 비활성화 할 수 있습니다.

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); 
begin 
//You cannot type only caNone, otherwise you'll get a compiler error 
Action := TCloseAction.caNone; 
end; 

System.UITypes에서 caNone을 찾을 수 있습니다. 자세한 내용은 documentation을 읽어보십시오.

+0

좋아,하지만 어떻게 내 양식을 닫을 수 있습니까? 프로그램에서 나가기 ?? Action : = TCloseAction.caNone을 사용하면 완벽하지만 앱을 종료하지는 않습니다. –

+0

@JuniorOliveira 형식에서 private 부울을 선언하십시오. AllowToClose' 이벤트를'AllowToClose then Action : = TCloseAction.caNone; '으로 변경하면 폼을 프로그래밍 방식으로 닫을 때'AllowToClose : = True;'를 설정하고'Form .Close'. –

+1

확인. 고마워. –

1

VCL 스타일을 사용하는 경우 기본적으로 스타일은 사용중인 글꼴, 양식의 클라이언트 영역 및 양식 테두리 (최소화, 최대화 및 닫기 버튼 포함)에 영향을줍니다.

그래서 내가 보는 것과 두 가지 옵션이 있습니다 : 당신은 스타일을 의미 [seFont, seClient]에 양식의 StyleElements 속성을 변경할 수

  1. 만 사용되는 글꼴과 폼의 클라이언트 영역 있지만 경계에 적용됩니다 양식의 영역은 OS에서 스타일이 지정되지 않고 렌더링됩니다.
  2. 원하는 효과를 얻으려면 런타임에 스타일을 수정하십시오. 불행히도 나는 이것을 달성하는 방법의 예를 여러분에게 소개 할 수있는 스타일에 대한 충분한 경험이 없습니다.
+0

확인. 고마워. –

관련 문제