C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[74831] Re: VCL 때문에 일어나는 문제
빌더(TWx) [builder] 3197 읽음    2018-03-25 14:56
양승현.갈매기 님이 쓰신 글 :
:
:
: Properties에
: BackgroundColor
: BarColor
: 이 두가지는 왜 변경해도 적용이 안되는걸까요?
:
:
: SendMessage(ProgressBar1->Handle, PBM_SETBARCOLOR, 0, (LPARAM)(COLORREF)clRed);
:
: ProgressBar1->Perform( PBM_SETBARCOLOR, 0, clRed);
:
: 검색해보니 두가지 방법이 있어서
: 적용해보니 두가지 방법이 다 아무 반응이 없습니다.
:
: XE로 넘어오면서 뭔가 바뀐걸까요?
:
: 혹시 아시는 고수분 계시면 도움 주시면 감사하겠습니다.
:
:


답변:


위와 같은 문제는 VCL 라이브러리가 OS가 제공하는 Theme 기능을 고려해서 구현되어 있지 않기 때문 입니다.

radio button, groupbox, checkbox 및 ProgressBar를 포함해서 배경칼러 폰트컬러 등이 원하는 대로 동작하지 않는 이유는
XP 고전 classic Theme 이 아닌 Modern Theme 이 사용될 경우, OS 가 사용자들에게 고유한 Look & feel을 제공하기 위해서
콘트롤의 색깔 폰트색상 등을 변경할 수 있도록 하는 관련 메세지를... 콘트롤를 서브클래싱 한 오너에 라우팅하지 않기 때문인데.

프로젝트 옵션에서 Theme 기능을 사용하지 않도록 Manifest 옵션을 설정하든가 (RAD 10.2 경우에는 'Enable Runtime Themes' 끄기)
해당 콘트롤 개별적으로 Windows Theme API를 이용해서 Modern Theme 이 적용되지 않고, 고전 XP classic Theme이 적용
되도록 해줘야 합니다.

Modern Theme 이 사용 되는 경우라도...
Theme API를 이용해서 해당 콘트롤의 칼러, 폰트색상을 커스텀 하게 바꿀 수 있도록 관련 메세지들을 서브클래싱한 오너에
전달해 주도록 VCL 라이브러리가 구현되어 있으면 가능 한데...

VCL에는 그런 코드가 구현되어 있지 않습니다. 엠바 애들이 게을러 터진 건지. 고전 XP classic Theme 만 기준으로 해서 만들어진
기존의 구조를 지금 까지 바꾸지 않고 그대로 사용하고 있지요.


+ -

관련 글 리스트
74822 progressbar color 관련 질문입니다. 양승현.갈매기 3093 2018/03/21
74831     Re: VCL 때문에 일어나는 문제 빌더(TWx) 3197 2018/03/25
74843         Re:Re: VCL 때문에 일어나는 문제 양승현.갈매기 3087 2018/03/28
74838         Re:Re: VCL 때문에 일어나는 문제 질문 3061 2018/03/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.