我的代码如下:
procedure SetComCtlStyle(Ctl: TWinControl; Value: Integer; UseStyle: Boolean);
var
  Style: Integer;
begin
  if Ctl.HandleAllocated then
  begin
    Style := GetWindowLong(Ctl.Handle, GWL_STYLE);
    if not UseStyle then Style := Style and not Value
    else Style := Style or Value;
    SetWindowLong(Ctl.Handle, GWL_STYLE, Style);
  end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin  SetComCtlStyle(treeview1,TVS_CHECKBOXES,True);
end;procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
  for i:=0 to treeview1.Items.Count-1 do
    if treeview1.Items[i].Selected then
      showmessage('选中: '+inttostr(i)+'—'+treeview1.Items[i].Text);
end;但在Button2Click中取不出来,我估计我Button2Click中写的代码不对?请问哪位知道怎么取打勾的条目???谢谢了先!!!

解决方案 »

  1.   

    http://expert.csdn.net/Expert/topic/2137/2137712.xml?temp=.6844446
    这个帖子中如下代码测试过没?~~~~
    //参考如下代码~~
    uses CommCtrl;function TreeNodeGetChecked(mTreeNode: TTreeNode): Boolean;
    var
      vTVItem: TTVItem;
    begin
      Result := False;
      if not Assigned(mTreeNode) or not Assigned(mTreeNode.TreeView) then Exit;
      vTVItem.mask := TVIF_STATE;
      vTVItem.hItem := mTreeNode.ItemId;
      if TreeView_GetItem(mTreeNode.TreeView.Handle, vTVItem) then
        Result := (vTVItem.State and IndexToStateImageMask(2)) > 0; //0: None 1: False 2: True
    end; { TreeNodeGetChecked }function TreeNodeSetChecked(mTreeNode: TTreeNode; mChecked: Boolean): Boolean;
    var
      vTVItem: TTVItem;
      Template:integer;
    begin
      Result := False;
      if not Assigned(mTreeNode) or not Assigned(mTreeNode.TreeView) then Exit;  vTVItem.mask := TVIF_STATE;
      vTVItem.hItem := mTreeNode.ItemId;
      TreeView_GetItem(mTreeNode.TreeView.Handle, vTVItem);
      if not TreeView_GetItem(mTreeNode.TreeView.Handle, vTVItem) then Exit;
      vTVItem.stateMask := TVIS_STATEIMAGEMASK;
      vTVItem.state := IndexToStateImageMask(Succ(Ord(mChecked)));
      Result := TreeView_SetItem(mTreeNode.TreeView.Handle, vTVItem);
    end; { TreeNodeSetChecked }procedure TForm1.FormCreate(Sender: TObject);
    begin
      SetWindowLong(TreeView1.Handle, GWL_STYLE,
        GetWindowLong(TreeView1.Handle, GWL_STYLE) or TVS_CHECKBOXES);
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      TreeNodeSetChecked(TreeView1.Selected, True);
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      TreeNodeSetChecked(TreeView1.Selected, False);
    end;procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      if htOnStateIcon in TreeView1.GetHitTestInfoAt(X, Y) then
        Caption := BoolToStr(TreeNodeGetChecked(TreeView1.GetNodeAt(X, Y)), True)
        //TODO -oZswang -c事件 : 触发点击选择框
      else Caption := '';
    end;procedure TForm1.Button3Click(Sender: TObject);
    var
      I: Integer;
    begin
      Memo1.Clear;
      for I := 0 to TreeView1.Items.Count - 1 do
        if TreeNodeGetChecked(TreeView1.Items[I]) then
          Memo1.Lines.Add(TreeView1.Items[I].Text);
    end;
      

  2.   

    procedure TForm1.Button2Click(Sender: TObject);
    var i:integer;
      function TreeNodeGetChecked(mTreeNode: TTreeNode): Boolean;
      var
        vTVItem: TTVItem;
      begin
        Result := False;
        if not Assigned(mTreeNode) or not Assigned(mTreeNode.TreeView) then Exit;
        vTVItem.mask := TVIF_STATE;
        vTVItem.hItem := mTreeNode.ItemId;
        if TreeView_GetItem(mTreeNode.TreeView.Handle, vTVItem) then
          Result := (vTVItem.State and IndexToStateImageMask(2)) > 0; //0: None 1: False 2: True
      end; { TreeNodeGetChecked }
    begin
      for I := 0 to tv.Items.Count - 1 do
        if TreeNodeGetChecked(tv.Items[I]) then
          showmessage(tv.Items[I].Text);
    end;