⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ufolderproperty.pas

📁 一个基于不需引擎的文件管理系统,使用了许多界面比较好的控件
💻 PAS
📖 第 1 页 / 共 2 页
字号:
        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 + -