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

📄 mainf.pas

📁 极具实用价值的文件管理系统
💻 PAS
📖 第 1 页 / 共 5 页
字号:

procedure TfmMain.actAddCategoryExecute(Sender: TObject);
var
  CurrentNodeObj: PTreeNodeObj;
  CurrentNode: TTreeNode;
  CurrentListItemObj: PListItemObj;
  CurrentListItem: TListItem;
begin
  OpenCategory('');
  fmDocumentsType := TfmDocumentsType.Create(Application);
  fmDocumentsType.OperType := otInsert;
  fmDocumentsType.ParentCategoryCode := PTreeNodeObj(trvCategory.Selected.Data)^.CategoryCode;
  try
    if fmDocumentsType.ShowModal = mrOK then
    begin
      dmMain.dsCategoryTree.Close;
      dmMain.dsCategoryTree.Open;
      with dmMain.dsCategory do
      begin
        //Add Tree Node
        CurrentNodeObj := CreateTreeNodeObj(FieldByName('TypeCode').AsString, FieldByName('TypeName').AsString,
          FieldByName('ParentTypeCode').AsString, FieldByName('Remarks').AsString, FieldByName('Creator').AsString,
          FieldByName('LastModifier').AsString, FieldByName('CreateDate').AsDateTime,
          FieldByName('LastModifyDate').AsDateTime, FieldByName('ModifyTimes').AsInteger);
        CurrentNode := trvCategory.Items.AddChildObject(trvCategory.Selected, FieldByName('TypeName').AsString, CurrentNodeObj);
        CurrentNode.ImageIndex := 1;
        CurrentNode.SelectedIndex := 1;
        CurrentNode.StateIndex := 1;

        //Add List Item
        CurrentListItem := lsvDocuments.Items.Add;
        CurrentListItem.Caption := FieldByName('TypeName').AsString;
        CurrentListItem.SubItems.Add('');
        CurrentListItem.SubItems.Add('');
        CurrentListItem.SubItems.Add(FieldByName('Creator').AsString);
        CurrentListItem.SubItems.Add(FieldByName('CreateDate').AsString);
        CurrentListItemObj := CreateListItemObj(itCategory, FieldByName('TypeCode').AsString,
          '', FieldByName('TypeName').AsString, '', '', '', '', FieldByName('Creator').AsString,
          FieldByName('LastModifier').AsString, FieldByName('CreateDate').AsDateTime,
          FieldByName('LastModifyDate').AsDateTime, FieldByName('ModifyTimes').AsInteger, 0.0);
        CurrentListItem.Data := CurrentListItemObj;
        CurrentListItem.ImageIndex := FolderIndex;

        //Refresh Image Of Current Node
        CurrentNode := trvCategory.Selected;
        CurrentNode.ImageIndex := 0;
        CurrentNode.SelectedIndex := 0;
        CurrentNode.StateIndex := 0;
      end;
    end;
  finally
    fmDocumentsType.Free;
  end;
end;

procedure TfmMain.actEditCategoryExecute(Sender: TObject);
begin
  OpenCategory(PTreeNodeObj(trvCategory.Selected.Data)^.CategoryCode);
  fmDocumentsType := TfmDocumentsType.Create(Application);
  fmDocumentsType.OperType := otEdit;
  try
    if fmDocumentsType.ShowModal = mrOk then
    begin
      dmMain.dsCategoryTree.Close;
      dmMain.dsCategoryTree.Open;
      with dmMain.dsCategory, PTreeNodeObj(trvCategory.Selected.Data)^ do
      begin
        CategoryCode := FieldByName('TypeCode').AsString;
        CategoryName := FieldByName('TypeName').AsString;
        ParentCategoryCode := FieldByName('ParentTypeCode').AsString;
        Remarks := FieldByName('Remarks').AsString;
        Creator := FieldByName('Creator').AsString;
        CreateDate := FieldByName('CreateDate').AsDateTime;
        LastModifier := FieldByName('LastModifier').AsString;
        LastModifyDate := FieldByName('LastModifyDate').AsDateTime;
        ModifyTimes := FieldByName('ModifyTimes').AsInteger;

        trvCategory.Selected.Text := CategoryName;
      end;
      RefreshAddress(trvCategory.Selected);
    end;
  finally
    fmDocumentsType.Free;
  end;
end;

procedure TfmMain.actDeleteCategoryExecute(Sender: TObject);
begin
  if ShowYesNo('Are you sure to delete this category?') then
  begin
    dmMain.adcSystem.BeginTrans;
    if DeleteCategory(trvCategory.Selected) then
    begin
      lsvDocuments.Items.Clear;
      dmMain.adcSystem.CommitTrans;
      dmMain.dsCategoryTree.Close;
      dmMain.dsCategoryTree.Open;
      trvCategory.OnChange(trvCategory, trvCategory.Selected);
    end
    else
    begin
      dmMain.adcSystem.RollbackTrans;
      InitTreeView;
    end;
  end;
