2014-09-19 3 views
2

기존 델파이 구성 요소의 인식 사람, 즉 TBitBtn처럼 올바르게 동작하는 구성 요소가 있습니까?

  • 가 제대로이 TButton 같은 테마입니다
  • 이 TBitBtn하지만 같은 문양을 지원 (/ 위 Windows 7에서 마우스 호버에 따라 효과를 페이드 아웃 및 페이드가 있습니다) ImageLists를 사용하지 않고 (TBitBtn과 같은 방식으로).

사용할 수있는 구성 요소가 없으면 TBitBtn의 테마 동작을 수정하여 TButton의 동작을 복제 할 수 있습니까? 나는 주제에 대한 마스터가 아니지만, ThemeServices에서 다른 페이드 인 페이드 아웃 단계를 얻을 수 있을까요? 또는 핫 상태와 비 핫 상태 사이에서 평균화하여 페이드 효과를 직접 만들어야합니까?

+2

이미지 목록에 어떤 문제가 있습니까? 개인적으로 나는'TBitBtn'을 오랫동안 Delphi에서 삭제해야만했던 것으로 발견했습니다. (그리고 나는 [혼자가 아닙니다] (http://stackoverflow.com/a/4629905/960757)). 왜'TBitBtn'을 선호합니까? – TLama

답변

5

VCL TButton이 이미지 목록을 사용하여 이미지를 구현하는 이유는 기본 Win32 BUTTON 컨트롤이 이미지를 지원하는 방식 때문입니다. 페이드 인/페이드 아웃 애니메이션으로 전체 테마를 지원하려면 네이티브 컨트롤을 사용해야합니다. 글쎄, 당신은 스스로 이러한 효과를 복제하려고 할 수 있지만 성공의 기회는 낮다고 생각합니다. 그리고 당신은 언제나 테마 화의 미래 변화에 종속 될 것입니다. 어느 것이 당신을 TBitBtn와 물고 있습니다.

그래서 문제를 해결하는 방법은 이미지 목록에 TButton 컨트롤을 사용하는 것입니다. TButton의 구현은 기본 컨트롤에 필요한 인덱스가 고정되어 있기 때문에 개인 이미지 목록을 사용합니다. 따라서 TButton 컨트롤은 이미지 사본을 가져옵니다. 따라서 글리프 속성을 노출하는 TButton 또는 그 조상 중 하나를 기반으로 자신의 단추 컨트롤을 쉽게 작성할 수 있습니다. 그런 다음 해당 그림 모양을 이미지 목록에 넣은 다음 기본 Win32 컨트롤로 보냅니다.

ImageListImageIndex 속성을 지원하지 않는 Delphi 버전을 사용하는 경우 Win32 BUTTON 컨트롤을 래핑하는 자체 단추 컨트롤을 구현해야합니다.