📄 kmbmgl.pas
字号:
unit kmbmgl;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls, Buttons, DBCtrls, Mask, ExtCtrls, Grids, Math,
DBGrids, DBTables, StrUtils, DB, ADODB, ComCtrls;
type
TFkmbmgl = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
SBzq: TSpeedButton;
SBfq: TSpeedButton;
PopupMenu1: TPopupMenu;
N2: TMenuItem;
StatusBar1: TStatusBar;
TreeView1: TTreeView;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
MainMenu1: TMainMenu;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
Label4: TLabel;
Label5: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit3: TMaskEdit;
N11: TMenuItem;
N12: TMenuItem;
N1: TMenuItem;
N13: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure BgbClick(Sender: TObject);
procedure SBzqClick(Sender: TObject);
procedure SBfqClick(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure TreeView1Expanded(Sender: TObject; Node: TTreeNode);
procedure TreeView1Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure PopupMenu1Popup(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure N10Click(Sender: TObject);
procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
procedure Edit4KeyPress(Sender: TObject; var Key: Char);
private
procedure Tadditem(Node: TTreeNode);
procedure treechild(xnode:TTreeNode;bzf,lx:string);
{ Private declarations }
public
{ Public declarations }
end;
var
Fkmbmgl: TFkmbmgl;
_sjbh:string;
xNode:TTreeNode;xgzt:boolean;
_kmbmgz,_kmbmjb,oldkmbm,oldkmmc:string;
oldsjmc,oldbmjb:integer;
implementation
uses dmu;
{$R *.dfm}
procedure TFkmbmgl.Tadditem(Node:TTreeNode);
VAR NodeA:TTreeNode;
bsc:string;
begin
dm.table1.Filtered:=false;
dm.table1.Filter:='sjbm='+QuotedStr(copy(node.Text,1,POS(' ',node.Text)-1));
dm.table1.Filtered:=true;
dm.table1.first;
while not dm.table1.eof do begin
bsc:=trim(dm.table1.Fieldbyname('kmbm').AsString)+' '+trim(dm.table1.Fieldbyname('kmmc').AsString);
NodeA:=treeview1.Items.Addchild(node,bsc);
if not dm.table1.Fieldbyname('sjbz').asboolean then
treeview1.Items.Addchild(nodeA,'temp');
dm.table1.next;
end;
dm.table1.Filtered:=false;
end;
procedure TFkmbmgl.FormCreate(Sender: TObject);
var bsc:string;NodeA,Nodeb:TTreeNode;
begin
caption:='科目编码管理'; //窗体标题
_kmbmgz:='323'; //每级编码长度
_kmbmjb:='3'; //编码级数
treeview1.Items.Clear;
dm.Table1.Open;
dm.Table2.Open;
dm.table2.First;
while not dm.table2.Eof do
begin
bsc:=trim(dm.table2.Fieldbyname('kmlb').AsString)+' '+trim(dm.table2.Fieldbyname('kmlbmc').AsString);
Nodeb:=treeview1.Items.Add(treeview1.Selected,bsc);
dm.table1.Filtered:=false;
dm.table1.Filter:='kmlb='+quotedstr(dm.table2.Fieldbyname('kmlb').AsString)+' and bmjb=1';
dm.table1.Filtered:=true;
dm.table1.first;
while not dm.table1.eof do begin
if dm.table1.Fieldbyname('bmjb').AsInteger=1 then
begin
bsc:=trim(dm.table1.Fieldbyname('kmbm').AsString)+' '+trim(dm.table1.Fieldbyname('kmmc').AsString);
NodeA:=treeview1.Items.Addchild(nodeb,bsc);
if not dm.table1.Fieldbyname('sjbz').asboolean then
treeview1.Items.Addchild(nodeA,'temp');
end;
dm.table1.next;
end;
dm.table2.next;
end;
dm.table1.Filtered:=false;
if treeview1.Items.Count>0 then xnode:=treeview1.Items[0];
statusbar1.Panels[0].Text:='浏览';
panel1.Enabled:=false;
end;
procedure TFkmbmgl.BgbClick(Sender: TObject);
begin
close;
end;
procedure TFkmbmgl.SBzqClick(Sender: TObject);
var SavePlace: TBookmark;
pNode:TTreeNode;
begin
if (edit4.Text='') or (edit5.Text='') then
begin
showmessage('科目名称或拼音不能为空');
exit;
end;
dm.table1.Edit;
dm.table1.fieldbyname('kmbm').AsString:=edit3.Text;
dm.table1.fieldbyname('kmmc').AsString:=edit4.Text;
dm.table1.fieldbyname('kmpy').AsString:=edit5.Text;
dm.table1.fieldbyname('xgsj').AsDateTime:=now;
dm.table1.Post;
xnode.Text:=trim(dm.table1.Fieldbyname('kmbm').AsString)+' '+trim(dm.table1.Fieldbyname('kmmc').AsString);
dm.table1.Requery([]);
panel2.Visible:=false;
treeview1.Enabled:=true;
TreeView1Click(Sender);
end;
procedure TFkmbmgl.treechild(xnode:TTreeNode;bzf,lx:string);
var pNode:TTreeNode;
begin
TreeView1Expanded(TreeView1,xNode);
pnode:=xnode.getFirstChild;
while pnode<>nil do
begin
if (lx='-') and (pos(bzf,pnode.Text)>0) then
pnode.Text:=copy(pnode.Text,1,pos(bzf,pnode.Text)-1);
if (lx='+') and (pos(bzf,pnode.Text)<1) then
pnode.Text:=pnode.Text+bzf;
treechild(pnode,bzf,lx);
pnode:=xnode.GetNextChild(pnode);
end;
end;
procedure TFkmbmgl.SBfqClick(Sender: TObject);
begin
panel2.Visible:=false;
treeview1.Enabled:=true;
TreeView1Click(Sender);
end;
procedure TFkmbmgl.N2Click(Sender: TObject);
var pnode:TTreenode;msql,sckmbm:string;
begin
sckmbm:=oldkmbm;
if MessageDlg('删除当前及其下级科目吗?'+
chr(13)+chr(13)+sckmbm+
chr(13)+chr(13)+oldkmmc,
mtconfirmation,[mbyes,mbno],0)=mrno then exit;
Pnode:=xnode.Parent;
xnode.Delete;
try
msql:='delete from y_kmbmb where kmbm like'+quotedstr(trim(sckmbm)+'%');
dm.ADOConnection1.Execute(msql);
if (Pnode<>nil) and (Pnode.getFirstChild=nil) then
begin
msql:='update y_kmbmb set sjbz=1 where kmbm='+quotedstr(sckmbm);
dm.ADOConnection1.Execute(msql);
end;
dm.table1.Requery([]);
treeview1.Selected:=Pnode;
MessageDlg('删除成功!',mtInformation,[mbok],0);
except
MessageDlg('删除失败!',mtError,[mbok],0);
end;
Xnode:=treeview1.Selected;
TreeView1Click(Sender);
end;
procedure TFkmbmgl.FormDestroy(Sender: TObject);
var yebm,msql:string;
begin
dm.table1.Close;
dm.table2.Close;
end;
procedure TFkmbmgl.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose:=n10.Enabled;
end;
procedure TFkmbmgl.TreeView1Expanded(Sender: TObject; Node: TTreeNode);
var tempnode:TTreenode;
begin
xNode:=Node;
if (node.Count=1) then
begin
tempnode:=node.getFirstChild ;
if (tempnode.text='temp') then
BEGIN
tempnode.Delete;
Tadditem(node);
END;
END;
end;
procedure TFkmbmgl.TreeView1Click(Sender: TObject);
var pnode:TTreenode;pname:string;i:integer;
begin
xgzt:=false;
xnode:=treeview1.Selected;
if (xnode=nil) or (xnode.Level=0) then
begin
edit1.Text:='';
edit2.Text:='';
edit3.Text:='';
edit4.Text:='';
edit5.Text:='';
edit3.Enabled:=false;
edit4.Enabled:=false;
edit5.Enabled:=false;
//最高层,非科目,不允许修改;
exit;
end;
//属于科目,允许修改;
edit4.Enabled:=true;
edit5.Enabled:=true;
dm.table1.Locate('kmbm',leftstr(xnode.Text,POS(' ',Xnode.Text)-1),[]);
//定位
oldbmjb:=dm.table1.fieldbyname('bmjb').AsInteger;
oldkmmc:=dm.table1.fieldbyname('kmmc').AsString;
oldkmbm:=dm.table1.fieldbyname('kmbm').AsString;
oldsjmc:=0;
for i:=1 to oldbmjb-1 do
oldsjmc:=oldsjmc+strtoint(copy(_kmbmgz,i,1));
//保存当前科目的原值
pnode:=xnode;
pname:='';
while pnode.Level>1 do
begin
pnode:=pnode.Parent;
if pname<>'' then
pname:=trim(copy(pnode.Text,POS(' ',pnode.Text)+1,120))+'.'+pname
else
pname:=trim(copy(pnode.Text,POS(' ',pnode.Text)+1,120));
end;
if pnode.Level=1 then
edit1.Text:=trim(copy(pnode.Parent.Text,3,40))
else
edit1.Text:=trim(copy(pnode.Text,3,40));
edit2.Text:=pname;
//找到并显示它的祖宗
edit3.Text:=dm.table1.fieldbyname('kmbm').AsString;
edit4.Text:=dm.table1.fieldbyname('kmmc').AsString;
edit5.Text:=dm.table1.fieldbyname('kmpy').AsString;
end;
procedure TFkmbmgl.N4Click(Sender: TObject);
var sjb,x,sjmc,cs,i:integer;sbm,xbm,pbm,bsc:string;pnode:TTreenode;
begin
//增加下级
TreeView1Expanded(Sender,xNode);
sjb:=xnode.Level+1;
if sjb>strtoint(_kmbmjb) then exit;
sjmc:=0;
x:=strtoint(copy(_kmbmgz,sjb,1));
if sjb=1 then
begin
sjmc:=1;
x:=x-1;
end
else
for i:=1 to sjb-1 do
sjmc:=sjmc+strtoint(copy(_kmbmgz,i,1));
sbm:=copy(xnode.Text,1,sjmc);
cs:=strtoint(floattostr(power(10,x)))+1;
//找到编号最大的儿子
pnode:=xnode.getFirstChild;
pbm:='0';
while pnode<>nil do
begin
if copy(pnode.Text,sjmc+1,x)>pbm then
pbm:=copy(pnode.Text,sjmc+1,x);
pnode:=xnode.GetNextChild(pnode);
end;
xbm:=sbm+rightstr(inttostr(strtoint(pbm)+cs),x);
//生成新编码
try
if sjb>1 then
begin
//把其上级科目的相关标志改为false;
dm.table1.Locate('kmbm',sbm,[]);
dm.table1.Edit;
dm.table1.FieldByName('sjbz').AsBoolean:=false;
dm.table1.Post;
end;
//写入新科目
dm.table1.Append;
dm.table1.FieldByName('kmbm').AsString:=xbm;
dm.table1.FieldByName('kmmc').AsString:='XXXXXXXXXXXXX';
IF SJB=1 THEN
dm.table1.FieldByName('sjbm').AsString:=''
ELSE
dm.table1.FieldByName('sjbm').AsString:=sbm;
dm.table1.FieldByName('kmlb').AsString:=copy(sbm,1,1);
dm.table1.FieldByName('kmpy').AsString:='';
dm.table1.FieldByName('bmjb').AsInteger:=sjb;
dm.table1.FieldByName('sjbz').AsBoolean:=true;
dm.table2.Locate('kmlb',copy(xbm,1,1),[]);
dm.table1.FieldByName('yefx').AsString:=dm.table2.FieldByName('yefx').AsString;
dm.table1.Post;
bsc:=trim(dm.table1.Fieldbyname('kmbm').AsString)+' '+trim(dm.table1.Fieldbyname('kmmc').AsString);
xnode:=treeview1.Items.AddChild(xnode,bsc);
treeview1.Selected:=xnode;
except
MessageDlg('编码有错!',mtError,[mbok],0);
end;
TreeView1Click(Sender);
end;
procedure TFkmbmgl.N3Click(Sender: TObject);
var i,sjb,sjmc,x,cs:integer;sbm,xbm,pbm,bsc:string;pnode:TTreenode;
begin
//增加同级
xnode:=treeview1.Selected.Parent;
pnode:=xnode;
sjb:=xnode.Level+1;
x:=strtoint(copy(_kmbmgz,sjb,1));
sjmc:=0;
for i:=1 to sjb-1 do
sjmc:=sjmc+strtoint(copy(_kmbmgz,i,1));
sbm:=copy(xnode.Text,1,sjmc);
cs:=strtoint(floattostr(power(10,x)))+1;
//找到编号最大的儿子
pnode:=xnode.getFirstChild;
pbm:='0';
while pnode<>nil do
begin
if copy(pnode.Text,sjmc+1,x)>pbm then
pbm:=copy(pnode.Text,sjmc+1,x);
pnode:=xnode.GetNextChild(pnode);
end;
xbm:=sbm+rightstr(inttostr(strtoint(pbm)+cs),x);
//生成新编码
try
dm.table1.Append;
dm.table1.FieldByName('kmbm').AsString:=xbm;
dm.table1.FieldByName('kmmc').AsString:='XXXXXXXXXXXXX';
dm.table1.FieldByName('kmpy').AsString:='';
dm.table1.FieldByName('yhzh').AsString:='';
dm.table1.FieldByName('sjbz').AsBoolean:=true;
IF SJB=1 THEN
dm.table1.FieldByName('sjbm').AsString:=''
ELSE
dm.table1.FieldByName('sjbm').AsString:=sbm;
dm.table1.FieldByName('kmlb').AsString:=copy(xbm,1,1);
dm.table1.FieldByName('bmjb').AsInteger:=sjb;
dm.table2.Locate('kmlb',copy(xbm,1,1),[]);
dm.table1.FieldByName('yefx').AsString:=dm.table2.FieldByName('yefx').AsString;
dm.table1.Post;
bsc:=trim(dm.table1.Fieldbyname('kmbm').AsString)+' '+trim(dm.table1.Fieldbyname('kmmc').AsString);
xnode:=treeview1.Items.AddChild(xnode,bsc);
treeview1.Selected:=xnode;
except
MessageDlg('编码有错!',mtError,[mbok],0);
end;
TreeView1Click(Sender);
end;
procedure TFkmbmgl.PopupMenu1Popup(Sender: TObject);
begin
//在菜单弹出前,确定哪些项目可以使用
TreeView1Click(Sender);
treeview1.Selected:=xnode;
n2.Enabled:=false;
n3.Enabled:=false;
n4.Enabled:=false;
if (xnode<>nil) then
begin
n2.Enabled:=(xnode.Level>0) ;
n3.Enabled:=xnode.Level>0;
n4.Enabled:=xnode.Level<strtoint(_kmbmjb);
end;
end;
procedure TFkmbmgl.FormActivate(Sender: TObject);
begin
Treeview1.SetFocus;
TreeView1Click(Sender);
end;
procedure TFkmbmgl.N7Click(Sender: TObject);
begin
n7.Enabled:=false;
n8.Enabled:=true;
n10.Enabled:=false;
n11.Enabled:=false;
panel1.Enabled:=true;
Treeview1.PopupMenu:=PopupMenu1;
statusbar1.Panels[0].Text:='修改';
end;
procedure TFkmbmgl.N8Click(Sender: TObject);
begin
n7.Enabled:=true;
n8.Enabled:=false;
n10.Enabled:=true;
n11.Enabled:=true;
panel1.Enabled:=false;
Treeview1.PopupMenu:=nil;
statusbar1.Panels[0].Text:='浏览';
statusbar1.Panels[1].Text:='';
end;
procedure TFkmbmgl.N10Click(Sender: TObject);
begin
close;
end;
procedure TFkmbmgl.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
TreeView1Click(Sender);
end;
procedure TFkmbmgl.Edit4KeyPress(Sender: TObject; var Key: Char);
begin
panel2.Visible:=true;
treeview1.Enabled:=false;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -