delphi virtualtreeview.onafteritempaint 문제를 스크롤 할 때?
-
19-09-2019 - |
문제
사용하는 문제가 발생하고 있습니다 onafteritempaint 수평 스크롤링이 수행되는 경우 이벤트.
기본적으로 내가 달성하려는 것은 선택된 셀 효과의 병합입니다. 예를 들어 1 열 1 & 2의 텍스트, 열 3 & 4 열의 다른 텍스트 등 ... 지금까지 VT는 열 병합에 대한 지원이 없습니다. 그래서 수동으로 그려야합니다.
대신 사용해야 할 해결 방법이나 다른 이벤트가 있습니까?
사용 : Delphi 7 + Virtualtreeview 4.8.5
이벤트 출처 :
begin
TargetCanvas.TextOut(ItemRect.Left+ VT1.OffsetX, ItemRect.Top,
'1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF');
end;
스크롤 전에 :
Alt Text http://a.imagehost.org/0869/screen1.gif
스크롤 후 (오른쪽 스크롤 한 다음 왼쪽 스크롤) :
해결책
달성하고자하는 것을 말하기는 어렵지만 여러 열에 걸친 긴 텍스트가 있다는 것을 보는 것은 적절한 이벤트를 사용하는지 확실하지 않습니다. 일반적으로 열이 너무 길면 텍스트를 잘라내려고합니다.
어쨌든, 가장 좋은 점은 5.2 절에서 "페인트 사이클 및 단계"를 읽는 것입니다. virtualtreeview.pdf 문서화 파일을하고 페인트하려는 것에 사용할 적절한 이벤트를 찾으십시오. 을 위한 OnAfterItemPaint
그것은 말한다 :
Af
그래서 아마도 아마도 생각합니다 ~ 아니다 당신이 사용하고 싶은 것.
편집하다:
좋아, 셀을 병합하려는 경우 추가를 제거하면됩니다. VT1.OffsetX
(그리고 추가하십시오 VT1.TextMargin
대신) 올바른 행동을 얻으려면. 이것은 물론 첫 번째 (인덱스 0) 열에서 텍스트 출력을 시작하려고한다고 가정합니다. 그렇지 않으면 열 너비에서 수평 텍스트 위치를 계산해야합니다.
그러나 페인트 단계에 대한 설명에서 나는 여전히 BeforeItemPaint
이벤트 및 설정 CustomDraw
var 매개 변수 True
기본 그림을 건너 뜁니다.
다른 팁
이것을 시도 했습니까?
TreeOptions.AutoOptions := TreeOptions.AutoOptions + [toAutoSpanColumns];
그것은 당신이 필요한 것을 거의합니다. 문제는 사용 가능한 열을 지정할 수 없다는 것입니다. 셀 텍스트를 원하지 않는 열의 공백으로 셀 텍스트를 설정하여 제한적으로이 문제를 해결할 수 있습니다.