📄 bas_dept2.pas
字号:
abort;
end;
edt_DeptCode.text:=Trim(edt_DeptCode.text);
if length(edt_DeptCode.text) mod 2<>0 then
begin
DispInfo(' 部门代码长度不规范! ',1);
TWinControl(Sender).SetFocus;
abort;
end;
s:=edt_DeptCode.text;
if length(s)<>2 then
with AdoQry_tmp do
begin
Close;
sql.text:=
'select DeptName from Dept '+
' where DeptCode='''+copy(s,0,length(s)-2)+'''';
open;
if eof then
begin
DispInfo(' 上级部门不存在! ',1);
TWinControl(Sender).SetFocus;
abort;
end
else
Lbl_DeptName.Caption:=fieldbyname('DeptName').asstring;
end
else
Lbl_DeptName.Caption:='';
if (Add)or((not Add) and
(TEdit(Sender).Text<>AdoQry_Main.fieldbyname('DeptCode').AsString)) then
begin
with AdoQry_Tmp do
begin
Close;
SQL.text:=
'Select DeptCode From Dept Where DeptCode='''+TEdit(Sender).Text+'''';
Open;
if fieldbyname('DeptCode').AsString<>'' then
begin
DispInfo(' 该部门代码已经存在,不允许增加或修改! ',1);
TWinControl(Sender).SetFocus;
Abort;
end;
end;
end;
end;
procedure TFrm_Bas_Dept2.btn_CancelClick(Sender: TObject);
begin
inherited;
TV.SetFocus;
btn_ok.enabled:=False;
btn_Cancel.enabled:=False;
if not fReadOnly then
begin
Act_Delete.Enabled :=True;
Act_New.Enabled :=True;
end
else
begin
Act_Delete.Enabled :=False;
Act_New.Enabled :=False;
end;
if TV.selected.text<>'Root' then
refreshedits;
end;
procedure TFrm_Bas_Dept2.btn_okClick(Sender: TObject);
var
s:string;
begin
inherited;
with AdoQry_Tmp do
begin
Close;
SQL.clear;
if(Add)then
begin
SQL.Add('Insert Dept (DeptCode,DeptName,DeptremArk) '+
' Values '+
'(:DeptCode,:DeptName,:remArk)');
end
else
begin
SQL.Add('Update Dept set '+
' DeptCode=:DeptCode,'+
' DeptName=:DeptName,'+
' DeptremArk=:remArk '+
' where DeptCode=:oldCode');
Parameters.ParambyName('oldCode').Value:=AdoQry_Main.fieldbyname('DeptCode').asstring;
end;
Parameters.ParambyName('DeptCode').Value:=Trim(edt_DeptCode.text);
Parameters.ParambyName('DeptName').Value:=Trim(edt_DeptName.text);
Parameters.ParambyName('remArk').Value:=Trim(edt_remArk.text);
execsql;
end;
with AdoQry_Main do
begin
if (Add) Then
Append
Else
Edit;
fieldbyname('DeptCode').AsString:=Trim(edt_DeptCode.text);
fieldbyname('DeptName').AsString:=Trim(edt_DeptName.text);
fieldbyname('DeptremArk').AsString:=Trim(edt_remArk.text);
Post;
end;
btn_ok.Enabled :=False;
btn_Cancel.enabled:=False;
if Add then
set_Treeview_after_ok
else
TV.Selected.text:=Trim(Edt_DeptCode.text)+' '+Trim(Edt_DeptName.Text);
TV.setfocus;
s:=getCode(TV.selected.text);
AdoQry_Main.Locate('DeptCode',s,[]);
Sysrefresh:=True;
refreshedits;
Sysrefresh:=False;
end;
procedure TFrm_Bas_Dept2.RefreshTV;
var
rootnode:ttreenode;
Currentid,s:string;
i:integer;
begin
TV.Items.clear;
RootNode:=TV.Items.Add(nil,'Root');
RootNode.SelectedIndex :=1;
with AdoQry_Main do
begin
First;
for i:=1 to recordCount do
begin
if Length(fieldbyname('DeptCode').AsString)=2 then
begin
Currentid:=fieldbyname('DeptCode').AsString ;
s:=Currentid+' '+fieldbyname('DeptName').AsString;
treenode:=TV.Items.Addchild(RootNode,s);
treenode.SelectedIndex :=1;
Addnode(fieldbyname('DeptCode').asstring,treenode);
locate('DeptCode',Currentid,[]);
end;
next;
end;
end;
TV.Items[0].Expand(True);
end;
procedure TFrm_Bas_Dept2.set_Treeview_after_ok;
var
node,Parentnode:ttreenode;
s,Sourceid,tArgetid:string;
begin
isfound:=False;
findnode(TV.Items[0]);
if not isfound then
begin
find_Addnode(TV.Items[0].GetLastChild);
exit;
end;
node:=TV.selected;
if (getCode(TV.selected.text)>Trim(Edt_DeptCode.text)) and (node.Parent.GetPrevChild(node)<>nil) then
find_Addnode(node.Parent.GetPrevChild(node))
else
begin
Parentnode:=node.Parent;
{ while node<>nil do
begin
Sourceid:=GetCode(node.text);
s:=copy(Sourceid,length(Sourceid)-1,2);
s:=prefixofstr(inttostr(strtoint(s)+1),'0',2);
tArgetid:=copy(Sourceid,1,length(Sourceid)-2)+s;
Changenode(node,Sourceid,tArgetid);
node:=Parentnode.GetNextChild(node);
end;
}
node:=TV.Items.AddChild(Parentnode,Trim(Edt_DeptCode.text)+' '+Edt_DeptName.text);
Parentnode.AlphaSort;
node.selected:=True;
// TV.setfocus;
end;
end;
procedure TFrm_Bas_Dept2.set_Treeview_after_Delete;
var
node,Parentnode:ttreenode;
s,Sourceid,tArgetid:string;
begin
Parentnode:=TV.selected.Parent;
node:=Parentnode.GetNextChild(TV.selected);
if node<>nil then
begin
TV.Items.Delete(TV.selected);
node.selected:=True;
TV.setfocus;
end
else if Parentnode.GetprevChild(TV.selected)<>nil then
begin
node:=Parentnode.GetprevChild(TV.selected);
TV.Items.Delete(TV.selected);
node.selected:=True;
TV.setfocus;
exit;
end
else
begin
TV.Items.Delete(TV.selected);
node:=Parentnode;
node.selected:=True;
TV.setfocus;
exit;
end;
{ while node<>nil do
begin
Sourceid:=GetCode(node.text);
s:=copy(Sourceid,length(Sourceid)-1,2);
s:=prefixofstr(inttostr(strtoint(s)-1),'0',2);
tArgetid:=copy(Sourceid,1,length(Sourceid)-2)+s;
Changenode(node,Sourceid,tArgetid);
node:=Parentnode.GetNextChild(node);
end;
}
end;
procedure TFrm_Bas_Dept2.findnode(node: ttreenode);
begin
if (node.Text>=Trim(Edt_DeptCode.text))and(node.text<>'Root')then
begin
isfound:=True;
TV.Selected:=node;
exit;
end;
node:=node.getFirstChild;
while(node<>nil)and (not isfound) do
begin
findnode(node);
node:=node.Parent.GetNextChild(node);
end;
end;
procedure TFrm_Bas_Dept2.find_Addnode(node: ttreenode);
var
nodeselceted:ttreenode;//要选中的节点
begin
if node=nil then
begin
node:=TV.Items.AddChild(tv.Items[0],Trim(Edt_DeptCode.Text)+' '+Edt_DeptName.Text);
node.selected:=True;
TV.setfocus;
exit;
end;
while length(GetCode(node.text))<>length(Trim(Edt_DeptCode.text)) do
begin
if node.GetLastChild=nil then
break
else
node:=node.GetLastChild;
end;
if length(GetCode(node.text))<>length(Trim(Edt_DeptCode.Text)) then
begin
node:=TV.Items.AddChild(node,Trim(Edt_DeptCode.Text)+' '+Edt_DeptName.Text);
node.selected:=True;
TV.setfocus;
end
else
begin
nodeselceted:=TV.Items.AddChild(node.Parent,Trim(Edt_DeptCode.Text)+' '+Edt_DeptName.Text);
node.Parent.AlphaSort;
nodeselceted.selected:=True;
TV.setfocus;
end;
end;
function TFrm_Bas_Dept2.prefixofstr(s:string;chr:chAr;len:integer):string;
begin
Result:=Trim(s);
Result:=stringofchAr(chr,len-length(Result))+Result;
end;
procedure TFrm_Bas_Dept2.Changenode(node: ttreenode; Sourceid,
tArgetid: string);
var
s:string;
begin
s:=node.text;
delete(s,1,length(Sourceid));
node.text:=tArgetid+s;
node:=node.getFirstChild;
while node<>nil do
begin
Changenode(node,Sourceid,tArgetid);
node:=node.Parent.GetNextChild(node);
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -