2014-12-03 5 views
3

Windows (컨트롤 6.0)에서 정의한 테마에 따라 컨트롤을 표시 할 수 있도록 Delphi 6 응용 프로그램의 매니페스트 파일을 만들었습니다.TBitBtn은 레거시 Windows 테마 만 사용하여 표시합니다.

Legacy TBitBtn

동작이 더 이미지가 할당되지 않은 경우에도 관계없이 현재 테마, 윈도우 XP 및 Windows 7에서 동일 : 모든 기존 테마를 사용하여 표시됩니다 TBitBtn 구성 요소를 제외하고, 잘 보인다 TBitBtn 구성 요소.

이제 일반 TButton 구성 요소를 양식에 배치하면 OK가 표시됩니다. 그런 다음 런타임에 프로그래밍 방식으로이 단추에 이미지를 설정하면 (SendMessage(Handle, BM_SETIMAGE, IMAGE_ICON, LPARAM(Icon)) 사용) 즉시 스타일을 기존 단추로 되돌립니다.

TBitBtn을 올바른 스타일로 사용하거나 TButton에 글리프를 표시하려면 Delphi 6의 레거시 스타일로 되돌리지 않고 말합니까?

+1

내가 (또는'BS_ICON' 스타일을 설정하지 않고) WINXP와 BM_SETIMAGE' '에 의지하지 않을 것입니다. 예상대로 작동하지 않습니다! Win7에서는 문제가 없어야합니다. – kobik

+0

당신 말이 맞아요 - 그것은 캡션을 제거했지만 이미지를 표시하고 스타일을 되돌 렸습니다. WM_SETICON이 작동하지 않았습니다. – adlabac

답변

5

델파이 6에서는 comctl32 v6 매니페스트를 추가하는 것만으로는 충분하지 않습니다. 테마 인식을 위해 VCL을 수정해야합니다. TBitBtn 컨트롤은 VCL 구현 컨트롤로서 Delphi 6의 화신에서는 XP 테마에 대해 아무것도 모릅니다.

이 문제를 해결하는 표준 방법은 마법을 수행하는 타사 소프트웨어를 추가하는 것입니다. 그게 XP theme manager from Mike Lischke입니다.

다음은 테마 관리자를 포함하는 델파이 6 응용 프로그램에서 스크린 샷입니다 :

enter image description here

+3

답변 해 주셔서 감사합니다. 나에게 무슨 수수께끼가 생기는 이유는 런타임에 이미지를 설정할 때'TButton '이 레거시로 되돌아가는 이유입니다. – adlabac

+1

VCL이 어떤 이유로 든 페인팅을 담당한다고 생각합니다. 다시 말하지만, 테마 관리자는이를 수정합니다. 즉, 테스트에서 나는 당신이보고하는 행동을 관찰하지 않습니다. –

+0

'TButton' 또는'TBitBtn' 행동인가요? 델파이 6? – adlabac