에를 추가하려면 올바른 마스크 및 항목 ID로 호출되는 경우 CommCtrl에 정의 된 레코드입니다.
이 작업은 TreeView_GetItem
CommCtrl에서 찾을 수 있습니다 (복사).
그래서 상태가 점검되면 트리 뷰 항목을 반복해서 검사하면됩니다.
{type
TTreeView = Class(ComCtrls.TTreeView)
procedure CreateParams(var Params: TCreateParams); override;
End;}
uses CommCtrl;
Function TreeNodeChecked(n:TTreenode):Boolean;
Const
TVIS_CHECKED = $2000;
var
Item: TTVItem;
begin
Item.mask := TVIF_STATE or TVIF_HANDLE;
Item.hItem := n.ItemId;
if Bool(SendMessage(n.Handle, TVM_GETITEM, 0, lParam(@Item))) then
Result := (Item.State and TVIS_CHECKED) = TVIS_CHECKED
else
Result := false;
end;
procedure TForm4.Button1Click(Sender: TObject);
var
i: Integer;
begin
ListBox1.Items.Clear;
for i := 0 to TV.Items.Count - 1 do
begin
if TreenodeChecked(TV.Items[i]) then
ListBox1.Items.Add(TV.Items[i].Text);
end;
end;
{ TTreeView }
procedure TTreeView.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.Style := Params.Style or TVS_CHECKBOXES;
end;
난이, [트리 뷰의 노드를 통해 재귀 적으로 반복? (중복 생각하지 않습니다
http://stackoverflow.com/questions/14045263/iterate-recursively-through-nodes-in- a-tree-view), 포커스는 체크되어지고 반복되지 않는다. 적어도 이전 버전에서는 체크 할 수있는 직접적인 접근이 없다. – bummi