📄 ufolderproperty.pas
字号:
end;
finally
FQuery.Free;
end;
end
else
result:=false;
finally
freeandnil(FPassWordfrm);
end;
end;
procedure TFolderProperty.UnLockedFolder;
begin
if ShowUPWSfrm then
begin
SetAllSubNode(FNode,FIsReadOnly,False,True);
FIsLocked:=false;
end;
end;
function TFolderProperty.EnterFolder: Boolean;
begin
result:=ShowUPWSfrm;
end;
function TFolderProperty.DelFolder(ANode:TTreeNode):Boolean;
var
pos:integer;
SubIDs:array of integer;
Del1,Del2:Boolean;
s:string;
qryTmp:TABSQuery;
procedure DelChildren(DelNode:TTreeNode);
var
i:integer;
FQuery:TABSQuery;
begin
if DelNode=nil then
exit;
if DelNode.HasChildren then
begin
FQuery:=TABSQuery.Create(nil);
try
FQuery.DatabaseName:=SecData.ABSDatabase1.DatabaseName;
for i:=0 to DelNode.Count-1 do
begin
if i=0 then
begin
FQuery.SQL.Text:='delete from Folders where UpID=:UpID';
FQuery.Params[0].AsInteger:=DelNode.StateIndex;
FQUery.ExecSQL;
end;
DelChildren(DelNode.Item[i]);
end;
finally
FQuery.Free;
end;
end;
end;
procedure GetSubIDs(RootNode:TTreeNode;var APos:integer);
var
k:integer;
begin
if RootNode<>nil then
begin
inc(APos);
setlength(SubIDs,Apos);
SubIDs[APos-1]:=RootNode.StateIndex;
if RootNode.HasChildren then
begin
for k:=0 to RootNode.Count-1 do
GetSubIDs(RootNode.Item[k],pos);
end;
end;
end;
procedure NodeCanDelete(CheckNode:TTreeNode;var CanDelete:Boolean);
var
j:integer;
begin
if CanDelete then
begin
Node:=CheckNode;
s:=Path+CheckNode.Text;
if not IsLocked then
begin
for j:=0 to CheckNode.Count-1 do
begin
NodeCanDelete(CheckNode.Item[j],CanDelete);
end;
end
else
begin
CanDelete:=false;
exit;
end;
end;
end;
procedure FileInUse(CheckNode:TTreeNode;var CanDelete:Boolean);
var
i,j:integer;
frm:TDllfrm;
begin
Node:=CheckNode;
s:=Path+CheckNode.Text;
for i:=0 to Screen.FormCount-1 do
begin
try
frm:=TDllfrm(Screen.Forms[i]);
if frm.ID=CheckNode.StateIndex then
begin
CanDelete:=false;
exit;
end
else
begin
for j:=0 to CheckNode.Count-1 do
begin
FileInUse(CheckNode.Item[j],CanDelete);
end;
end;
except
continue;
end;
end;
for i:=0 to mainfrm.MDIChildCount-1 do
begin
try
frm:=TDllFrm(mainfrm.MDIChildren[i]);
if frm.ID=CheckNode.StateIndex then
begin
CanDelete:=false;
exit;
end
else
begin
for j:=0 to CheckNode.Count-1 do
begin
FileInUse(CheckNode.Item[j],CanDelete);
end;
end;
except
continue;
end;
end;
end;
begin
result:=false;
Del1:=true;
NodeCanDelete(ANode,Del1);
if not Del1 then
begin
MessageBox(0,pchar('“'+s+'”已加密,请先解密。'), '提示', MB_ICONASTERISK or MB_OK);
result:=false;
//exit;
end;
Del2:=true;
FileInUse(ANode,Del2);
if not Del2 then
begin
MessageBox(0,pchar('“'+s+'”正在使用,无法删除。'), '提示', MB_ICONASTERISK or MB_OK);
result:=false;
//exit;
end;
if Del1 and Del2 then
begin
Screen.Cursor:=crHourGlass;
try
SECData.ABSDatabase1.StartTransaction;
try
pos:=0;
GetSubIDs(ANode,pos);
qryTmp:=TABSQuery.Create(nil);
try
qryTmp.DatabaseName:=SecData.ABSDatabase1.DatabaseName;
qryTmp.SQL.Text:='delete from Folders where ID=:ID';
qryTmp.Params[0].AsInteger:=ANode.StateIndex;
qryTmp.ExecSQL;
finally
qryTmp.Free;
end;
DelChildren(ANode);
SECData.ABSDatabase1.Commit;
ANode.DeleteChildren;
ANode.Delete;
mainfrm.Closefrm(SubIDs);
result:=true;
except
SECData.ABSDatabase1.Rollback;
result:=false;
end;
finally
Screen.Cursor:=crDefault;
end;
end;
end;
procedure TFolderProperty.SetFolderTree(const Value: TTreeView);
begin
FFolderTree := Value;
end;
procedure TFolderProperty.FindNodeByID(ID: integer);
var
i:integer;
begin
for i:=0 to FFolderTree.Items.Count-1 do
begin
if FFolderTree.Items[i].StateIndex=ID then
begin
Node:=FFolderTree.Items[i];
break;
end;
end;
end;
function TFolderProperty.SetFolderName(ANode:TTreeNode;IsFile: byte): string;
var
i,j,NodeCount,iPos,Num:integer;
s,s1:string;
equal:boolean;
FNode:TTreeNode;
begin
j:=1;
Num:=-1;
if (ANode=nil) then
begin
FNode:=nil;
NodeCount:=FolderTree.Items.Count-1;
end
else
begin
FNode:=ANode;
NodeCount:=ANode.Count-1;
end;
while true do
begin
equal:=false;
for i:=0 to NodeCount do
begin
if FNode<>nil then
begin
s1:=FNode.Item[i].Text;
if IsFile=0 then
iPos:=pos('文件夹',s1)
else
begin
ipos:=pos('文件夹',s1);
if ipos<>0 then
continue;
ipos:=pos('文件',s1);
end;
try
if iPos<>0 then
Num:=strtoint(Copy(s1,Pos('(',s1)+1,length(s1)-Pos('(',s1)-1));
except
Num:=-1;
end;
if (iPos<>0) and (j=Num) then
equal:=true;
end
else
begin
if FolderTree.Items.Item[i].Level=0 then
begin
s1:=FolderTree.Items.Item[i].Text;
iPos:=pos('文件',s1);
try
if iPos<>0 then
Num:=strtoint(Copy(s1,Pos('(',s1)+1,length(s1)-Pos('(',s1)-1));
except
Num:=-1;
end;
if (iPos<>0) and (j=Num) then
equal:=true;
end;
end;
end;
if equal=false then
break;
inc(j);
end;
case IsFile of
0:s:='文件夹';
1:s:='文件';
end;
result:=s+'('+inttostr(j)+')';
end;
function TFolderProperty.GetIsFile: byte;
begin
result:=NodeIsFile(Node.StateIndex);
end;
function TFolderProperty.NodeIsFile(ID: integer): byte;
var
qryTmp:TABSQuery;
begin
qryTmp:=TABSQuery.Create(nil);
try
qryTmp.DatabaseName:=SECData.ABSDatabase1.DatabaseName;
qryTmp.SQL.Text:='select IsFile from Folders where ID=:ID';
qryTmp.Params[0].AsInteger:=ID;
qryTmp.Open;
result:=byte(qryTmp.Fields[0].AsInteger);
qryTmp.Close;
finally
qryTmp.Free;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -