Delphi 6은 여러 선택(MultiSelect 및 MultiSelectStyle 속성 및 선택 배열 참조), 향상된 정렬 및 몇 가지 새로운 이벤트를 포함하여 TreeView 컨트롤에 몇 가지 기능을 추가했습니다. 그러나 주요 개선 사항은 프로그래머가 트리 뷰의 노드 항목의 클래스를 결정하도록 하는 것입니다. 사용자 지정 노드 항목이 있으면 간단한 개체 지향 방식으로 사용자 지정 데이터를 노드에 연결할 수 있습니다. 이 기술을 지원하기 위해 TTreeItems 클래스에 대한 새로운 AddNode 메서드와 새 특정 이벤트인 OnCreateNodesClass가 있습니다. 이 이벤트의 처리기에서 만들 개체의 클래스를 반환합니다. 이 문서에서는 세 가지 목록 보기 OnCustomDrawXXX 이벤트 처리기의 목적을 요약하 고 보고서 스타일 목록 보기와 함께 이벤트 처리기를 사용 하 여 몇 가지 예제를 제시 하기 위해 갔다. 이미지를 목록이나 트리에 연결하려면 메뉴 이미지에 이미 사용한 ImageList 구성 요소를 참조해야 합니다. ListView에는 큰 아이콘(LargeImages 속성), 작은 아이콘(SmallImages 속성) 및 항목 상태(StateImages 속성)에 대한 이미지 목록의 세 가지 이미지 목록이 있을 수 있습니다. RefList 예제에서는 두 개의 서로 다른 ImageList 구성 요소를 사용하여 처음 두 속성을 설정했습니다. 이것은 매우 일반적인 기술이므로 자세히 설명하는 예제를 만들었습니다. CustomNodes 예제는 실제 사례에 초점을 맞추지 않지만 두 개의 서로 다른 사용자 지정 트리 노드 클래스가 다른 대/소문자를 파생하는 다소 복잡한 상황을 보여 주지만. 기본 클래스는 가상 메서드에 매핑된 ExtraCode 속성을 추가하고 하위 클래스는 이러한 메서드 중 하나를 재정의합니다.

기본 클래스의 경우 GetExtraCode 함수는 단순히 값을 반환합니다. 파생 클래스의 경우 값이 상위 노드 값에 곱됩니다. 클래스와 이 두 번째 방법은 다음과 같습니다: ListView 구성 요소를 사용하는 경우 요소의 상태(예: 선택한 항목)를 나타내는 비트맵과 그래픽 방식으로 항목의 내용을 설명하는 비트맵을 제공할 수 있습니다. 우리가 그것을 남겨두면 Delphi / Windows에서 목록 항목을 그릴 때 그 아래에 있는 그늘이 덮어쓰일 것입니다. OnCustomDrawItem 및 OnCustomDrawSubItem을 처리하여 각 열에 올바른 배경색이 있는지 확인하여 이를 극복합니다. 목록 10은 이벤트 처리기에 대한 코드를 보여 주며, 이제 는 OnCustomDrawItem 처리 열 0 및 OnCustomDrawSubItem 처리 열 <=1에 대해 매우 잘 알고 있어야 합니다. 비트맵을 표시하려면 OnCustomDraw 이벤트만 처리하면 됩니다. 이 예제에서는 디스플레이에서 비트맵을 바둑판으로 바둑판으로 배열합니다. 비트맵을 타일링하려면 목록 뷰의 배경 영역을 계산하고 비트맵을 오프셋하여 스크롤 및 헤더 크기를 허용해야 합니다.

이벤트 처리기의 코드 대부분은 이러한 오프셋을 계산하는 데 전념합니다. 코드는 아래 목록 2에 표시됩니다. OnCustomDrawItem 이벤트를 처리하여 열 0에 대해 SetLVColumnColor를 호출하여 캡션 열의 색상을 설정합니다. 이 코드는 전체 목록 항목에 대한 배경을 설정하지만 OnCustomDrawSubItem 이벤트 처리기의 각 하위 항목 열에 대해 이 효과를 재정의합니다. 이 이벤트 처리기는 SubItem 매개 변수에 그려질 열의 인덱스를 전달합니다. 하위 항목을 SetLVColumnColor에 전달하여 열의 배경 색을 설정합니다. 목록 1에 제시된 상용구 코드를 사용하여 코드가 Delphi 4 및 Delphi 7에서 모두 작동하도록 했습니다. CLX 버전 QRefList를 빌드하려면 ListView가 목록 및 보고서 보기 스타일로 제한되므로 이미지 목록 중 하나만 사용하고 작은 이미지와 큰 이미지 메뉴를 사용하지 않도록 설정해야 했습니다. 크고 작은 아이콘은 IconView라는 다른 컨트롤에서 사용할 수 있습니다. 앞에서 설명한 것처럼 정렬 지원이 이미 있었기 때문에 예제의 코드 대부분을 저장할 수 있었습니다.

그러나 이 경우 마지막 예제와 유사한 방식으로 시작 시 TreeView 데이터를 로드하기로 결정했습니다.

Categories: Sin categoría