문제

사용하는 문제가 발생하고 있습니다 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

스크롤 후 (오른쪽 스크롤 한 다음 왼쪽 스크롤) :

Alt Text http://a.imagehost.org/0645/screen2.gif

도움이 되었습니까?

해결책

달성하고자하는 것을 말하기는 어렵지만 여러 열에 걸친 긴 텍스트가 있다는 것을 보는 것은 적절한 이벤트를 사용하는지 확실하지 않습니다. 일반적으로 열이 너무 길면 텍스트를 잘라내려고합니다.

어쨌든, 가장 좋은 점은 5.2 절에서 "페인트 사이클 및 단계"를 읽는 것입니다. virtualtreeview.pdf 문서화 파일을하고 페인트하려는 것에 사용할 적절한 이벤트를 찾으십시오. 을 위한 OnAfterItemPaint 그것은 말한다 :

Af

그래서 아마도 아마도 생각합니다 ~ 아니다 당신이 사용하고 싶은 것.

편집하다:

좋아, 셀을 병합하려는 경우 추가를 제거하면됩니다. VT1.OffsetX (그리고 추가하십시오 VT1.TextMargin 대신) 올바른 행동을 얻으려면. 이것은 물론 첫 번째 (인덱스 0) 열에서 텍스트 출력을 시작하려고한다고 가정합니다. 그렇지 않으면 열 너비에서 수평 텍스트 위치를 계산해야합니다.

그러나 페인트 단계에 대한 설명에서 나는 여전히 BeforeItemPaint 이벤트 및 설정 CustomDraw var 매개 변수 True 기본 그림을 건너 뜁니다.

다른 팁

이것을 시도 했습니까?

TreeOptions.AutoOptions := TreeOptions.AutoOptions + [toAutoSpanColumns];

그것은 당신이 필요한 것을 거의합니다. 문제는 사용 가능한 열을 지정할 수 없다는 것입니다. 셀 텍스트를 원하지 않는 열의 공백으로 셀 텍스트를 설정하여 제한적으로이 문제를 해결할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top