uItemBrowser.pas
上传用户:fuyouda
上传日期:2015-08-19
资源大小:6876k
文件大小:4k
源码类别:

家庭/个人应用

开发平台:

Visual C++

  1. unit uItemBrowser;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5.   Dialogs, StdCtrls, ComCtrls;
  6. type
  7.   TAddItemEvent = procedure(ItemName: string) of object;
  8.   TItemBrowser = class(TForm)
  9.     bAdd: TButton;
  10.     bcancel: TButton;
  11.     ePath: TEdit;
  12.     Label1: TLabel;
  13.     Label2: TLabel;
  14.     eName: TEdit;
  15.     tvBranch: TTreeView;
  16.     lbLeaf: TListBox;
  17.     Label3: TLabel;
  18.     PropBtn: TButton;
  19.     procedure bAddClick(Sender: TObject);
  20.     procedure FormCreate(Sender: TObject);
  21.     procedure tvBranchChange(Sender: TObject; Node: TTreeNode);
  22.     procedure lbLeafClick(Sender: TObject);
  23.     procedure lbLeafDblClick(Sender: TObject);
  24.     procedure FormShow(Sender: TObject);
  25.     procedure PropBtnClick(Sender: TObject);
  26.   private
  27.     FServer: THandle;
  28.     FNameSpace: DWORD;
  29.     FRoot: TTreeNode;
  30.     FOnAddItem: TAddItemEvent;
  31.     procedure BrowseItems;
  32.     procedure BrowseBranch;
  33.     procedure SetServer(const Value: DWORD);
  34.   published
  35.     property OnAddItem: TAddItemEvent read FOnAddItem write FOnAddItem;
  36.     property Server: DWORD read FServer write SetServer;
  37.   end;
  38. var
  39.   ItemBrowser: TItemBrowser;
  40. implementation
  41. uses DACLTSDK, uItemStatus;
  42. {$R *.dfm}
  43. { TFItemInfo }
  44. procedure TItemBrowser.bAddClick(Sender: TObject);
  45. begin
  46.   if eName.Text<>'' then
  47.     if Assigned(FOnAddItem) then
  48.       FOnAddItem(eName.Text);
  49. end;
  50. procedure TItemBrowser.FormCreate(Sender: TObject);
  51. begin
  52.   FRoot:= tvBranch.Items.AddChildFirst(nil,'ROOT');
  53.   FRoot.Selected:= true;
  54. end;
  55. procedure TItemBrowser.BrowseBranch;
  56.   procedure ChangePosition(node: TTreeNode);
  57.   begin
  58.     if node.Parent<>nil then
  59.     begin
  60.       if node.Parent.Text='ROOT' then
  61.         ASDAC_ChangeBrowsePosition(FServer, OPC_BROWSE_UP, '')
  62.       else
  63.         ChangePosition(node.Parent);
  64.       ASDAC_ChangeBrowsePosition(FServer, OPC_BROWSE_DOWN, PChar(node.Text));
  65.     end
  66.     else
  67.       ASDAC_ChangeBrowsePosition(FServer, OPC_BROWSE_TO, '');
  68.   end;
  69. var
  70.   Count,I: Integer;
  71.   NameList: Variant;
  72. begin
  73.   if not Assigned(tvBranch.Selected) then Exit;
  74.   ChangePosition(tvBranch.Selected);
  75.   Browseitems;
  76.   if not tvBranch.Selected.HasChildren then
  77.   begin
  78.     Count:= ASDAC_BrowseItems(FServer, OPC_BRANCH, '*', 0, 0, @NameList);
  79.     for I:=0 to Count-1 do
  80.     begin
  81.       tvBranch.Items.AddChild(tvBranch.Selected,NameList[I]);
  82.       tvbranch.Selected.Expand(False);
  83.     end;
  84.   end;
  85. end;
  86. procedure TItemBrowser.BrowseItems;
  87. var
  88.   Count,I: Integer;
  89.   NameList: Variant;
  90. begin
  91.   if not Assigned(tvBranch.Selected) then Exit;
  92.   lbLeaf.Clear;
  93.   Count:= ASDAC_BrowseItems(FServer,OPC_LEAF,  '*', 0, 0, @NameList);
  94.   for I:=0 to Count-1 do
  95.     lbLeaf.Items.Add(NameList[I]);
  96. end;
  97. procedure TItemBrowser.tvBranchChange(Sender: TObject; Node: TTreeNode);
  98. begin
  99.   if FNameSpace<>OPC_NS_FLAT then
  100.     BrowseBranch
  101.   else
  102.     BrowseItems;
  103. end;
  104. procedure TItemBrowser.lbLeafClick(Sender: TObject);
  105. var
  106.   Name: string;
  107.   FullName: PChar;
  108. begin
  109.   if lbLeaf.ItemIndex>-1 then
  110.   begin
  111.     Name:= lbLeaf.Items[lbLeaf.itemIndex];
  112.     FullName:= strAlloc(128);
  113.     try
  114.       ASDAC_GetItemFullName(FServer,PChar(Name), FullName, 127);
  115.       eName.Text:= Fullname;
  116.     finally
  117.       strDispose(Fullname);
  118.     end;
  119.   end;
  120. end;
  121. procedure TItemBrowser.lbLeafDblClick(Sender: TObject);
  122. var
  123.   Name: string;
  124.   FullName: PChar;
  125. begin
  126.   if lbLeaf.ItemIndex>-1 then
  127.   begin
  128.     Name:= lbLeaf.Items[lbLeaf.itemIndex];
  129.     FullName:= strAlloc(128);
  130.     try
  131.       ASDAC_GetItemFullName(FServer,PChar(Name), FullName, 127);
  132.       eName.Text:= Fullname;
  133.     finally
  134.       strDispose(Fullname);
  135.     end;
  136.     bAddClick(Sender);
  137.   end;
  138. end;
  139. procedure TItemBrowser.FormShow(Sender: TObject);
  140. begin
  141.   ASDAC_GetNameSpace(FServer, @FNameSpace);
  142.   ASDAC_ChangeBrowsePosition(FServer, OPC_BROWSE_UP, '');
  143.   if FNameSpace=OPC_NS_FLAT then
  144.     BrowseItems
  145.   else
  146.     BrowseBranch;
  147. end;
  148. procedure TItemBrowser.SetServer(const Value: DWORD);
  149. begin
  150.   FServer := Value;
  151. end;
  152. procedure TItemBrowser.PropBtnClick(Sender: TObject);
  153. var
  154.   Editor: TItemStatus;
  155. begin
  156.   if eName.Text<>'' then
  157.   begin
  158.     Editor:= TItemStatus.Create(nil);
  159.     try
  160.       Editor.Server:= FServer;
  161.       Editor.ItemName:= eName.Text;
  162.       Editor.ShowModal;
  163.     finally
  164.       Editor.Free;
  165.     end;
  166.   end;
  167. end;
  168. end.