가장 간단한 방법은 노드가 트리보기에 이미 추가 된 경우 노드 높이를 설정하는 것입니다. 이렇게하면 원래 VCL 제어 코드를 수정하지 않아도됩니다. 당신이해야 할 일은 iIntegral
구조체의 기본 노드 높이의 배수를 나타내는 TVITEMEX
구조체를 설정하는 것입니다. 이 높이를 픽셀 단위로 설정해야하는 경우 TVM_SETITEMHEIGHT
메시지를 보내고 기본 노드 높이를 1 픽셀로 설정하여 기본 노드 높이를 설정해야하지만 트리 뷰의 모양이 손상됩니다. 기본적으로 3 배 이상 높은 것으로
procedure SetNodeHeight(Node: TTreeNode; Integral: Integer);
var
ItemEx: TTVItemEx;
begin
if not Node.Deleting then
begin
ItemEx.mask := TVIF_HANDLE or TVIF_INTEGRAL;
ItemEx.hItem := Node.ItemId;
ItemEx.iIntegral := Integral;
TreeView_SetItem(Node.Handle, ItemEx);
end;
end;
그리고 노드를 설정하기위한 가능한 용도 : 여기서
기본 노드 높이
Integral
배의 높이까지
Node
매개 변수에 의해 지정된 노드를 설정하는 절차 노드 높이 :
procedure TForm1.Button1Click(Sender: TObject);
var
Node: TTreeNode;
begin
Node := TreeView1.Items.AddChild(nil, 'Node 3 times higher than default');
SetNodeHeight(Node, 3);
end;
원본 VCL 트리 뷰 클래스를 이와 같은 코드로 확장 할 수는 있지만 계속 사용하겠습니다.
['a proof'] (http://pastebin.com/3LDeHcnX) 가능하지만 그렇게하지 말라고 제안합니다. 예를 들어 다음과 같은 더 나은 컨트롤을 학습하는 데 투자 할 수있는 많은 작업이 있습니다. VirtualHreeView는 노드 높이를 얻기위한 OnMeasureItem 이벤트를 내장하고 있습니다. – TLama
스 니펫에 감사드립니다. 나는 그것을 검사 할 것이다. – Prog1020
@TLama, a) 일반적인 항목 삭제 및 열거 및 일반적인 항목 추가 (일부 항목은 보통, 일부 항목은 키가 크다)와 호환됩니까? b) Objects 속성을 사용하여 TObject와 같은 3x 항목을 추가 할 수 있습니까? – Prog1020