📄 sys_sysmenu.pas
字号:
s:=copy(Sourceid,length(Sourceid)-1,2);
tArgetid:=copy(brOtherBack[i],1,length(brOtherBack[i])-2)+
prefixofstr(inttostr(strtoint(s)+1),'0',2);
ChangeID(Sourceid,tArgetid,False);
end;
end;
end;
procedure TFrm_Sys_SysMenu.Changerecdel(fidstring,Sourceid: string);
var
i,Count:integer;
s,tArgetid:string;
brOtherBack:Array[1..99] of string;//比当前id大的兄弟,如mn01以后的兄弟有mn02,mn03,mn04(假设存在)
begin
with AdoQry_tmp2 do
begin
Count:=0;
First;
while not eof do
begin
if (fieldbyname('PSysMenuCode').AsString =fidstring)and
(fieldbyname('SysMenuCode').AsString>Sourceid) then
begin
Inc(Count);
brOtherBack[Count]:=fieldbyname('SysMenuCode').AsString;
end;
next;
end;
delcurrec('delete from SysMenuAccessCtrl '+
'where SysMenuId='+IntToStr(Lc_SysMenuId)+'');
delcurrec('delete from ReportCtrl '+
'where SysMenuId='+IntToStr(Lc_SysMenuId)+'');
delcurrec('delete from SysMenu '+
'where SysMenuId='+IntToStr(Lc_SysMenuId)+'');
for i:=1 to Count do
begin
Sourceid:=brOtherBack[i];
s:=copy(Sourceid,length(Sourceid)-1,2);
tArgetid:=copy(brOtherBack[i],1,length(brOtherBack[i])-2)+
prefixofstr(inttostr(strtoint(s)-1),'0',2);
ChangeID(Sourceid,tArgetid,True);
end;
end;
end;
procedure TFrm_Sys_SysMenu.btn_CancelClick(Sender: TObject);
begin
Treeview1.SetFocus;
Edt_SysMenuCode.enabled:=False;
btn_ok.enabled:=False;
btn_Cancel.enabled:=False;
panel1.visible:=False;
tlbtn_Add.enabled:=True;
if Treeview1.selected.text<>'Root' then
refreshedits;
end;
procedure TFrm_Sys_SysMenu.set_Treeview_after_ok;
var
node,Parentnode:ttreenode;
s,Sourceid,tArgetid:string;
begin
isfound:=False;
findnode(Treeview1.Items[0]);
if not isfound then
begin
find_Addnode(Treeview1.Items[0].GetLastChild);
exit;
end;
node:=Treeview1.selected;
if getCode(Treeview1.selected.text)>Trim(Edt_SysMenuCode.text)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:=Treeview1.Items.AddChild(Parentnode,Trim(Edt_SysMenuCode.text)+' '+Edt_SysMenuName.text);
Parentnode.AlphaSort;
node.selected:=True;
Treeview1.setfocus;
end;
end;
procedure TFrm_Sys_SysMenu.set_Treeview_after_Delete;
var
node,Parentnode:ttreenode;
s,Sourceid,tArgetid:string;
begin
Parentnode:=Treeview1.selected.Parent;
node:=Parentnode.GetNextChild(Treeview1.selected);
if node<>nil then
begin
Treeview1.Items.Delete(Treeview1.selected);
node.selected:=True;
Treeview1.setfocus;
end
else if Parentnode.GetprevChild(Treeview1.selected)<>nil then
begin
node:=Parentnode.GetprevChild(Treeview1.selected);
Treeview1.Items.Delete(Treeview1.selected);
node.selected:=True;
Treeview1.setfocus;
exit;
end
else
begin
Treeview1.Items.Delete(Treeview1.selected);
node:=Parentnode;
node.selected:=True;
Treeview1.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_Sys_SysMenu.findnode(node: ttreenode);
begin
if (node.Text>=Trim(Edt_SysMenuCode.text))and(node.text<>'Root')then
begin
isfound:=True;
Treeview1.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_Sys_SysMenu.find_Addnode(node: ttreenode);
var
nodeselceted:ttreenode;//要选中的节点
begin
while length(GetCode(node.text))<>length(Trim(Edt_SysMenuCode.text))do
begin
if node.GetLastChild=nil then
break
else
node:=node.GetLastChild;
end;
if length(GetCode(node.text))<>length(Trim(Edt_SysMenuCode.Text)) then
begin
node:=Treeview1.Items.AddChild(node,Trim(Edt_SysMenuCode.Text)+' '+Edt_SysMenuName.Text);
node.selected:=True;
Treeview1.setfocus;
end
else
begin
nodeselceted:=Treeview1.Items.AddChild(node.Parent,Trim(Edt_SysMenuCode.Text)+' '+Edt_SysMenuName.Text);
node.Parent.AlphaSort;
nodeselceted.selected:=True;
Treeview1.setfocus;
end;
end;
procedure TFrm_Sys_SysMenu.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;
procedure TFrm_Sys_SysMenu.tlbtn_AddClick(Sender: TObject);
begin
panel1.visible:=True;
tlbtn_Add.enabled:=False;
tlbtn_Delete.enabled:=False;
//已经是增加状态,不允许再增加、删除
setedits(True,True,True);
Edt_SysMenuCode.setfocus;
Edt_SysMenuCode.selectall;
btn_ok.enabled:=True;
btn_Cancel.enabled:=True;
end;
procedure TFrm_Sys_SysMenu.tlbtn_ConditionClick(Sender: TObject);
begin
formactivate(sender);
end;
procedure TFrm_Sys_SysMenu.check(sender:tobject);
var
fidstring,prestring,s,ss:string;//父id;编码的前一个id,如mn02的前一个id是mn01
fidflag,preflag:boolean; //父id和编码的前一个id是否存在
controlName:string;
okbutton:boolean;
i,errCode:integer;
begin
// ok button时每项都要检查
okbutton:=False;
checkResult:=True;
if (sender is tcustomedit) or (activecontrol is tbutton) then
begin
if activecontrol is tbutton then
begin
if (activecontrol as tbutton).Name='btn_ok' then
okbutton:=True;
end
else
controlName:=(sender as tcustomedit).Name;
if (controlName='Edt_SysMenuCode') or (okbutton) then
begin
if Edt_SysMenuCode.Text='' then
begin
Application.MessageBox(' 菜单代码不能为空! ','错误提示',MB_OK+mb_Iconstop);
Edt_SysMenuCode.text:='mn';
checkResult:=False;
exit;
end;
if length(Edt_SysMenuCode.Text)<4 then
begin
Application.MessageBox(' 代码长度不规范! ','错误提示',MB_OK+mb_Iconstop);
checkResult:=False;
exit;
end;
if Trim(Edt_SysMenuCode.Text) <> Lc_OldCode then //没有改变id
begin
fidflag:=False;
preflag:=False;
s:=Trim(Edt_SysMenuCode.text);
if length(s)=4 then
begin
fidstring:='';
fidflag:=True;
end
else
fidstring:=copy(s,1,length(s)-2);
ss:=copy(s,length(s)-1,2);
val(ss,i,errCode);
if errCode<>0 then
begin
Application.MessageBox(' 代码中含有非法字符! ','错误提示',MB_OK+mb_Iconstop);
checkResult:=False;
exit;
end;
if ss='01' then
preflag:=True
else
prestring:=copy(s,1,length(s)-2)+prefixofstr(inttostr(strtoint(ss)-1),'0',2);
with AdoQry_Tmp2 do
begin
if Locate('SysMenuCode',fidstring,[]) then
fidflag:=True;
if Locate('SysMenuCode',prestring,[]) then
preflag:=True;
end;//endwith
if not(fidflag) then
begin
Application.MessageBox(' 还没有上级菜单,不允许新增! ','错误提示',MB_OK+mb_Iconstop);
checkResult:=False;
exit;
end;
if not(preflag) then
begin
Application.MessageBox(' 菜单代码不连续! ','错误提示',MB_OK+mb_Iconstop);
checkResult:=False;
exit;
end;
end;
end;
if (controlName='Edt_SysMenuName') or (okbutton) then
begin
if Edt_SysMenuName.Text='' then
begin
Application.MessageBox(' 菜单名称不能为空! ','错误提示',MB_OK+mb_Iconstop);
checkResult:=False;
exit;
end
else if Edt_SysMenuName.Text='Root' then
begin
Application.MessageBox(' "Root"是系统保留名称,不能使用! ','错误提示',MB_OK+mb_Iconstop);
checkResult:=False;
exit;
end;
end;
end;
end;
procedure TFrm_Sys_SysMenu.Edt_SysMenuCodeExit(Sender: TObject);
begin
if (activecontrol=btn_Cancel) or
(activecontrol=Treeview1) or
((activecontrol.tabOrder<(sender as twincontrol).tabOrder)
and (activecontrol.Parent=(sender as twincontrol).Parent)) then
exit;
check(sender);
if not checkResult then
activecontrol:=(sender as twincontrol);
end;
//设置各个edit的maxlength
procedure TFrm_Sys_SysMenu.seteditmaxlen;
begin
end;
procedure TFrm_Sys_SysMenu.Treeview1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
inherited;
if (key=ord('D')) and (shift-[sSalt]-[ssshift]+[sSCtrl]=shift) then
tlbtn_DeleteClick(Sender);
end;
procedure TFrm_Sys_SysMenu.cbx_fileClick(Sender: TObject);
begin
inherited;
edt_Cmbbx_Change(sender);
end;
procedure TFrm_Sys_SysMenu.InitForm(AdOConnection: TAdOConnection;
ReadOnly: Boolean);
begin
inherited;
AdoQry_Tmp1.Connection:=AdoConnection;
AdoQry_Tmp2.Connection:=AdoConnection;
AdoQry_Check.Connection:=AdoConnection;
end;
function TFrm_Sys_SysMenu.prefixofstr(s:string;chr:chAr;len:integer):string;
begin
Result:=Trim(s);
Result:=stringofchAr(chr,len-length(Result))+Result;
end;
procedure TFrm_Sys_SysMenu.tlbtn_exitClick(Sender: TObject);
begin
inherited;
Close;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -