sz_ztcks.pas
上传用户:szruida
上传日期:2007-06-01
资源大小:6518k
文件大小:11k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit sz_ztcks;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5.   Dialogs, DB, Menus, ActnList, XPBarMenu, Grids, DBGridEh, StdCtrls,
  6.   ComCtrls, ExtCtrls, ToolWin, DBClient;
  7. type
  8.   Tsz_ztck2 = class(TForm)
  9.     CoolBar1: TCoolBar;
  10.     ToolBar1: TToolBar;
  11.     add1: TToolButton;
  12.     xiugai: TToolButton;
  13.     dele1: TToolButton;
  14.     save1: TToolButton;
  15.     refresh1: TToolButton;
  16.     ToolButton3: TToolButton;
  17.     Panel1: TPanel;
  18.     Splitter1: TSplitter;
  19.     Panel2: TPanel;
  20.     Tree: TTreeView;
  21.     Panel3: TPanel;
  22.     Splitter2: TSplitter;
  23.     Panel4: TPanel;
  24.     Label8: TLabel;
  25.     Label9: TLabel;
  26.     Label1: TLabel;
  27.     Label2: TLabel;
  28.     Label3: TLabel;
  29.     Edit1: TEdit;
  30.     Edit2: TEdit;
  31.     Edit3: TEdit;
  32.     Panel5: TPanel;
  33.     GroupBox2: TGroupBox;
  34.     DBGridEh1: TDBGridEh;
  35.     XPBarMenu1: TXPBarMenu;
  36.     ActionList1: TActionList;
  37.     Add: TAction;
  38.     Edit: TAction;
  39.     Delete: TAction;
  40.     Save: TAction;
  41.     Refresh: TAction;
  42.     Print: TAction;
  43.     Quit: TAction;
  44.     PopupMenu1: TPopupMenu;
  45.     A1: TMenuItem;
  46.     D1: TMenuItem;
  47.     E1: TMenuItem;
  48.     N5: TMenuItem;
  49.     N6: TMenuItem;
  50.     sz_ztcl: TDataSource;
  51.     sz_ztck: TDataSource;
  52.     ClientDataSet1: TClientDataSet;
  53.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  54.     procedure FormCreate(Sender: TObject);
  55.     procedure AddExecute(Sender: TObject);
  56.     procedure N5Click(Sender: TObject);
  57.     procedure N6Click(Sender: TObject);
  58.     procedure EditExecute(Sender: TObject);
  59.     procedure DeleteExecute(Sender: TObject);
  60.     procedure SaveExecute(Sender: TObject);
  61.     procedure RefreshExecute(Sender: TObject);
  62.     procedure QuitExecute(Sender: TObject);
  63.     procedure TreeClick(Sender: TObject);
  64.     procedure DBGridEh1DblClick(Sender: TObject);
  65.   private
  66.     { Private declarations }
  67.   public
  68.     { Public declarations }
  69.     procedure BtnState();
  70.     procedure loadTree(treeDb:TClientDataSet);//初始化树
  71.   end;
  72. var
  73.   sz_ztck2: Tsz_ztck2;
  74.   gnode:TtreeNode;//当前节点
  75.   lbjs_sm:string;//类别级数
  76.   lb_dmgz:string;//代码规则
  77.   dsState:string;//确定是增,删,改
  78. implementation
  79. uses DMs,u_public;
  80. {$R *.dfm}
  81. procedure Tsz_ztck2.BtnState();
  82. begin
  83.   if add1.Enabled=true or xiugai.Enabled=true then
  84.   begin
  85.     add1.Enabled:=false;A1.Enabled:=false;
  86.     xiugai.Enabled:=false;E1.Enabled:=false;
  87.     dele1.Enabled:=false;D1.Enabled:=false;
  88.     save1.Enabled:=true;
  89.     refresh1.Enabled:=true;
  90.   end
  91.   else
  92.   begin
  93.     add1.Enabled:=true;A1.Enabled:=true;
  94.     xiugai.Enabled:=true;E1.Enabled:=true;
  95.     dele1.Enabled:=true;D1.Enabled:=true;
  96.     save1.Enabled:=false;
  97.     refresh1.Enabled:=true;
  98.   end;
  99. end;
  100. //********************************************************************
  101. procedure Tsz_ztck2.loadTree(treeDb:TClientDataSet);//初始化树
  102. var
  103.   nodeId,nodeTxt:string;
  104.   SCodeFormat,SFirstNodeTxt:string;
  105.   level:integer;
  106.   mynode:array[0..6] of Ttreenode;
  107. begin
  108.  //初始化变量
  109.    SCodeFormat:=lbjs_sm ;   //库位代码结构
  110.    SFirstNodeTxt:= '库位';  //首节点显示的文字
  111.    Screen.Cursor:=crHourGlass;
  112.    Tree.enabled:=true;
  113.    tree.Items.Clear;
  114.    level:=0;
  115.  //设置根节点
  116.  mynode[level]:=tree.Items.Add(tree.TopItem,'库位');
  117.  mynode[level].ImageIndex:=0;
  118.  mynode[level].SelectedIndex:=1;
  119.  //遍历数据表,利用编码字段记录排序规律,依次添加树节点
  120.  with treeDB do
  121.  begin
  122.     try
  123.       if not active then open;
  124.       first;
  125.       while not treedb.Eof do
  126.       begin
  127.         nodeId:=trim(fieldbyname('ztcl_dm').AsString);
  128.         nodeTxt:=nodeId+'-'+trim(fieldbyname('ztcl_mc').AsString);
  129.         level:=GetNodeLevel(SCodeFormat,nodeId);//获得节点层树
  130.         //再这里返回代码的层次数
  131.         if level>0 then
  132.         begin
  133.            //增加下一节点时,用添加子节点的方法可以轻松实现节点的层次关系
  134.            //注意,这里的父节点是用当前节点的上一级节点mynode[level-1]
  135.            mynode[level]:=tree.Items.AddChild(mynode[level-1],nodeTxt);
  136.            mynode[level].ImageIndex:=0;
  137.            mynode[level].SelectedIndex:=1;
  138.         end;//end if
  139.       next;//下一条纪录
  140.       end;//end while
  141.     finally;
  142.       close;
  143.     end;
  144.     mynode[0].Expand(false);
  145.     screen.Cursor:=crdefault;
  146.  end;//end with
  147. end;
  148. procedure Tsz_ztck2.FormClose(Sender: TObject; var Action: TCloseAction);
  149. begin
  150.   dm.sz_ztck.active:=false;
  151.   dm.sz_ztcl.Active:=false;
  152.   dm.xt_lbjs.active:=false;
  153.   tree.Free;
  154.   sz_ztck2:=Nil;
  155.   action:=cafree;
  156. end;
  157. procedure Tsz_ztck2.FormCreate(Sender: TObject);
  158. begin
  159.    dm.sz_ztcl.Close;
  160.    dm.sz_ztcl.CommandText:='select * from sz_ztcl';
  161.    dm.sz_ztcl.Open;
  162.    dm.xt_lbjs.Close;
  163.    dm.xt_lbjs.CommandText:='select lbjs_sm from xt_lbjs where lb_dm='+''''+'sz_ztcl'+''''+'';
  164.    dm.xt_lbjs.Open;
  165.    //-----------------------------------------------
  166.    lbjs_sm:=dm.xt_lbjs.fieldbyname('lbjs_sm').AsString;
  167.    loadTree(dm.sz_ztcl);//初始化树
  168.    dm.sz_ztcl.Close;
  169.    dm.sz_ztcl.CommandText:='select * from sz_ztcl';
  170.    dm.sz_ztcl.Open;
  171.    dm.sz_ztck.Close;
  172.    dm.sz_ztck.CommandText:='select * from sz_ztck';
  173.    dm.sz_ztck.Open;
  174.    if dm.sz_ztcl.RecordCount=0 then add1.Enabled:=false
  175.     else  add1.Enabled:=true;
  176. end;
  177. procedure Tsz_ztck2.AddExecute(Sender: TObject);
  178. var s1,s2:string;
  179.    i,Epos:integer;
  180. begin
  181.  if tree.Selected.HasChildren then
  182.   begin
  183.     APPLICATION.MessageBox('必须在最底层增加','提示',MB_ok+mb_iconquestion);
  184.     exit;
  185.   end
  186.   else
  187.   s1:=Tree.Selected.Text;
  188.   Epos:=pos('-',s1)-1;//取得'-'在节点名中的位置
  189.   s2:=copy(s1,0,Epos);//
  190.   dm.sz_ztcl.Close;
  191.   dm.sz_ztcl.CommandText:='select ztcl_dm from sz_ztcl where ztcl_dm='+''''+s2+''''+'';
  192.   dm.sz_ztcl.Open;
  193.   //------------------------------------
  194.   dm.sz_ztck.Close;
  195.   dm.sz_ztck.CommandText:='select * from sz_ztck where ztck_dm='+''''+''''+'';
  196.   dm.sz_ztck.Open;
  197.   edit1.SetFocus;
  198.   edit1.Text:='';
  199.   edit2.Text:=dm.sz_ztcl.fieldbyname('ztcl_dm').AsString;
  200.   edit3.Text:='';
  201.   BtnState();//调用按钮的状态参数
  202.   dsState:='add';
  203.   end;
  204. procedure Tsz_ztck2.N5Click(Sender: TObject);
  205. begin
  206.  tree.Selected.Expand(true);
  207. end;
  208. procedure Tsz_ztck2.N6Click(Sender: TObject);
  209. begin
  210.  tree.Selected.Collapse(true);
  211. end;
  212. procedure Tsz_ztck2.EditExecute(Sender: TObject);
  213. var s1,s2:string;
  214.     Epos:integer;
  215. begin
  216.    if tree.selected=nil then
  217.       exit
  218.     else
  219.    if tree.Items.Count<>0 then
  220.    if Tree.Items[0].HasChildren<>false then
  221.    begin
  222.        dsState:='edit';
  223.        BtnState();//调用按钮的状态参数
  224.        s1:=Tree.Selected.Text;
  225.        Epos:=pos('-',s1)-1;//取得'-'在节点名中的位置
  226.        s2:=copy(s1,0,Epos);//
  227.        dm.sz_ztcl.Close;
  228.        dm.sz_ztcl.CommandText:='select * from sz_ztcl where ztcl_dm='+''''+s2+''''+'';
  229.        dm.sz_ztcl.Open;
  230.        dm.sz_ztck.edit;
  231.    end
  232.    else
  233.    begin
  234.       application.MessageBox('当前表中没有数据,不能修改','提示',mb_ok+mb_iconinformation);
  235.       exit;
  236.    end;
  237. end;
  238. procedure Tsz_ztck2.DeleteExecute(Sender: TObject);
  239. var
  240.    epos:integer;
  241.    s1,s2:string;
  242. begin
  243.   if tree.Selected=nil then
  244.      exit
  245.   else
  246.   if tree.Items[0].HasChildren then
  247.    if tree.Selected.HasChildren=true then
  248.     begin
  249.      application.messagebox('该部门包含下级,不能删除','提示',MB_OKCANCEL+mb_iconinformation );
  250.     end
  251.     else
  252.     begin
  253.        s2:=dbgrideh1.Columns[0].DisplayText;
  254.        if s2='' then
  255.           application.MessageBox('当前表中没有数据'+#13#10+'不能删除','提示',mb_ok+mb_iconinformation)
  256.        else
  257.         if application.messagebox('您确实要删除当前记录吗?','提示',MB_OKCANCEL+mb_iconquestion )=IDOK then
  258.       begin
  259.        //-----------------
  260.       if dm.sz_ztcl.recordcount=0 then
  261.         begin
  262.           xiugai.enabled:=false;
  263.           dele1.enabled:=false;
  264.           exit;
  265.         end;
  266.        edit2.text:='';edit3.Text:='';
  267.        dm.sz_ztck.Close;
  268.        dm.sz_ztck.CommandText:='delete  from sz_ztck where ztck_dm='+''''+s2+''''+'';
  269.        dm.sz_ztck.execute;
  270.        dm.sz_ztck.Close;
  271.        dm.sz_ztck.CommandText:='select * from sz_ztck';
  272.        dm.sz_ztck.Open;
  273.        //-----------------
  274.        Clientdataset1.Close;
  275.        Clientdataset1.CommandText:='select * from sz_ztck';
  276.        Clientdataset1.Open;//
  277.        if Clientdataset1.recordcount=0 then
  278.          begin
  279.            dele1.Enabled:=false;
  280.            xiugai.Enabled:=false;
  281.          end;
  282.       end;
  283.    end;
  284. end;
  285. procedure Tsz_ztck2.SaveExecute(Sender: TObject);
  286. var n,errorI:integer;
  287.     s_dm:string;
  288. begin
  289.   if (dsState='edit')=false then
  290.   begin
  291.        s_dm:=edit1.Text;
  292.        dm.sz_ztck.Close;
  293.        dm.sz_ztck.CommandText:='select * from sz_ztck where ztck_dm='+''''+s_dm+''''+'';
  294.        dm.sz_ztck.Open; //查找是否有重复纪录
  295.     if dm.sz_ztck.FieldByName('ztck_dm').AsString<>'' then
  296.       begin
  297.          application.MessageBox('已有重复纪录','提示',Mb_ok+mb_iconinformation);
  298.          exit;
  299.       end
  300.     else
  301.       begin
  302.         dm.sz_ztck.edit;
  303.         dm.sz_ztck.FieldByName('ztck_dm').AsString:=edit1.Text;
  304.         dm.sz_ztck.FieldByName('ztcl_dm').AsString:=edit2.Text;
  305.         dm.sz_ztck.FieldByName('ztck_ztc').AsString:=edit3.Text;
  306.         dm.sz_ztck.ApplyUpdates(0);
  307.         application.MessageBox('数据保存成功','提示',mb_ok+mb_iconinformation);
  308.         BtnState();
  309.         refresh.Execute;
  310.         exit;
  311.      end;
  312.   end
  313.   else
  314.   begin
  315.     dm.sz_ztck.edit;
  316.     dm.sz_ztck.FieldByName('ztck_dm').AsString:=edit1.Text;
  317.     dm.sz_ztck.FieldByName('ztcl_dm').AsString:=edit2.Text;
  318.     dm.sz_ztck.FieldByName('ztck_ztc').AsString:=edit3.Text;
  319.     dm.sz_ztck.ApplyUpdates(0);
  320.     application.MessageBox('数据保存成功','提示',mb_ok+mb_iconinformation);
  321.     BtnState();
  322.     refresh.Execute;
  323.     exit;
  324.   end;
  325. end;
  326. procedure Tsz_ztck2.RefreshExecute(Sender: TObject);
  327. begin
  328.   dm.sz_ztck.Close;
  329.   dm.sz_ztck.CommandText:='select * from sz_ztck';
  330.   dm.sz_ztck.Open;
  331.   tree.Selected.Expand(true);
  332. end;
  333. procedure Tsz_ztck2.QuitExecute(Sender: TObject);
  334. begin
  335.  close;
  336. end;
  337. procedure Tsz_ztck2.TreeClick(Sender: TObject);
  338. var
  339.    s1,s2,s3:string;
  340.    i,Epos:integer;
  341. begin
  342.   if tree.selected=nil then
  343.      exit
  344.   else
  345.  if Tree.Items[0].HasChildren<>false then
  346.  begin   //选中和不选中的图片显示
  347.     for i:=0 to Tree.items.count-1 do
  348.     begin
  349.       Tree.Items[i].ImageIndex:=0;
  350.       Tree.Items[i].SelectedIndex:=1;
  351.         s1:=Tree.Selected.Text;
  352.         Epos:=pos('-',s1);
  353.         s2:=copy(s1,0,Epos-1);
  354.         dm.sz_ztck.Close;
  355.         dm.sz_ztck.CommandText:='select * from sz_ztck where ztcl_dm='+''''+s2+''''+'';
  356.         dm.sz_ztck.Open;
  357.         edit1.Text:=dm.sz_ztck.FieldByName('ztck_dm').AsString;
  358.         edit2.Text:=dm.sz_ztck.FieldByName('ztcl_dm').AsString;
  359.         edit3.Text:=dm.sz_ztck.FieldByName('ztck_ztc').AsString;
  360.     end;
  361.  end;
  362. end;
  363. procedure Tsz_ztck2.DBGridEh1DblClick(Sender: TObject);
  364. var
  365.   s1,s2:string;
  366.   i:integer;
  367. begin//--1单击每一行时,使树形控件也变化
  368.   s1:=DBGridEh1.Columns[0].DisplayText;//易犯错误是表格的Columns弄错0,1,2
  369.   dm.sz_ztck.Locate('ztck_dm','s1',[]);
  370.   edit1.Text:=dm.sz_ztck.fieldbyname('ztck_dm').AsString;
  371.   edit2.Text:=dm.sz_ztck.fieldbyname('ztcl_dm').AsString;
  372.   edit3.Text:=dm.sz_ztck.fieldbyname('ztck_ztc').AsString;
  373.   if Tree.Items[0].HasChildren<>false then
  374.   begin//end if
  375.     for i:=0 to Tree.items.count-1 do
  376.       if Tree.Items[i].Text=s1+'-'+s2 then
  377.      begin
  378.          Tree.Items[i].Selected:=true;
  379.          break;
  380.      end;//end for
  381.   end;//end if
  382. end;//--1
  383. end.