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

📄 main.~pas

📁 Delphi7数据库开发教程,包含该书21套实例
💻 ~PAS
📖 第 1 页 / 共 2 页
字号:
  begin
    with DM.adoqryDirectory do
    begin
      Close;
      SQL.Clear;
      SQL.Add('DELETE FROM directory ');
      SQL.Add('WHERE ID = :DirID');
    end;
    DeleteDir(TV.Selected);
  end;
  UpdateAbsoluteIndex;
end;

//删除指定的目录和子目录
procedure TfrmMain.DeleteDir(node: TTreeNode);
begin
  if MessageBox(handle,
                '将要删除目录以及目录中包含的子目录和文件,是否继续进行?',
                '文件管理器',
                MB_YESNO + MB_ICONWARNING) = IDNO	then
     Exit;

  if node = nil then exit;
  //迭代删除子孙
  while node.Count >0 do
    DeleteDir(node.GetLastChild);

  //删除目录中的文件
  DeleteFiles(PDirItem(node.data)^.ID);
  //删除自己
  with DM.adoqryDirectory do
  begin
    Parameters.ParamByName('DirID').Value := PDirItem(node.data)^.ID;
    Prepared := True;
    ExecSQL;
  end;
  node.Delete;
end;

//当选中的节点改变时,显示当前节点中的所有文件
procedure TfrmMain.TVChange(Sender: TObject; Node: TTreeNode);
var
  pfi:PFileItem;
begin
  with DM.adoqryitems do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT * FROM items');
    SQL.Add('WHERE DirectoryID = :DirectoryID');
    SQL.Add('ORDER BY FileName');
    Parameters.ParamByName('DirectoryID').Value := PDirItem(node.data)^.ID;
    Prepared := True;
    Open;

    ClearListView;        //清除列表中的内容
    First;
    while not eof do
    begin
      New(pfi);
      pfi^.DirID := PDirItem(TV.Selected.Data);
      pfi^.ID := FieldByName('ID').AsInteger;
      pfi^.FileName := Trim(FieldByName('FileName').AsString);
      pfi^.CreateDate := FieldByName('CreateDate').AsDateTime;
      pfi^.CreateUser := Trim(FieldByName('CreateUser').AsString);
      pfi^.FileType := Trim(FieldByName('FileType').AsString);
      pfi^.FileSize := FieldByName('FileSize').AsInteger;
      pfi^.Password := Trim(FieldByName('FilePassword').AsString);
      pfi^.OriginalFolder := Trim(FieldByName('OriginalFolder').AsString);
      LoadFileItems(pfi);
      Next;
    end;
  end;
end;

//清除列表及列表中数据所占内存
procedure TfrmMain.ClearListView;
var
  i:integer;
begin
  for i := 0 to ListView.Items.Count -1 do
    if ListView.Items[i].Data <> nil then
       Dispose(ListView.Items[i].Data);
  ListView.Items.Clear;
end;

//返回到上一级目录
procedure TfrmMain.ActionUpLevelExecute(Sender: TObject);
begin
  if (TV.Selected <> nil) and (not TV.Selected.IsFirstNode) then
     TV.Select(TV.Selected.GetPrev);
end;

//单击时改变显示风格
procedure TfrmMain.ActionLargeIconExecute(Sender: TObject);
begin
  ListView.ViewStyle := TViewStyle((Sender as TComponent).Tag);
end;

procedure TfrmMain.TVKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
    VK_DELETE:
       if TV.Selected <> nil then
          DeleteDir(TV.Selected);
    VK_UP:
       ActionUpLevelExecute(Sender);
  end;
end;

//将文件导入到当前的目录中
procedure TfrmMain.ActionCheckInExecute(Sender: TObject);
var
  fn:String;
  pfi:PFileItem;
begin
  if OpenDialog1.Execute then
  begin
    fn := OpenDialog1.FileName;
    if FileExists(fn) then
    begin
      New(pfi);
      pfi^.DirID := PDirItem(TV.Selected.Data);
      pfi^.FileName := ExtractFileName(fn);
      pfi^.OriginalFolder := ExtractFilePath(fn);
      pfi^.CreateDate := Now;
      pfi^.CreateUser := FUserName;

      with DM.adotblItems do
      begin
        if not Active then
           Open;
        Append;
        FieldByName('DirectoryID').Value := PDirItem(pfi^.DirID)^.ID;
        FieldByName('FileName').Value := pfi^.FileName;
        FieldByName('OriginalFolder').Value := pfi^.OriginalFolder;
        FieldByName('CreateDate').Value := pfi^.CreateDate;
        FieldByName('CreateUser').Value := pfi^.CreateUser;
        TBlobField(FieldByName('FileItem')).LoadFromFile(fn);
        Post;
        pfi^.ID := FieldByName('ID').AsInteger;
      end;
      LoadFileItems(pfi);
    end;
  end;
end;

//在ListView中添加文件
procedure TfrmMain.LoadFileItems(pfi:PFileItem);
var
  li:TListItem;
