응용 프로그램 중 하나에서 우리는 사용자 정의 색상을 사용하고 여러 가지 경우에 표준 Windows 팔레트를 본질적으로 무시합니다 (예를 들어 WindowText를 Blue 대신 Blue로 설정). 내 생각은 논리 팔레트를 만들고 SelectPalette 및 RealizePalette를 사용하여 응용 프로그램에 적용하는 것입니다.하지만이 예제를 사용하는 좋은 예는 없습니다. 가능한가요?논리 팔레트를 시스템 팔레트 대신 사용할 수 있습니까?
답변
당신이 요구하는 것은 GetStockObject
의 역이 될 것입니다. (물론 정확하게는 관련이있는 GetSysColor
과 같은 색인을 사용하는 몇 가지 기능이 있습니다.) 그러나 프로세스 당 설정하는 기능은 없습니다 (시스템 차원의 SetSysColors를 사용하려는 경우가 아니면 질문에서 제외됩니다). 가장 좋은 방법은 - 그리고 가장 쉬운 방법은 - 프로세스 내에서 그 함수를 연결하는 것입니다 (Windows는 gwd32.dll에 의해 점유 된 메모리 내에 윈도우를 복사 할 수 있으므로 copy-on-write 부분을 수행합니다) (브러쉬, 글꼴, 펜, 색상). 응용 프로그램이 끝나면 GDI 개체를 정리하십시오. 이것은 정확히 당신이 요구하는 것들이지만, 델파이에서 그 효과를 얻기위한 가장 쉬운 방법은 아닙니다. 편집 : David Heffernan은 후킹에 대한 제안이 테마를 고려하지 않는다고 지적했습니다. 그가 맞아. 아마 이것이 최선의 방법은 아닙니다.
그러나 델파이를 사용한다면 커스터마이즈 할 VCL 클래스를 추출하는 것이 가장 쉽습니다 (컨트롤과 폼 모두에 유용합니다). 또는 RTTI를 사용하여 양식의 요소를 반복하고 필요에 따라 요소를 수정합니다 (균일하게 및 제어 유형에 따라).
응용 프로그램에서 응용 프로그램의 일부 컨트롤에 대해서만 필요하면 WM_CTLCOLOREDIT
및 친구들이 내 쉬운 방법입니다.
어느 방법 : 응용 프로그램이 익숙한 제어 요소, 스타일, 색상을 사용하는 경우는 ... 사용성 및 애플리케이션의 UX (사용자 경험)는 일반적으로 더 나은 것을
요즘 왜 팔레트를 사용해야합니까? 원하는대로 RGB 값을 사용하십시오.
팔레트는 8 비트 (및 그 이하) 컬러 장치의 날짜로 거슬러 올라갑니다. 이제 우리 모두 16 비트 컬러로 이동했으며 최근에는 32 비트 컬러로 유물이되었습니다.
팔레트는 도움이되지 않습니다. 이 설명에서 말하는 내용을 나타내려면 질문을 편집해야합니다. –
톰, 당신이 무엇을 요구하는지을 고려하시기 바랍니다 VCL의 일부 컨트롤에서는 다른 것보다 더 쉽게 수행 할 수 있습니다. 보다 철저한 솔루션을 원하시면 Delphi의 테마 또는 스키닝 솔루션에 관심이있을 수 있습니다. 이렇게하면 맞춤 색상뿐만 아니라 완전히 맞춤 설정된 모양을 얻을 수 있습니다.
델파이에는 다양한 테마 및 스키닝 시스템이 있습니다. 당신이 말하는 "논리적 팔레트"는 실제로 Windows 시스템 색 구성표입니다. Windows GetSysColor 함수를 연결하는 것으로 끝나고, 희망대로 작동하지 않습니다.
대신, 철저한 솔루션을 시도 : Skins (도시 링크가 SpTbxLib 스킨입니다)
이 덧붙여, 어떤 사람들은 피부 애플 리케이션 (다른 질문에 대한 의견을 참조) 미워하고 그래서 당신이 구현하는 피부 기능이 있어야한다을 OFF 스위치. 또한 일부 사람들은 시력이 제한되어 있고 창 고 대비 테마 작업에 의존합니다. 당신이 만드는 것을 사용해야하는 가난한 사람들을 생각해보십시오.
이 응용 프로그램은 스킨 될 수없는 다른 구성 요소를 사용하므로 스키닝이 좋지 않습니다. 고 대비는 결정된 계획에 문제가되지 않으며 사용자는 하루 종일 컴퓨터를 하루 종일 사용하는 전문가입니다 (제한된 시장). –
필자는 스킨화할 수없는 많은 구성 요소를 실행하지 않았습니다. 아마도 OpenGL, DirectX API 또는 GDI +를 사용할 수 없습니다. 평범한 오래된 GDI는 아마 피부를 벗길 수 있습니다. –
우리는 Delphi 5를 가지고 있습니다.이 골동품과 작동하는 스키닝 컨트롤을 찾는 것은 해적 가고 싶지 않으면 불가능합니다. 그것은 저에게 선택 사항이 아닙니다. –
- 1. Mathematica에서 팔레트를 찾는 방법?
- 2. eclipse rcp 팔레트 생성
- 3. PyGObject 대신 사용할 수 있습니까?
- 4. instanceof 대신 사용할 수 있습니까?
- 5. progressbar 대신 사용할 수 있습니까?
- 6. 세션 대신 세션 토큰을 사용할 수 있습니까?
- 7. Linux 시스템 용 gdb 대신 사용할 수있는 옵션이 있습니까?
- 8. PHP의 ASP.NET UserControls 대신 사용할 수 있습니까?
- 9. 제네릭을 지원하는 xdoclet 대신 사용할 수 있습니까?
- 10. CABasicAnimation 콜백 대신 사용할 수 있습니까?
- 11. InstantDjango를 일반 설치 대신 사용할 수 있습니까?
- 12. Jython의 interrupt_main() 대신 사용할 수 있습니까?
- 13. Silverlight 3의 TypeDescriptor 대신 사용할 수 있습니까?
- 14. 데이터 저장을위한 데이터베이스 대신 사용할 수 있습니까?
- 15. Emacs의 C 키 대신 사용할 수 있습니까?
- 16. 오류 대신 '엄격한'경고를 사용할 수 있습니까?
- 17. offsetLeft 및 offsetTop 대신 사용할 수 있습니까?
- 18. 연속을 재귀 대신 사용할 수 있습니까?
- 19. ms 차트 컨트롤 대신 사용할 수 있습니까?
- 20. java 용 servicewrapper 대신 사용할 수 있습니까?
- 21. eval() 대신 무엇을 사용할 수 있습니까?
- 22. WPF의 MDI 대신 사용할 수 있습니까?
- 23. Select 대신 SingleNode를 사용할 수 있습니까?
- 24. YSlow 대신 Perl을 사용할 수 있습니까?
- 25. pseq 대신 seq를 사용할 수 있습니까?
- 26. minibufexplorer (vim) 대신 사용할 수 있습니까?
- 27. Flash CS4에는 ASDoc 대신 사용할 수 있습니까?
- 28. GLUT 대신 AUX_RGBImageRec을 사용할 수 있습니까?
- 29. ISet 대신 IList를 사용할 수 있습니까?
- 30. gcc의 --sysroot 스위치 대신 사용할 수 있습니까?
+1은 특히 "어느 쪽이든"의견입니다.그것은 나의 시스템이고, 나는 주제를 선택한다. –
GetStockObject 및 GetSysColor를 연결하는 경우에도 테마 API는 무엇입니까? 정말로 이것을 원한다면 아마도 앱을 스킨해야합니다. 하지만 앱의 사용성이 망가졌습니다. –
@David : 사실입니다. 테마 API도 고려하지 않았습니다. – 0xC0000022L