⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 Treeview 控件的精通使用
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls,Commctrl;
type
  TForm1 = class(TForm)
    tv1: TTreeView;
    lst1: TListBox;
    btn1: TButton;
    btn2: TButton;
    btn3: TButton;
    btn4: TButton;
    procedure FormCreate(Sender: TObject);
    procedure btn3Click(Sender: TObject);
    procedure btn1Click(Sender: TObject);
    procedure btn4Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var firstNode,twoNode,threeNode,fourNode:TTreeNode;
    dw : DWORD;
const TVS_CHECKBOXES  = $0100;
begin
  dw := GetWindowLong( tv1.Handle, GWL_STYLE);
  dw := dw or TVS_CHECKBOXES;    
  SetWindowLong(tv1.Handle, GWL_STYLE , dw);
  firstNode := tv1.Items.AddChildFirst(nil,'根目录'); //添加根目录

  twoNode:=tv1.Items.AddChild(firstNode,'111');
  
  if twoNode.Text = '111' then
  begin
    threeNode:=tv1.Items.AddChild(twoNode,'zhangsan');
    if threeNode.Text = 'zhangsan' then
    begin
      fourNode:=tv1.Items.AddChild(threeNode,'语文');
      fourNode:=tv1.Items.AddChild(threeNode,'数学');
      fourNode:=tv1.Items.AddChild(threeNode,'英语');
    end;
    threeNode:=tv1.Items.AddChild(twoNode,'lisi');
    if threeNode.Text = 'lisi' then
    begin
      fourNode:=tv1.Items.AddChild(threeNode,'物理');
      fourNode:=tv1.Items.AddChild(threeNode,'化学');
      fourNode:=tv1.Items.AddChild(threeNode,'地理');
    end;
    threeNode:=tv1.Items.AddChild(twoNode,'wanger');
    if threeNode.Text = 'wanger' then
    begin
      fourNode:=tv1.Items.AddChild(threeNode,'生物');
      fourNode:=tv1.Items.AddChild(threeNode,'政治');
      fourNode:=tv1.Items.AddChild(threeNode,'历史');
    end;
  end;
  twoNode:=tv1.Items.AddChild(firstNode,'222');

  if twoNode.Text = '222' then
  begin
    threeNode:=tv1.Items.AddChild(twoNode,'zhaowu');
    if threeNode.Text = 'zhaowu' then
    begin
      fourNode:=tv1.Items.AddChild(threeNode,'几何');
      fourNode:=tv1.Items.AddChild(threeNode,'代数');
      fourNode:=tv1.Items.AddChild(threeNode,'外语');
    end;
    threeNode:=tv1.Items.AddChild(twoNode,'xiaohuang');
    if threeNode.Text = 'xiaohuang' then
    begin
      fourNode:=tv1.Items.AddChild(threeNode,'高数');
      fourNode:=tv1.Items.AddChild(threeNode,'统计');
      fourNode:=tv1.Items.AddChild(threeNode,'会计');
    end;
  end;
  
end;

function IsNodeChecked(Node :TTreeNode) :Boolean;
var
  item:TTVItem;
begin
  item.mask:=TVIF_HANDLE;
  item.hItem:=Form1.tv1.Items[Node.AbsoluteIndex].ItemId;
  TreeView_GetItem(Form1.tv1.Handle,item);
  if (item.state and $2000)=0 then
     Result := False
   else
     Result := True;
end;

function isBrotherAllChecked(Node: TTreeNode): Boolean;
var
  CurChild: TTreeNode;
  tmpBool: Boolean;
begin
  Node := Node.Parent;
  if Node.HasChildren then
  begin
    CurChild := Node.GetFirstChild;
    while CurChild <> nil do
    begin
      tmpBool := IsNodeChecked(CurChild);
      if not tmpBool then
      begin
        Result := False;
        exit;
      end;
      CurChild := Node.getNextChild(CurChild);
    end;
  end;
  Result := True;
end;


procedure TForm1.btn3Click(Sender: TObject);
begin
  Close;
end;




procedure TForm1.btn1Click(Sender: TObject);
var fNode,twNode,thNode,fouNode:TTreeNode;
    f_num,tw_num,th_num,fou_num:Integer;
    num_first,num_two,num_three,num_four:Integer;
    s:string;
begin
  
  for f_num:=0 to tv1.Items.Count-1 do
  begin
    s:='';
    twNode:=tv1.Items[f_num];
    if twNode.HasChildren then
    begin
      Continue
    end else
    begin
      if IsNodeChecked(twNode) then
      begin
        thNode:=twNode;
        for tw_num:=0 to twNode.Level-1 do
        begin
          s := thNode.Text + ',' + s;
          thNode:=thNode.Parent
        end;
        lst1.Items.Add(s);
      end else
      begin
        Continue;
      end;
    end;
    
  end;


end;

procedure TForm1.btn4Click(Sender: TObject);
var i_num:Integer;
begin
  for i_num:=0 to tv1.Items.Count - 1 do
  begin
    tv1.Items.Item[i_num].StateIndex:=2;
    tv1.Items.Item[i_num].StateIndex:=1;
  end;

  //lst1.Items.Clear;

end;

procedure TForm1.btn2Click(Sender: TObject);
var i,j,k,a:Integer;
    str,listNode:string;
    ts:TStringList;
    aNode,Node:TTreeNode;
begin
  for i:=0 to lst1.Items.Count-1 do
  begin
    str:=lst1.Items.Strings[i];
    ts:= TStringList.Create;
    ts.Delimiter:= ',';
    ts.DelimitedText:= str;

    for j:=0 to ts.Count-1 do
    begin
      if j <> 2 then
        Continue
      else
      begin

        for k:=0 to tv1.Items.Count - 1 do
        begin
          Node:=tv1.Items[k];

          if Node.HasChildren then
            Continue
          else
          begin
            if (IsNodeChecked(Node)=False) then
            begin
              aNode:=Node;
              for a:=0 to Node.Level - 1 do
              begin
                listNode:=ts[j];
                //lst1.Items.Add(ts[j]);
                //ShowMessage('ts[j]=='+listNode);
                if aNode.Text = listNode then
                begin
                  aNode.StateIndex:=2;
                  aNode.Parent.StateIndex:=2;
                  aNode.Parent.Parent.StateIndex:=2;
                  aNode.Parent.Parent.Parent.StateIndex:=2;
                end;
              end;
            end else
              Continue;

          end;

        end;
        

      end;


    end


  end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -