const
  TVS_CHECKBOXES=$00000100;
procedure SetComCtrlStyle(WinCtrl:TWinControl;Value:Integer;UseStyle:Boolean);
var
  Style:Integer;
begin
  if WinCtrl.HandleAllocated then
  begin
    Style:=GetWindowLong(WinCtrl.Handle,GWL_STYLE);
    if not UseStyle then
      Style:=Style and not Value
    else Style:=Style or Value;
    SetWindowLong(WinCtrl.Handle,GWL_STYLE,Style);
  end;
end;procedure TForm1.TreeView1CreateNodeClass(Sender: TCustomTreeView;
  var NodeClass: TTreeNodeClass);
begin
  SetComCtrlStyle(TreeView1,TVS_CHECKBOXES,True);
end;

解决方案 »

  1.   

    類似這樣  if (cx_TV.Parent<>nil) and Assigned(cx_TV.Selected) and (cx_TV.Selected.Level=3) and (cxPageControl1.ActivePage=cxTabSheet5) then //父階料號下不同子階料號的明細數據信息
      

  2.   

    利用上一個帖子中判斷節點check狀態的代碼,在遍歷treeview時,傳入節點,若為true,則直接訪問此節點的text即可
    var
      i: Integer;
      SL : TStringList;
      function GetTreeNodeChecked(Node: TTreeNode): Boolean;
      var
        vItem : TTVItem;
      begin
        vItem.mask  := TVIF_HANDLE or TVIF_STATE;
        vItem.hItem := Node.ItemId;
        vItem.stateMask := TVIS_STATEIMAGEMASK;
        TreeView_GetItem(Node.TreeView.Handle, vItem);
        Result  := Boolean((vItem.state shr 12)-1);
      end;
      function GetCheckedText(vNode: TTreeNode): Boolean;
      var
        Node: TTreeNode;
      Begin
        Result := False;
        if vNode.HasChildren then
        begin
          Node := vNode.GetFirstChild;//有子節點,則忽略此節點,遍歷子節點
          while Node <> nil do
          begin
             GetCheckedText;
              Node := vNode.GetNextChild(Node);
          end;
        end
        else
        begin
          Result := True;
          if GetTreeNodeChecked(vNode) then//選中狀態
            SL.Add(vNode.Text);
        end;
      end;
    begin
      sl := TStringList.Create;
      for i:=0 to TreeView1.Items.Count-1 do
      begin
        GetCheckedText(TreeView1.Items[i]);
      end;
    end;代碼未經測試,請參考
      

  3.   

    給你提供一個帶CheckBox的TreeView控件(從網上查到的,不記得網址了),然后用循環就可以得到你想要的了。
    unit CheckTreeview;interfaceuses
       Windows, Messages, SysUtils, Classes, Controls,Commctrl,ComCtrls;
    const
        TVIS_CHECKED = $2000;
    type
       TCheckTreeview = class(TTreeView)
       private
         { Private declarations }
       protected
         { Protected declarations }
         procedure CreateParams(var Params: TCreateParams); override;
       public
         { Public declarations }
         function IsChecked(Node :TTreeNode) :Boolean;
         procedure SetChecked(Node :TTreeNode; Checked :Boolean);
       published
         { Published declarations }
       end;procedure Register;implementationprocedure Register;
    begin
       RegisterComponents('Standard', [TCheckTreeview]);
    end;{ TCheckTreeview }procedure TCheckTreeview.CreateParams(var Params: TCreateParams);
    begin
       inherited;
       Params.Style:=Params.Style or TVS_CHECKBOXES;
    end;function TCheckTreeview.IsChecked(Node: TTreeNode): Boolean;
    var
       TvItem :TTVItem;
    begin
       TvItem.Mask   := TVIF_STATE;
       TvItem.hItem := Node.ItemId;
       TreeView_GetItem(Node.TreeView.Handle, TvItem);
       Result := (TvItem.State and TVIS_CHECKED) = TVIS_CHECKED;
    end;procedure TCheckTreeview.SetChecked(Node: TTreeNode; Checked: Boolean);
    var
       TvItem :TTVItem;
    begin
       FillChar(TvItem, SizeOf(TvItem), 0);
       with TvItem do begin
         hItem      := Node.ItemId;
         Mask       := TVIF_STATE;
         StateMask := TVIS_STATEIMAGEMASK;
         if Checked then
           TvItem.State :=TVIS_CHECKED
         else
           TvItem.State :=TVIS_CHECKED shr 1;
         TreeView_SetItem(Node.TreeView.Handle, TvItem);
       end;
    end;
    end.
      

  4.   

    或者直接用三方控件 Rztreeview 就可以了