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

📄 mainf.pas

📁 极具实用价值的文件管理系统
💻 PAS
📖 第 1 页 / 共 5 页
字号:
  FreeTreeNodeObjs(trvCategory);
  FreeListItemObjs(lsvDocuments);
end;

procedure TfmMain.actAboutExecute(Sender: TObject);
begin
  fmAbout := TfmAbout.Create(Application);
  try
    fmAbout.ShowModal;
  finally
    fmAbout.Free;
  end;
end;

{-----------------------------------------------------------------------------
  Procedure: InitCategoryTree
  Purpose:   Initialize Category Tree
  Arguments: ATreeView: TTreeView;
             ParentNode: TTreeNode;
             ADataSet: TADODataSet;
             CodeFieldName: String;
             ParentCodeFieldName: String;
             ParentCodeFieldValue: String = '';
             DisplayFieldName: String = ''
  Result:    None
  Author:    Cyclone
  History:   2004-6-1 23:20:54

-----------------------------------------------------------------------------}
procedure TfmMain.InitCategoryTree(ATreeView: TTreeView; ParentNode: TTreeNode;
  ADataSet: TADODataSet; const CodeFieldName, ParentCodeFieldName: String;
  const ParentCodeFieldValue: String = ''; const DisplayFieldName: String = '');
var
  sBookmark: TBookmarkStr;
  sFilter: String;
  bFiltered: Boolean;
  CurrentNode: TTreeNode;
  CurrentNodeObj: PTreeNodeObj;
  sFieldValue,
  sDisplayFieldName: String;
begin
  if Trim(DisplayFieldName) <> '' then
    sDisplayFieldName := Trim(DisplayFieldName)
  else
    sDisplayFieldName := Trim(CodeFieldName);
  with ADataSet do
  begin
    if FindField(CodeFieldName) = nil then
    begin
      ShowError('Code field name error!');
      Exit;
    end;
    if FindField(ParentCodeFieldName) = nil then
    begin
      ShowError('Parent code field name error!');
      Exit;
    end;
    if FindField(sDisplayFieldName) = nil then
    begin
      ShowError('Display field name error!');
      Exit;
    end;

    sBookmark := Bookmark;
    sFilter := Filter;
    bFiltered := Filtered;
    DisableControls;
    try
      Filter := ParentCodeFieldName + '=' + QuotedStr(ParentCodeFieldValue);
      Filtered := True;
      First;
      while not Eof do
      begin
        sFieldValue := FieldByName(sDisplayFieldName).AsString;
        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 := ATreeView.Items.AddChildObject(ParentNode, sFieldValue, CurrentNodeObj);
        InitCategoryTree(ATreeView, CurrentNode, ADataSet, CodeFieldName, ParentCodeFieldName, FieldByName(CodeFieldName).AsString, sDisplayFieldName);
        {if CurrentNode.HasChildren then
        begin
          CurrentNode.ImageIndex := 0;
          CurrentNode.SelectedIndex := 0;
          CurrentNode.StateIndex := 0;
        end
        else
        begin
          CurrentNode.ImageIndex := 1;
          CurrentNode.SelectedIndex := 1;
          CurrentNode.StateIndex := 1;
        end;}
        Next;
      end;
    finally
      Filter := sFilter;
      Filtered := bFiltered;
      Bookmark := sBookmark;
      EnableControls;
    end;
  end;
end;

{-----------------------------------------------------------------------------
  Procedure: FillListView
  Purpose:   Fill ListView
  Arguments: AListView: TListView;
             ATreeNode: TTreeNode
  Result:    None
  Author:    Cyclone
  History:   2004-6-3 23:04:36

-----------------------------------------------------------------------------}
procedure TfmMain.FillListView(AListView: TListView; ATreeNode: TTreeNode);
var
  sBookmark: TBookmarkStr;
  sFilter: String;
  bFiltered: Boolean;
  CurrentListItem: TListItem;
  CurrentListItemObj: PListItemObj;
  OriginalCursor: TCursor;
begin
  OriginalCursor := Screen.Cursor;
  Screen.Cursor := crHourGlass;
  try
    FreeListItemObjs(AListView);
    SetColumnStatus(psCategory);

    //Add Folders
    with dmMain.dsCategoryTree do
    begin
      sBookmark := Bookmark;
      sFilter := Filter;
      bFiltered := Filtered;
      DisableControls;
      try
        Filter := 'ParentTypeCode=' + QuotedStr(PTreeNodeObj(ATreeNode.Data).CategoryCode);
        Filtered := True;
        First;
        while not Eof do
        begin
          CurrentListItem := AListView.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;
          Next;
        end;
      finally
        Filter := sFilter;
        Filtered := bFiltered;
        Bookmark := sBookmark;
        EnableControls;
      end;
    end;

    //Add Documents
    with dmMain.dsDocumentsList do
    begin
      if Active then
        Close;
      Parameters.ParamByName('DocType').Value := PTreeNodeObj(ATreeNode.Data).CategoryCode;
      Open;
      try
        while not Eof do
        begin
          CurrentListItem := AListView.Items.Add;
          CurrentListItem.Caption := FieldByName('DocName').AsString;
          CurrentListItem.SubItems.Add(FieldByName('FileName').AsString);
          CurrentListItem.SubItems.Add(FieldByName('Version').AsString);
          CurrentListItem.SubItems.Add(FieldByName('Creator').AsString);
          CurrentListItem.SubItems.Add(FieldByName('CreateDate').AsString);
          CurrentListItemObj := CreateListItemObj(itDocument, FieldByName('DocNo').AsString,
            FieldByName('DocType').AsString, FieldByName('DocName').AsString,
            FieldByName('FileName').AsString, FieldByName('OriginalExtName').AsString,
            FieldByName('Version').AsString, FieldByName('Remarks').AsString,
            FieldByName('Creator').AsString,
            FieldByName('LastModifier').AsString, FieldByName('CreateDate').AsDateTime,
            FieldByName('LastModifyDate').AsDateTime, FieldByName('ModifyTimes').AsInteger,
            FieldByName('FileSize').AsFloat);
          CurrentListItem.Data := CurrentListItemObj;
          //CurrentListItem.ImageIndex := DocumentIndex;
          CurrentListItem.ImageIndex := GetIconIndex(FieldByName('OriginalExtName').AsString);
          Next;
        end;
      finally
        Close;
      end;
    end;
  finally
    Screen.Cursor := OriginalCursor;
  end;
  //ColumnToSort := -1;
  lsvDocuments.CurrentColumn := -1;
  lsvDocuments.SortType := stASC;
end;

procedure TfmMain.trvCategoryChange(Sender: TObject; Node: TTreeNode);
begin
  pnlSearchTitle.Visible := False;
  FillListView(lsvDocuments, Node);
  AddHistoryTreeNode(Node);
  RefreshActionStatus(Node);
  RefreshSelectedItemsInfo(lsvDocuments);
  RefreshAddress(Node);
end;

{-----------------------------------------------------------------------------
  Procedure: FreeTreeNodeObjs
  Purpose:   Free TreeNode Objects
  Arguments: ATreeView: TTreeView
  Result:    None
  Author:    Cyclone
  History:   2004-6-3 23:04:54

-----------------------------------------------------------------------------}
procedure TfmMain.FreeTreeNodeObjs(ATreeView: TTreeView);
var
  i: Integer;
begin
  with ATreeView do
  begin
    for i := Items.Count - 1 downto 0 do
    begin
      if Items[i].Data <> nil then
        Dispose(Items[i].Data);
    end;
    Items.Clear;
  end;
end;

procedure TfmMain.actIconExecute(Sender: TObject);
begin
  if (not actIcon.Checked) or (lsvDocuments.ViewStyle <> vsIcon) then
  begin
    lsvDocuments.LargeImages := imgLargeDocuments;
    lsvDocuments.ViewStyle := vsIcon;
    lsvDocuments.Arrange(ComCtrls.arDefault);
    InitViewStyle;
    actIcon.Checked := True;
  end;
end;

procedure TfmMain.actSmallIconExecute(Sender: TObject);
begin
  if (not actSmallIcon.Checked) or (lsvDocuments.ViewStyle <> vsSmallIcon) then
  begin
    lsvDocuments.ViewStyle := vsSmallIcon;
    InitViewStyle;
    actSmallIcon.Checked := True;
  end;
end;

procedure TfmMain.actListExecute(Sender: TObject);
begin
  if (not actList.Checked) or (lsvDocuments.ViewStyle <> vsList) then
  begin
    lsvDocuments.ViewStyle := vsList;
    InitViewStyle;
    actList.Checked := True;
  end;
end;

procedure TfmMain.actReportExecute(Sender: TObject);
begin
  if (not actReport.Checked) or (lsvDocuments.ViewStyle <> vsReport) then
  begin
    lsvDocuments.ViewStyle := vsReport;
    InitViewStyle;
    actReport.Checked := True;
  end;
end;

procedure TfmMain.actThumbnailsExecute(Sender: TObject);
begin
  if (not actThumbnails.Checked) or (lsvDocuments.ViewStyle <> vsIcon) then
  begin
    lsvDocuments.LargeImages := imgHugeDocuments;
    lsvDocuments.ViewStyle := vsIcon;
    lsvDocuments.Arrange(ComCtrls.arDefault);
    InitViewStyle;
    actThumbnails.Checked := True;
  end;
end;

{-----------------------------------------------------------------------------
  Procedure: CreateTreeNodeObj
  Purpose:   Create TreeNode Object
  Arguments: const CategoryCode,
                   CategoryName,
                   ParentCategoryCode,
                   Remarks,
                   Creator,
                   LastModifier: String;
                   CreateDate,
                   LastModifyDate: TDateTime;
                   ModifyTimes: Integer
  Result:    PTreeNodeObj
  Author:    Cyclone
  History:   2004-6-4 0:10:01

-----------------------------------------------------------------------------}
function TfmMain.CreateTreeNodeObj(const CategoryCode, CategoryName,
  ParentCategoryCode, Remarks, Creator, LastModifier: String; CreateDate,
  LastModifyDate: TDateTime; ModifyTimes: Integer): PTreeNodeObj;
var
  ATreeNodeObj: PTreeNodeObj;
begin
  New(ATreeNodeObj);
  ATreeNodeObj^.CategoryCode := CategoryCode;
  ATreeNodeObj^.CategoryName := CategoryName;
  ATreeNodeObj^.ParentCategoryCode := ParentCategoryCode;
  ATreeNodeObj^.Remarks := Remarks;
  ATreeNodeObj^.Creator := Creator;
  ATreeNodeObj^.CreateDate := CreateDate;
  ATreeNodeObj^.LastModifier := LastModifier;
  ATreeNodeObj^.LastModifyDate := LastModifyDate;
  ATreeNodeObj^.ModifyTimes := ModifyTimes;
  Result := ATreeNodeObj;
end;

{-----------------------------------------------------------------------------
  Procedure: CreateListItemObj
  Purpose:   Create ListItem Object
  Arguments: const ItemType: Integer;
             const DocName,
                   FileName,
                   Creator: String;
                   CreateDate: TDateTime
  Result:    PListItemObj
  Author:    Cyclone
  History:   2004-6-4 0:09:24

-----------------------------------------------------------------------------}
function TfmMain.CreateListItemObj(const ItemType: TItemType; const DocNo, DocType, DocName,
  FileName, OriginalExtName, Version, Remarks, Creator, LastModifier: String; CreateDate, LastModifyDate: TDateTime;
  ModifyTimes: Integer; const FileSize: Double): PListItemObj;
var
  AListItemObj: PListItemObj;
begin
  New(AListItemObj);
  AListItemObj^.ItemType := ItemType;
  AListItemObj^.DocNo := DocNo;
  AListItemObj^.DocType := DocType;
  AListItemObj^.DocName := DocName;
  AListItemObj^.FileName := FileName;
  AListItemObj^.FileSize := FileSize;
  AListItemObj^.OriginalExtName := OriginalExtName;
  AListItemObj^.Version := Version;
  AListItemObj^.Remarks := Remarks;
  AListItemObj^.Creator := Creator;
  AListItemObj^.CreateDate := CreateDate;
  AListItemObj^.LastModifier := LastModifier;
  AListItemObj^.LastModifyDate := LastModifyDate;
  AListItemObj^.ModifyTimes := ModifyTimes;
  Result := AListItemObj;
end;

{-----------------------------------------------------------------------------
  Procedure: FreeListItemObjs
  Purpose:   Free ListItem Objects
  Arguments: AListView: TListView
  Result:    None
  Author:    Cyclone
  History:   2004-6-4 0:09:14

-----------------------------------------------------------------------------}
procedure TfmMain.FreeListItemObjs(AListView: TListView);
var
  i: Integer;
begin
  with AListView do
  begin
    for i := Items.Count - 1 downto 0 do
    begin
      if Items[i].Data <> nil then
        Dispose(Items[i].Data);
    end;
    Items.Clear;
  end;
end;

⌨️ 快捷键说明

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