toTeamAware가 활성화되면 VirtualTrees.pas 버전 5.0.0의 체크 박스 처리가 깨졌습니다. csUncheckedNormal 인 노드는 checked + hot으로 그려집니다.TVirtualStringTree에서 테마 체크 상자가 잘못 그려졌습니다.
DrawElement를 사용하여 체크되지 않은 테마 체크 박스를 올바르게 그리려면 Details 레코드는 Element = teButton, Part = 3 및 State = 5 여야합니다. 그러나 VirtualTrees.pas는 노드가 csUncheckedNormal로 설정됩니다.
VirtualTrees에서 간접 지정과 여분의 상수가 선언 된 것으로 보입니다. 따라서이 문제를 해결하는 가장 좋은 방법은 확실하지 않습니다. 아이디어가 환영 ...
(화면에 TVirtualStringTree를 가져오고 일부 데이터로 채워지는 최소한의 코드조차도 여기에 게시하는 데 약간 시간이 걸립니다.) 기본 사항 외에, 이것을 재현하려면 TreeOptions에서 toCheckSupport를 활성화해야합니다. .MiscOptions를 설정하고 InitNode 콜백에서 Node.CheckType : = ctTriStateCheckBox를 설정하십시오.)
나는 지금 다음을했다. VirtualStringTree v.5.0.0을 폼에 저장하고, toCheckSupport를 MiscOptions에 포함하고, toThemeAware를 PaintOptions에 유지하고, 특정 이벤트 핸들러에 다음 코드 행을 추가합니다. VirtualStringTree1.AddChild (nil) .CheckType : = ctTriStateCheckBox; Windows 7의 Delphi 2009에서 응용 프로그램을 실행하고 확인란을 자세히 살펴보십시오. 그들은 뜨거운 상태가 아니 었습니다. 그래서이 글을 쓰려면 여기로 돌아가서 VCL 스타일을 사용하도록 설정했는지 (코드를 살펴보기 전에) 물어 보시고 ENTER 키를 누르십시오 :-) – TLama
예, 죄송합니다. 스타일이 활성화 된 앱에 있습니다. , 델파이 XE2. –
@TLama : 올바르게 그림을 보는 경우, 코드의 몇 가지 부분에서 볼 수있는 것에 정말로 관심이 있습니다. TBaseVirtualTree.PaintCheckImage의 ImageInfo.Index 값입니다. 나는 2 번째 케이스에 부딪치게되는 9 개를 가지므로 State : = 9-8입니다. 이것은 틀 렸습니다. 그 Index of 9는 TBaseVirtualTree.GetCheckImage와 const의 ckCheckUncheckedNormal (VirtualTrees.pas의 122 행에있는 9의 const 임)에서옵니다. * 무언가 * 당신이 정확하게 그 페인트를 보았다면 다른 것이어야합니다. 감사! –