2011-03-28 2 views
0

응용 프로그램 중 하나에서 우리는 사용자 정의 색상을 사용하고 여러 가지 경우에 표준 Windows 팔레트를 본질적으로 무시합니다 (예를 들어 WindowText를 Blue 대신 Blue로 설정). 내 생각은 논리 팔레트를 만들고 SelectPalette 및 RealizePalette를 사용하여 응용 프로그램에 적용하는 것입니다.하지만이 예제를 사용하는 좋은 예는 없습니다. 가능한가요?논리 팔레트를 시스템 팔레트 대신 사용할 수 있습니까?

답변

3

당신이 요구하는 것은 GetStockObject의 역이 될 것입니다. (물론 정확하게는 관련이있는 GetSysColor과 같은 색인을 사용하는 몇 가지 기능이 있습니다.) 그러나 프로세스 당 설정하는 기능은 없습니다 (시스템 차원의 SetSysColors를 사용하려는 경우가 아니면 질문에서 제외됩니다). 가장 좋은 방법은 - 그리고 가장 쉬운 방법은 - 프로세스 내에서 그 함수를 연결하는 것입니다 (Windows는 gwd32.dll에 의해 점유 된 메모리 내에 윈도우를 복사 할 수 있으므로 copy-on-write 부분을 수행합니다) (브러쉬, 글꼴, 펜, 색상). 응용 프로그램이 끝나면 GDI 개체를 정리하십시오. 이것은 정확히 당신이 요구하는 것들이지만, 델파이에서 그 효과를 얻기위한 가장 쉬운 방법은 아닙니다. 편집 : David Heffernan은 후킹에 대한 제안이 테마를 고려하지 않는다고 지적했습니다. 그가 맞아. 아마 이것이 최선의 방법은 아닙니다.

그러나 델파이를 사용한다면 커스터마이즈 할 VCL 클래스를 추출하는 것이 가장 쉽습니다 (컨트롤과 폼 모두에 유용합니다). 또는 RTTI를 사용하여 양식의 요소를 반복하고 필요에 따라 요소를 수정합니다 (균일하게 및 제어 유형에 따라).

응용 프로그램에서 응용 프로그램의 일부 컨트롤에 대해서만 필요하면 WM_CTLCOLOREDIT 및 친구들이 내 쉬운 방법입니다.

어느 방법 : 응용 프로그램이 익숙한 제어 요소, 스타일, 색상을 사용하는 경우는 ... 사용성 및 애플리케이션의 UX (사용자 경험)는 일반적으로 더 나은 것을

+2

+1은 특히 "어느 쪽이든"의견입니다.그것은 나의 시스템이고, 나는 주제를 선택한다. –

+1

GetStockObject 및 GetSysColor를 연결하는 경우에도 테마 API는 무엇입니까? 정말로 이것을 원한다면 아마도 앱을 스킨해야합니다. 하지만 앱의 사용성이 망가졌습니다. –

+0

@David : 사실입니다. 테마 API도 고려하지 않았습니다. – 0xC0000022L

2

요즘 왜 팔레트를 사용해야합니까? 원하는대로 RGB 값을 사용하십시오.

팔레트는 8 비트 (및 그 이하) 컬러 장치의 날짜로 거슬러 올라갑니다. 이제 우리 모두 16 비트 컬러로 이동했으며 최근에는 32 비트 컬러로 유물이되었습니다.

+5

팔레트는 도움이되지 않습니다. 이 설명에서 말하는 내용을 나타내려면 질문을 편집해야합니다. –

1

톰, 당신이 무엇을 요구하는지을 고려하시기 바랍니다 VCL의 일부 컨트롤에서는 다른 것보다 더 쉽게 수행 할 수 있습니다. 보다 철저한 솔루션을 원하시면 Delphi의 테마 또는 스키닝 솔루션에 관심이있을 수 있습니다. 이렇게하면 맞춤 색상뿐만 아니라 완전히 맞춤 설정된 모양을 얻을 수 있습니다.

델파이에는 다양한 테마 및 스키닝 시스템이 있습니다. 당신이 말하는 "논리적 팔레트"는 실제로 Windows 시스템 색 구성표입니다. Windows GetSysColor 함수를 연결하는 것으로 끝나고, 희망대로 작동하지 않습니다.

대신, 철저한 솔루션을 시도 : Skins (도시 링크가 SpTbxLib 스킨입니다) enter image description here

이 덧붙여, 어떤 사람들은 피부 애플 리케이션 (다른 질문에 대한 의견을 참조) 미워하고 그래서 당신이 구현하는 피부 기능이 있어야한다을 OFF 스위치. 또한 일부 사람들은 시력이 제한되어 있고 창 고 대비 테마 작업에 의존합니다. 당신이 만드는 것을 사용해야하는 가난한 사람들을 생각해보십시오.

+0

이 응용 프로그램은 스킨 될 수없는 다른 구성 요소를 사용하므로 스키닝이 좋지 않습니다. 고 대비는 결정된 계획에 문제가되지 않으며 사용자는 하루 종일 컴퓨터를 하루 종일 사용하는 전문가입니다 (제한된 시장). –

+0

필자는 스킨화할 수없는 많은 구성 요소를 실행하지 않았습니다. 아마도 OpenGL, DirectX API 또는 GDI +를 사용할 수 없습니다. 평범한 오래된 GDI는 아마 피부를 벗길 수 있습니다. –

+0

우리는 Delphi 5를 가지고 있습니다.이 골동품과 작동하는 스키닝 컨트롤을 찾는 것은 해적 가고 싶지 않으면 불가능합니다. 그것은 저에게 선택 사항이 아닙니다. –

관련 문제