ツリー構造の具体例としては、Delphiを達成するために

ユニットUnit1は、
インターフェイスは
使用しています
  Windowsの、メッセージ、sysutilsの、バリアント、クラス、グラフィックス、コントロール、フォーム、
  ダイアログ、StdCtrls、ComCtrls、DB、ADODBを。
入力
  PNodeInfoEx = ^ TNodeInfoExを。
  TNodeInfoEx = ランチ録音
      のNodeID:整数; 
      ParentID:整数; 
      ノードタイプ:整数; 
      ChnNodeTitle:文字列。
      ImageIndexプロパティ:SMALLINT。
      SelectedIndexを:SMALLINT。
   エンド; 
  TForm1 = クラス(TFormは)
    TV1:TTreeViewの。
    BTN1:TButtonの。
    QRY1:TADOQuery。
    手順btn1Click(送信者:TObjectを);
    手順FormDestroy(送信者:TObjectを);
  プライベート
    { プライベート宣言} 
    関数StaticBuildTree(ツリービュー:TTreeViewの):ブール。
    関数AddTreeItem(ツリービュー:TTreeViewの; AddNodeInfo:PNodeInfoEx):TTreeNode。
    関数FindTreeItem(ツリービュー:TTreeViewの; CurNodeID:整数):TTreeNode。
  公共
    { 公開宣言} 
  ;
VAR 
  をForm1:TForm1; 
実装
{ $ R * .DFM } 

関数TForm1.StaticBuildTree(ツリービュー:TTreeViewの):ブール。
VAR
  AddNodeInfo:PNodeInfoEx; 
始める
  の検索結果を: = falseは、
  qry1.LoadFromFile(' C:/AdminixTree.xml '); // ここではXMLファイルへのデータソースとして 
  Treeview.Items.BeginUpdate; //は覚えておいてください:大量のデータを追加する前にBeginUpdateメソッドを使用するために、一時的に近い特定のイベントは、(などのOnChangeイベント、など)データの追加によってトリガする 
  ; Treeview.Items.Clearは// クリアツリービューは、
  してみてください
    試して
      IF qry1.RecordCount> 0は 、その後
        始まる
          qry1.Firstを、
          しばらくないQRY1 .EOF 行う
          始まる
            新しい(AddNodeInfoを); // 生成構造 
            AddNodeInfo ^ .NodeID:= qry1.FieldByName(' NODE_ID ' ).AsInteger。
            AddNodeInfo ^ .ParentID: = qry1.FieldByName(' PARENT_ID ' ).AsInteger。
            AddNodeInfo ^ .NodeType: = qry1.FieldByName(' ノードタイプ' ).AsInteger。
            AddNodeInfo ^ .ChnNodeTitle: = qry1.FieldByName(' ChnNodeTitle ' ).AsString。
            AddNodeInfo ^ .ImageIndex: = qry1.FieldByName(' ImageIndexプロパティ' ).AsInteger。
            AddNodeInfo ^ .SelectedIndex: = qry1.FieldByName(' SelectedIndexを').AsInteger; 
            AddTreeItem(ツリービュー、AddNodeInfo); // ツリービューに格納された構造体へのポインタ
            qry1.Next;
           エンド;
         エンド;
     除く
      Application.MessageBox(' スパニングツリーノード障害'、MB_ICONSTOP + MB_OK);
       上昇 ; / / 異常優れた投げ
    エンド; 
    qry1.Close; 
    結果: = 真;
   最後に
    Treeview.Items.EndUpdate; 
  エンド;
 エンド;
 // ノードを結合するとき、追加すべきは、親ノードまたは子ノードを決定し、それが決定されますParentIDはで既存のツリーのノードにおけるノードの存在または非存在に基づいている
機能TForm1.AddTreeItem(ツリービュー:TTreeViewの; AddNodeInfo:PNodeInfoEx):TTreeNode;
var 
    のparentNode:TTreeNode; 
開始
    のparentNodeを: = FindTreeItem(ツリービュー、AddNodeInfo ^ .ParentID)。
    もしのparentNode <> nilに 続い
        結果: = Treeview.Items.AddChildObject(のparentNode、トリム(AddNodeInfo.ChnNodeTitle)、ポインタ(AddNodeInfo))
     他の
        結果: = Treeview.Items.AddObject(のparentNode、トリム(AddNodeInfo.ChnNodeTitle)、ポインタ( AddNodeInfo));
    もし <結果> nilを その後
    始める
        Result.ImageIndex: =を AddNodeInfo.ImageIndexを。
        Result.SelectedIndex: = AddNodeInfo.SelectedIndex;
     エンド;
 エンド;
 // これは、親ノードがあるか否かを判断する
関数TForm1.FindTreeItem(ツリービュー:;:整数CURNODEID TTreeViewの):TTreeNodeは、
 VAR 
    I:整数; 
開始
  結果: = nilを;
   のために、私は:= 0   Treeview.Items.Count- 。1  行い
  始める
      のIF。CURNODEID = PNodeInfoEx(Treeview.Items [I] .DATA)^がNodeIDの後、
      開始
          結果: =の; Treeview.Items [I] 
          を終了し、
      終了しますエンド;
 エンド;
 // ツリー構造
手順TForm1.btn1Click(送信者:TObjectを);
 始める
   StaticBuildTree(TV1)
エンド;
 // ツリー内のノードに構造ポインタを解放するフォームがために、緩和するために取らなければなりませんなぜ、リリース後にキャストを処分しなければならない、特別な説明の前に、これは疲れていない
手順TForm1.FormDestroy(送信者:TObjectを);
 VAR 
    I:整数; 
始める
  ために I:= 0   tv1.Items.Count- 1。 始める
       廃棄(PNodeInfoEx(tv1.Items [i]の.DATA))終了;
 終了;
 終了// ツリーノードにアクセスする方法?手順
  
  






TForm1.tv1MouseDown(送信者:TObjectを;ボタン:TMouseButton、
  シフト:TShiftState; X、Yは整数)。
VaRの
  PNODE:TTreeNode; 
開始
  PNODEを: = tv1.GetNodeAt(X、Y)
  もし(PNODE <> ゼロ   (ボタン= mbleft)その後、
   ShowMessage(PNodeInfoEx(pNode.Data)^ ChnNodeTitle。); 
エンド ;

 

おすすめ

転載: www.cnblogs.com/jijm123/p/11408440.html