📄 bas_dept2.pas
字号:
unit Bas_Dept2;
Interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Base_Outer, Menus, ExtPrintReport, Db, ActnList, AdODB, Grids, DBGridEh,
StdCtrls, ExtCtrls, ComCtrls, ToolWin, jpeg;
Type
TFrm_Bas_Dept2 = Class(TFrm_Base_Outer)
Label1: TLabel;
Edt_DeptCode: TEdit;
Label2: TLabel;
Edt_DeptName: TEdit;
Label3: TLabel;
Lbl_DeptName: TLabel;
Label5: TLabel;
Edt_RemArk: TEdit;
btn_ok: TButton;
btn_Cancel: TButton;
Pnl_Add: TPanel;
AdoQry_MainDeptCode: TStringField;
AdoQry_MainDeptName: TStringField;
AdoQry_MainDeptREMArK: TStringField;
Label4: TLabel;
TV: TTreeView;
procedure TVClick(Sender: TObject);
procedure TVEnter(Sender: TObject);
procedure TVKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure Edt_DeptCodeChange(Sender: TObject);
procedure Act_NewExecute(Sender: TObject);
procedure Act_DeleteExecute(Sender: TObject);
procedure Edt_DeptCodeExit(Sender: TObject);
procedure btn_CancelClick(Sender: TObject);
procedure btn_okClick(Sender: TObject);
private
{ Private declarations }
treenode,node1:ttreenode;
Add:boolean;
CurrentDept:string;
isfound:boolean; //在添加Treeview的节点时,是否找到相同或大于id的节点
fReadOnly,Sysrefresh:boolean;
procedure Addnode(fidstring: string; treenode1: ttreenode);
procedure RefreshEdits;
procedure SetEdits(Enable,clear:boolean);
procedure RefreshTV;
procedure set_Treeview_after_ok; //按确定后设置Treeview
procedure set_Treeview_after_Delete; //按删除后设置Treeview
procedure findnode(node:ttreenode);//查找节点
procedure find_Addnode(node:ttreenode);//查找并添加节点
function prefixofstr(s:string;chr:chAr;len:integer):string;
procedure Changenode(node:ttreenode;Sourceid,tArgetid:string);//改变节点
public
{ Public declarations }
procedure InitForm(AdOConnection:TAdOConnection;ReadOnly:Boolean);Override;
function SetDeleteSql:String;Override;
end;
var
Frm_Bas_Dept2: TFrm_Bas_Dept2;
implementation
uses Sys_Global;
{$R *.DFM}
{ TFrm_Bas_Dept2 }
procedure TFrm_Bas_Dept2.InitForm(AdOConnection: TAdOConnection;
ReadOnly: Boolean);
var
rootnode:ttreenode;
Currentid,s:string;
oldCode:string;
i,recCount:integer;
begin
inherited;
fReadOnly:=ReadOnly;
Sysrefresh:=False;
SelectFromSQL:=
'Select DeptCode,DeptName,DeptRemArk From Dept where len(DeptCode)%2=0 Order by DeptCode';
OrderByFields:='DeptCode';
GetData;
Frm_Sys_Detail:=nil;
CurrentDept:='';
RefreshTV;
btn_ok.Enabled :=False;
btn_Cancel.enabled:=False;
if not ReadOnly then
begin
Act_Delete.Enabled :=True;
Act_New.Enabled :=True;
end
else
begin
Act_Delete.Enabled :=False;
Act_New.Enabled :=False;
edt_DeptCode.Enabled :=False;
edt_DeptName.Enabled :=False;
edt_remArk.Enabled :=False;
Act_Look.enabled:=False;
toolbutton6.visible:=False;
end;
TV.Items[0].Selected :=True;
TV.Items[0].Expand(True);
TV.setfocus;
end;
function TFrm_Bas_Dept2.SetDeleteSql: String;
begin
Result:='Delete Dept Where DeptCode='''+
AdoQry_Main.fieldbyname('DeptCode').asstring+'''';
end;
procedure TFrm_Bas_Dept2.Addnode(fidstring: string; treenode1: ttreenode);
var
i:integer;//记录数
s,tmpCode:string;
begin
with AdoQry_Main do
begin
First;
for i:=1 to recordCount do
begin
tmpCode:=fieldbyname('DeptCode').AsString;
if copy(tmpCode,0,length(tmpCode)-2)=fidstring then
begin
s:=fieldbyname('DeptCode').AsString+' '+fieldbyname('DeptName').AsString;
treenode:=TV.Items.Addchild(treenode1,s );
treenode.SelectedIndex :=1;
Addnode(fieldbyname('DeptCode').asstring,treenode );
end;
Next;
end;
locate('DeptCode',fidstring,[]);
end;
end;
procedure TFrm_Bas_Dept2.RefreshEdits;
var
s:string;
begin
with AdoQry_Main do
begin
Edt_DeptCode.text:=fieldbyname('DeptCode').AsString;
Edt_DeptName.text:=fieldbyname('DeptName').AsString;
Edt_RemArk.text:=fieldbyname('DeptRemArk').AsString;
s:=Edt_DeptCode.text;
end;
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;
Lbl_DeptName.Caption:=fieldbyname('DeptName').asstring;
end;
end;
procedure TFrm_Bas_Dept2.TVClick(Sender: TObject);
var
Currentid,s:string;//当前id
begin
if TV.selected=nil then
exit;
s:=TV.Selected.Text;
if s='Root' then
setedits(False,False)
else
begin
setedits(True,True);
Currentid:=GetCode(s);
AdoQry_Main.locate('DeptCode',Currentid,[]);
refreshedits;
btn_ok.Enabled:=False;
btn_Cancel.enabled:=False;
// tlbtn_Add.Enabled:=True;
// tlbtn_Delete.Enabled:=True;
end;
pnl_Add.visible:=False;
end;
procedure TFrm_Bas_Dept2.setedits(Enable,clear:boolean);
begin
if clear then
begin
Edt_DeptCode.Text:='';
Edt_DeptName.Text:='';
Edt_RemArk.Text:='';
Lbl_DeptName.Caption:='';
end;
if not fReadOnly then
begin
Edt_DeptName.Enabled:=Enable;
Edt_RemArk.Enabled:=Enable;
end;
end;
procedure TFrm_Bas_Dept2.TVEnter(Sender: TObject);
begin
inherited;
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;
TVclick(sender);
Add:=False;
Pnl_Add.visible:=False;
edt_DeptCode.Enabled :=False;
end;
procedure TFrm_Bas_Dept2.TVKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
inherited;
if TV.Items.Count<>0 then
begin
case key of
vk_up,vk_Down,vk_right,vk_left:
TVclick(sender);
end;
end;
end;
procedure TFrm_Bas_Dept2.Edt_DeptCodeChange(Sender: TObject);
begin
inherited;
if not (activecontrol is tTreeview) then
begin
btn_ok.Enabled :=True;
btn_Cancel.enabled:=True;
end;
if not Sysrefresh then
begin
if (not Add) and ( not Pnl_Add.visible) then
begin
Pnl_Add.Caption:='修改';
Pnl_Add.visible:=True;
end;
end;
end;
procedure TFrm_Bas_Dept2.Act_NewExecute(Sender: TObject);
begin
// inherited;
Pnl_Add.Caption:='增加';
pnl_Add.visible:=True;
Act_New.enabled:=False;
Act_Delete.enabled:=False;
setedits(True,False);
if not fReadOnly then
edt_DeptCode.Enabled :=True;
Edt_DeptCode.setfocus;
Edt_DeptCode.selectall;
Add:=True;
end;
procedure TFrm_Bas_Dept2.Act_DeleteExecute(Sender: TObject);
var
node,Parentnode:ttreenode;
s,Sourceid,tArgetid:string;
begin
s:=TV.Selected.Text;
if s='Root' then
begin
DispInfo(' 系统保留项目,不能删除! ',1);
TV.setfocus;
exit;
end;
if TV.Selected.HaSchildren then
begin
DispInfo(' 有下级部门存在,不能删除! ',1);
TV.setfocus;
exit;
end;
inherited;
set_Treeview_after_Delete;
s:=getCode(TV.selected.text);
AdoQry_Main.Locate('DeptCode',s,[]);
Sysrefresh:=True;
refreshedits;
Sysrefresh:=False;
end;
procedure TFrm_Bas_Dept2.Edt_DeptCodeExit(Sender: TObject);
var
s:string;
begin
inherited;
if (ActiveControl.Name='btn_Cancel') or (ActiveControl.Name='TV') then
exit;
if (not BlankInStrCheck(edt_DeptCode.Text,'部门代码')) or
(not BlankCheck(edt_DeptCode.text,'部门代码')) then
begin
TWinControl(Sender).SetFocus;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -