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

📄 treefillthrd.pas

📁 此为Delphi树控件的一个数据库运用
💻 PAS
字号:
unit TreeFillThrd;

interface

uses
  Classes, ComCtrls, ADODB, SysUtils;

type
  TNodeData = record
    Index: integer;
    Caption: string;
  end;
  PNodeData = ^TNodeData;
  TTreeFill = class(TThread)
    TV: TTreeView;
    TableName: string;
    FieldIndex: string;
    FieldPID: string;
    FieldCaption: string;
    RootText: string;
    Conn: TADOConnection;
    Ptr: PNodeData;
    constructor Create(ATreeView: TTreeView; AConn: TADOConnection;
      ATable: string; ARootText: string = '我的目录';
      AFieldIndex: string = 'ID'; AFieldPID: string = 'PID';
      AFieldCaption: string = 'Caption');
  private
    procedure AddTree(Node: TTreeNode; PN: PNodeData);
  protected
    procedure Execute; override;
  end;

implementation
//------------------------------------------------------------------------------
constructor TTreeFill.Create(ATreeView: TTreeView; AConn: TADOConnection;
  ATable: string; ARootText: string = '我的目录';
  AFieldIndex: string = 'ID'; AFieldPID: string = 'PID';
  AFieldCaption: string = 'Caption');
begin
  FieldIndex := AFieldIndex;
  FieldPID := AFieldPID;
  FieldCaption := AFieldCaption;
  TV := ATreeView;
  TableName := ATable;
  RootText := ARootText;
  Conn := AConn;
  New(Ptr);
  inherited Create(False);
end;
//------------------------------------------------------------------------------
procedure TTreeFill.Execute;
var
  Node: TTreeNode;
begin
  FreeOnTerminate := True;
  TV.Items.Clear;
  Ptr^.Index := 0;
  Ptr^.Caption := RootText;
  Node := TV.Items.AddObject(nil, RootText, Ptr);
  Node.ImageIndex := 0;
  Node.SelectedIndex := 0;
  AddTree(Node, Ptr);
  TV.FullExpand;
end;
//------------------------------------------------------------------------------
procedure TTreeFill.AddTree(Node: TTreeNode; PN: PNodeData);
var Query: TADOQuery;
  nNode: TTreeNode;
  PNode: PNodeData;
begin
  try
    Query := TADOQuery.Create(nil);
    Query.Connection := Conn;
    Query.SQL.Text := 'Select * from ' + TableName + ' where ' + FieldPID + ' =' + IntToStr(PN^.Index);
    if Query.Active then
      Query.Close;
    Query.Open;
    while Query.Eof = False do
    begin
      New(PNode);
      PNode^.Caption := Query.FieldByName(FieldCaption).AsString;
      PNode^.Index := Query.FieldByName(FieldIndex).AsInteger;
      nNode := TV.Items.AddChildObject(Node, PNode^.Caption, PNode);
      nNode.ImageIndex := 1;
      nNode.SelectedIndex := 2;
      AddTree(nNode, PNode);
      Query.Next;
    end;
  finally
    Query.Free;
  end;
end;
//------------------------------------------------------------------------------
end.

⌨️ 快捷键说明

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