end;

{-----------------------------------------------------------------------------
  Procedure: DeleteCategory
  Purpose:   Delete Documents Type
  Arguments: ATreeNode: TTreeNode
  Result:    Boolean
  Author:    Cyclone
  History:   2004-6-11 0:00:25

-----------------------------------------------------------------------------}
function TfmMain.DeleteCategory(ATreeNode: TTreeNode): Boolean;
var
  ChildNode: TTreeNode;
  OriginalCursor: TCursor;
begin
  Result := True;
  OriginalCursor := Screen.Cursor;
  Screen.Cursor := crHourGlass;
  try
    try
      //Delete Children Type
      if ATreeNode.HasChildren then
      begin
        ChildNode := ATreeNode.getFirstChild;
        while ChildNode <> nil do
        begin
          DeleteCategory(ChildNode);
          ChildNode := ATreeNode.getFirstChild;
        end;
      end;

      //Delete Documents
//      with lsvDocuments.Items do
//      begin
//        for i := Count - 1 downto 0 do
//        begin
//          Application.ProcessMessages;
//          if Item[i].Data <> nil then
//          begin
//            dmMain.DeleteCYCFile(PListItemObj(Item[i].Data)^.FileName, PListItemObj(Item[i].Data)^.DocType, PListItemObj(Item[i].Data)^.DocNo);
//            Dispose(Item[i].Data);
//            Item[i].Delete;
//          end;
//        end;
//      end;
      with dmMain.dsDocumentsList do
      begin
        if Active then
          Close;
        Parameters.ParamByName('DocType').Value := PTreeNodeObj(ATreeNode.Data)^.CategoryCode;
        Open;
        try
          while not Eof do
          begin
            Application.ProcessMessages;
            dmMain.DeleteCYCFile(FieldByName('FileName').AsString, FieldByName('DocType').AsString, FieldByName('DocNo').AsString);
            Next;
          end;
        finally
          Close;
        end;
      end;

      //Delete Current category
      if ATreeNode.Data <> nil then
      begin
        ExecuteSQL('DELETE FROM Documents WHERE DocType=' + QuotedStr(PTreeNodeObj(ATreeNode.Data)^.CategoryCode));
        ExecuteSQL('DELETE FROM DocumentsType WHERE TypeCode=' + QuotedStr(PTreeNodeObj(ATreeNode.Data)^.CategoryCode));
        Dispose(ATreeNode.Data);
      end;
      ATreeNode.Delete;
    except
      Result := False;
    end;
  finally
    Screen.Cursor := OriginalCursor;
  end;
end;

{-----------------------------------------------------------------------------
  Procedure: InitTreeView
  Purpose:   Initialize TreeView
  Arguments: None
  Result:    None
  Author:    Cyclone
  History:   2004-6-11 0:00:16

-----------------------------------------------------------------------------}
procedure TfmMain.InitTreeView;
var
  CurrentNodeObj: PTreeNodeObj;
begin
  trvCategory.Items.Clear;
  CurrentNodeObj := CreateTreeNodeObj('', pSystemName, '', '', '', '', Date, Date, 0);
  trvCategory.Items.AddChildObject(nil, pSystemName, CurrentNodeObj);
  dmMain.dsCategoryTree.Close;
  dmMain.dsCategoryTree.Open;
  InitCategoryTree(trvCategory, trvCategory.TopItem, dmMain.dsCategoryTree, 'TypeCode', 'ParentTypeCode', '', 'TypeName');
  trvCategory.TopItem.Expand(False);
  trvCategory.TopItem.Selected := True;
end;

{-----------------------------------------------------------------------------
  Procedure: OpenCategory
  Purpose:   Open Documents Type
  Arguments: const CategoryCode: String
  Result:    None
  Author:    Cyclone
  History:   2004-6-11 0:00:04

-----------------------------------------------------------------------------}
procedure TfmMain.OpenCategory(const CategoryCode: String);
begin
  with dmMain.dsCategory do
  begin
    if Active then
      Close;
    Parameters.ParamByName('TypeCode').Value := CategoryCode;
    Open;
  end;
end;

{-----------------------------------------------------------------------------
  Procedure: OpenDocuments
  Purpose:   Open Documents
  Arguments: const DocNo: String
  Result:    None
  Author:    Cyclone
  History:   2004-6-17 23:12:23

-----------------------------------------------------------------------------}
procedure TfmMain.OpenDocuments(const DocNo: String);
begin
  with dmMain.dsDocuments do
  begin
    if Active then
      Close;
    Parameters.ParamByName('DocNo').Value := DocNo;
    Open;
  end;
end;

procedure TfmMain.lsvDocumentsDblClick(Sender: TObject);
var
  SelTreeNode: TTreeNode;
  NewItemIndex: Integer;
begin
  if lsvDocuments.SelCount = 1 then
  begin
    //Category
    if PListItemObj(lsvDocuments.Selected.Data)^.ItemType = itCategory then
    begin
      SelTreeNode := FindTreeNodeByCategoryCode(PListItemObj(lsvDocuments.Selected.Data)^.DocNo);
      if SelTreeNode <> nil then
      begin
        SelTreeNode.Expand(False);
        SelTreeNode.Selected := True;
        //trvCategory.SetFocus;
      end;
    end
    else
    //Documents
    begin
      if not FileExists(pRootPath + PListItemObj(lsvDocuments.Selected.Data)^.FileName) then
      begin
        ShowError('Cannot find file: ' + pRootPath + PListItemObj(lsvDocuments.Selected.Data)^.FileName);
        Exit;
      end;
      if IsImage(lsvDocuments.Selected) then
      begin
        Hide;
        fmImageViewer := TfmImageViewer.Create(Application);
        try
          //fmImageViewer.MainFormHandle := Self.Handle;
          fmImageViewer.ImageList := lsvDocuments;
          fmImageViewer.CurrentAbsoluteIndex := lsvDocuments.ItemIndex;
          fmImageViewer.ShowModal;
        finally
          NewItemIndex := fmImageViewer.CurrentAbsoluteIndex;
          FreeAndNil(fmImageViewer);
          Show;
          if lsvDocuments.ItemIndex <> NewItemIndex then
          begin
            lsvDocuments.Selected.Selected := False;
            lsvDocuments.Items[NewItemIndex].Selected := True;
            lsvDocuments.Items[NewItemIndex].Focused := True;
          end;
          lsvDocuments.SetFocus;
        end;
      end
      else
      begin
        ShellOpenFile(lsvDocuments.Selected);
      end;
    end;
  end;
end;

{-----------------------------------------------------------------------------
  Procedure: FindTreeNodeByCategoryCode
  Purpose:   Find TreeNode By Category Code
  Arguments: const CategoryCode: String
  Result:    TTreeNode
  Author:    Cyclone
  History:   2004-6-11 0:22:19

-----------------------------------------------------------------------------}
function TfmMain.FindTreeNodeByCategoryCode(const CategoryCode: String): TTreeNode;
var
  i: Integer;
begin
  Result := nil;
  with trvCategory.Items do
  begin
    for i := 0 to Count - 1 do
    begin
      if PTreeNodeObj(Item[i].Data)^.CategoryCode = CategoryCode then
      begin
        Result := Item[i];
        Break;
      end;
    end;
  end;
end;

procedure TfmMain.actAddDocumentExecute(Sender: TObject);
begin
  AddADocument;
end;

procedure TfmMain.actEditDocumentExecute(Sender: TObject);
begin
  OpenDocuments(PListItemObj(lsvDocuments.Selected.Data)^.DocNo);
  fmDocuments := TfmDocuments.Create(Application);
  fmDocuments.OperType := otEdit;
  fmDocuments.CategoryCode := PListItemObj(lsvDocuments.Selected.Data)^.DocType;
  fmDocuments.CategoryName := dmMain.GetCategoryName(fmDocuments.CategoryCode);
  try
    if fmDocuments.ShowModal = mrOK then
    begin
      with dmMain.dsDocuments, PListItemObj(lsvDocuments.Selected.Data)^  do
      begin
        DocNo := FieldByName('DocNo').AsString;
        DocType := FieldByName('DocType').AsString;
        DocName := FieldByName('DocName').AsString;
        FileName := FieldByName('FileName').AsString;
        FileSize := FieldByName('FileSize').AsFloat;
        OriginalExtName := FieldByName('OriginalExtName').AsString;
        Version := FieldByName('Version').AsString;
        Creator := FieldByName('Creator').AsString;
        LastModifier := FieldByName('LastModifier').AsString;
        CreateDate := FieldByName('CreateDate').AsDateTime;
        LastModifyDate := FieldByName('LastModifyDate').AsDateTime;
        ModifyTimes := FieldByName('ModifyTimes').AsInteger;

        lsvDocuments.Selected.SubItems.Clear;
        lsvDocuments.Selected.Caption := FieldByName('DocName').AsString;
        lsvDocuments.Selected.SubItems.Add(FieldByName('FileName').AsString);
        lsvDocuments.Selected.SubItems.Add(FieldByName('Version').AsString);
        lsvDocuments.Selected.SubItems.Add(FieldByName('Creator').AsString);
        lsvDocuments.Selected.SubItems.Add(FieldByName('CreateDate').AsString);
      end;
    end;
  finally
    fmDocuments.Free;
  end;
end;

procedure TfmMain.actDeleteDocumentExecute(Sender: TObject);
begin
  if ShowYesNo('Are you sure to delete these Documents?') then
  begin
    dmMain.adcSystem.BeginTrans;
    try
      if DeleteDocuments then
      begin
        dmMain.adcSystem.CommitTrans;
      end
      else
      begin
        dmMain.adcSystem.RollbackTrans;
      end;

⌨️ 快捷键说明

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