begin
  li := ListView.Items.Add;
  li.Caption := pfi^.FileName;
  li.ImageIndex := 0;
  li.Data := pfi;
  if ListView.ViewStyle <> vsReport then exit;
  li.SubItems.Add(pfi^.OriginalFolder);
  li.SubItems.Add(DateTimeToStr(pfi^.CreateDate));
  li.SubItems.Add(pfi^.CreateUser);
  //li.SubItems.Add(IntToStr(pfi^.FileSize));
  //li.SubItems.Add(pfi^.FileType);
end;

//删除选中的文件
procedure TfrmMain.DeleteFiles(DirectoryID: Integer);
begin
  //删除跟自己相关的文件
  with DM.adoqryItems do
  begin
    Close;
    SQL.Clear;
    SQL.Add('DELETE FROM items');
    SQL.Add('WHERE DirectoryID = :DirectoryID');
    Parameters.ParamByName('DirectoryID').Value := DirectoryID;
    Prepared := True;
    ExecSQL;
  end;
end;

//删除列表视图中选中的文件
procedure TfrmMain.DeleteSelectedFiles;
begin
  with DM.adoqryItems do
  begin
    Close;
    SQL.Clear;
    SQL.Add('DELETE FROM items');
    SQL.Add('WHERE ID = :FileID');
  end;
  while ListView.SelCount > 0 do
  begin
    with DM.adoqryItems do
    begin
      Parameters.ParamByName('FileID').Value :=
              PFileItem(Listview.Selected.Data)^.ID;
      Prepared := True;
      ExecSQL;
    end;
    ListView.Items.Delete(ListView.ItemIndex);
  end;
end;

//菜单或者工具栏按钮单击时,删除选中的文件
procedure TfrmMain.ActionDeleteFilesExecute(Sender: TObject);
begin
  DeleteSelectedFiles;
end;

//将选中的文件保存到原始路径中
procedure TfrmMain.ActionSaveExecute(Sender: TObject);
var
  fn:String;
  ret,i :Integer;
begin
  if ListView.SelCount < 1 then exit; 
  with DM.adoqryItems do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT * FROM items');
    SQL.Add('WHERE ID = :FileID');
  end;
  for i := 0 to ListView.Items.Count -1 do
  begin
    //只对选中的文件进行操作
    if ListView.Items[i].Selected then
    begin
      with DM.adoqryItems do
      begin
        Parameters.ParamByName('FileID').Value :=
                PFileItem(ListView.Items[i].Data)^.ID;
        Prepared := True;
        Open;
        fn := Trim(FieldByName('OriginalFolder').AsString);
        fn := fn + Trim(FieldByName('FileName').AsString);
      end;
      if FileExists(fn) then
      begin
        ret := MessageBox(handle, '文件已经存在是否覆盖?',
                          '文件管理器',
                          MB_YESNOCANCEL + MB_ICONQUESTION );
        case ret of
          IDYES:      //覆盖文件
            TBlobField(DM.adoqryItems.FieldByName('FileItem')).SaveToFile(fn);
          IDNO:       //进行另存操作
            ActionSaveAsExecute(Sender);
          IDCANCEL:   //取消操作
            Exit;
        end;
      end; //end of   if FileExists(fn) then
    end;  //end of if ListView.Items[i].Selected then
  end; //end for
end;

//将单个文件保存到其他路进
procedure TfrmMain.ActionSaveAsExecute(Sender: TObject);
begin
  if SaveDialog1.Execute then
     with DM.adoqryItems do
     begin
       Close;
       SQL.Clear;
       SQL.Add('SELECT * FROM items');
       SQL.Add('WHERE ID = :FileID');
       Parameters.ParamByName('FileID').Value :=
              PFileItem(Listview.Selected.Data)^.ID;
       Prepared := True;
       Open;
       TBlobField(DM.adoqryItems.FieldByName('FileItem')).SaveToFile(
                                            SaveDialog1.FileName);
    end;
end;

//拖拽移动到组件上面时
procedure TfrmMain.TVDragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept := (Source is TTreeView) or (Source is TListView);
end;

//拖拽节点时,移动目录
procedure TfrmMain.TVDragDrop(Sender, Source: TObject; X, Y: Integer);
var
  tar:TTreeNode;
  i:integer;
begin
  if ((not (Sender is TTreeView)) or (not (Source is TTreeView))) and
     (not (Source is TListView)) then
     exit;

  //获得目的目录节点
  tar := TV.GetNodeAt(X, Y);
  //当拖拽的是目录时,更新目录信息  
  if Source is TTreeView then
  begin
    TV.Selected.MoveTo(tar, naAddChild);
    UpdateAbsoluteIndex;
  end;

  //当拖拽的是列表中的文件时,移动文件
  if Source is TListView then
  begin
    with DM.adoqryItems do
    begin
      CLose;
      SQL.Clear;
      SQL.Add('UPDATE items ');
      SQL.Add('SET DirectoryID = :DirID');
      SQL.Add('WHERE ID = :ID');
    end;
    for i := 0 to ListView.Items.Count -1 do
      if ListView.Items[i].Selected then
         With DM.adoqryItems do
         begin
           Parameters.ParamByName('DirID').Value := PDirItem(Tar.Data)^.ID;
           Parameters.ParamByName('ID').Value :=
                  PFileItem(ListView.Items[i].Data)^.ID;
           Prepared := True;
           ExecSQL;
         end;
  end;
  //选中拖拽的目标目录
  TV.Select(tar);
  tar.Expand(False);
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -