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

📄 rmd_expfrm.pas

📁 中小企业管理系统------ ERP系统原代码
💻 PAS
📖 第 1 页 / 共 2 页
字号:

{*****************************************}
{                                         }
{   Report Machine v2.0 - Data storage    }
{          Report Explorer Form           }
{                                         }
{*****************************************}

unit RMD_ExpFrm;

interface

{$I RM.INC}

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Menus, ExtCtrls, Buttons, ComCtrls, RMD_RptExp
{$IFDEF Delphi4}, ImgList, ToolWin{$ENDIF};

type
  TRMDFormReportExplorer = class(TForm)
    sbrExplorer: TStatusBar;
    pnlFolders: TPanel;
    pnlFolderTitle: TPanel;
    trvFolders: TTreeView;
    pnlReports: TPanel;
    pnlReportTitle: TPanel;
    MainMenu: TMainMenu;
    barFile: TMenuItem;
    padFileOpen: TMenuItem;
    padFileNew: TMenuItem;
    miN1: TMenuItem;
    padFileClose: TMenuItem;
    barView: TMenuItem;
    padViewStatusBar: TMenuItem;
    N6: TMenuItem;
    padViewList: TMenuItem;
    padViewDetails: TMenuItem;
    padViewToolbar: TMenuItem;
    padFileNewFolder: TMenuItem;
    padFileNewReport: TMenuItem;
    N2: TMenuItem;
    padFileDelete: TMenuItem;
    padFileRename: TMenuItem;
    N4: TMenuItem;
    padFilePrint: TMenuItem;
    padFilePrintPreview: TMenuItem;
    ImageListToolBar: TImageList;
    ppmReports: TPopupMenu;
    ppmReportsView: TMenuItem;
    N8: TMenuItem;
    ppmReportsNewFolder: TMenuItem;
    ppmReportsNewReport: TMenuItem;
    ppmReportsViewList: TMenuItem;
    ppmReportsViewDetails: TMenuItem;
    ppmFolders: TPopupMenu;
    ppmFoldersExplore: TMenuItem;
    MenuItem4: TMenuItem;
    ppmFoldersNewFolder: TMenuItem;
    ppmFoldersNewReport: TMenuItem;
    ppmFoldersOpen: TMenuItem;
    N9: TMenuItem;
    ppmFoldersDelete: TMenuItem;
    ppmFoldersRename: TMenuItem;
    N10: TMenuItem;
    ppmReportsDelete: TMenuItem;
    ppmReportsRename: TMenuItem;
    N5: TMenuItem;
    ImageListTreeView: TImageList;
    splViews: TSplitter;
    ppmFoldersEmptyRecycleBin: TMenuItem;
    ImageListListView: TImageList;
    N1: TMenuItem;
    ppmPrint: TMenuItem;
    ppmPrintPreview: TMenuItem;
    ToolBar: TToolBar;
    btnUpOneLevel: TToolButton;
    btnOpenReport: TToolButton;
    ToolButton3: TToolButton;
    btnNewFolder: TToolButton;
    btnNewReport: TToolButton;
    ToolButton6: TToolButton;
    btnPrint: TToolButton;
    btnPrintPreview: TToolButton;
    ToolButton9: TToolButton;
    btnDelete: TToolButton;
    ToolButton11: TToolButton;
    btnViewList: TToolButton;
    btnViewDetails: TToolButton;
    ToolButton14: TToolButton;
    btnClose: TToolButton;
    procedure padFilePrintClick(Sender: TObject);
    procedure padFilePrintPreviewClick(Sender: TObject);
    procedure padFileOpenClick(Sender: TObject);
    procedure padFileNewReportClick(Sender: TObject);
    procedure padFileDeleteClick(Sender: TObject);
    procedure padViewListClick(Sender: TObject);
    procedure padViewDetailsClick(Sender: TObject);
    procedure padViewToolbarClick(Sender: TObject);
    procedure padViewStatusBarClick(Sender: TObject);
    procedure padFileCloseClick(Sender: TObject);
    procedure padFileNewFolderClick(Sender: TObject);
    procedure trvFoldersEdited(Sender: TObject; Node: TTreeNode; var S: string);
    procedure padFileRenameClick(Sender: TObject);
    procedure trvFoldersDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
    procedure trvFoldersDragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure trvFoldersEditing(Sender: TObject; Node: TTreeNode; var AllowEdit: Boolean);
    procedure ppmReportsPopup(Sender: TObject);
    procedure ppmFoldersPopup(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure ppmFoldersEmptyRecycleBinClick(Sender: TObject);
    procedure trvFoldersChange(Sender: TObject; Node: TTreeNode);
    procedure btnUpOneLevelClick(Sender: TObject);
  private
    FListView: TRMItemList;
    FReportExplorer: TRMReportExplorer;
    FAllFoldersNode: TTreeNode;
    FRecycleBinNode: TTreeNode;
    function FindDataInTreeView(aTreeView: TTreeView; aData: Integer): TTreeNode;
    function FindNearestNode(aNode: TTreeNode): TTreeNode;
    procedure ListDoubleClickEvent(Sender: TObject);
    procedure ListFolderChangeEvent(Sender: TObject);
    procedure ListRenameFolderEvent(Sender: TObject; aFolderId: Integer; const aNewName: string);
    procedure ListSelectionChangeEvent(Sender: TObject);
    procedure LoadFromIniFile;
    procedure OpenItem;
    procedure SaveToIniFile;
    procedure SelectFolder(aFolderId: Integer);
    procedure SetViewStyle(Value: Boolean);
    procedure SetViewToolbar(Value: Boolean);
    procedure SetViewStatusBar(Value: Boolean);
    procedure UpdateRecycleBin;
    procedure UpdateStatusBar;
    procedure UpdateTreeView;
    procedure Localize;
  protected
    function GetReportExplorer: TRMReportExplorer;
    procedure SetReportExplorer(Value: TRMReportExplorer);
  public
    property ReportExplorer: TRMReportExplorer read GetReportExplorer write SetReportExplorer;
    procedure Refresh;
    procedure RefreshCurrentListView;
    procedure RefreshCurrentListItem;
  end;

implementation

{$R *.DFM}

uses Registry, RM_Const, RM_Utils;

function RMGetScreenRes: TPoint;
var
  DC: HDC;
begin
  DC := GetDC(0);
  Result.X := GetDeviceCaps(DC, HORZRES);
  Result.Y := GetDeviceCaps(DC, VERTRES);
  ReleaseDC(0, DC);
end;

procedure TRMDFormReportExplorer.Localize;
begin
  Font.Name := RMLoadStr(SRMDefaultFontName);
  Font.Size := StrToInt(RMLoadStr(SRMDefaultFontSize));
  Font.Charset := StrToInt(RMLoadStr(SCharset));

  RMSetStrProp(pnlFolderTitle, 'Caption', rmRes + 3135);
  RMSetStrProp(btnUpOneLevel, 'Hint', rmRes + 3136);
  RMSetStrProp(btnOpenReport, 'Hint', rmRes + 3137);
  RMSetStrProp(btnNewFolder, 'Hint', rmRes + 3138);
  RMSetStrProp(btnNewReport, 'Hint', rmRes + 3139);
  RMSetStrProp(btnPrint, 'Hint', rmRes + 3140);
  RMSetStrProp(btnPrintPreview, 'Hint', rmRes + 3141);
  RMSetStrProp(btnDelete, 'Hint', rmRes + 3142);
  RMSetStrProp(btnViewList, 'Hint', rmRes + 3143);
  RMSetStrProp(btnViewDetails, 'Hint', rmRes + 3144);
  RMSetStrProp(btnClose, 'Hint', rmRes + 3145);
  RMSetStrProp(barFile, 'Caption', rmRes + 154);
  RMSetStrProp(padFileOpen, 'Caption', rmRes + 3137);
  RMSetStrProp(padFileNew, 'Caption', rmRes + 3146);
  RMSetStrProp(padFileNewFolder, 'Caption', rmRes + 3147);
  RMSetStrProp(padFileNewReport, 'Caption', rmRes + 3148);
  RMSetStrProp(padFilePrint, 'Caption', rmRes + 3140);
  RMSetStrProp(padFilePrintPreview, 'Caption', rmRes + 3141);
  RMSetStrProp(padFileDelete, 'Caption', rmRes + 3142);
  RMSetStrProp(padFileRename, 'Caption', rmRes + 3149);
  RMSetStrProp(padFileClose, 'Caption', rmRes + 3145);
  RMSetStrProp(barView, 'Caption', rmRes + 3150);
  RMSetStrProp(padViewToolbar, 'Caption', rmRes + 3151);
  RMSetStrProp(padViewStatusBar, 'Caption', rmRes + 3152);
  RMSetStrProp(padViewList, 'Caption', rmRes + 3153);
  RMSetStrProp(padViewDetails, 'Caption', rmRes + 3154);
  RMSetStrProp(ppmReportsNewFolder, 'Caption', rmRes + 3138);
  RMSetStrProp(ppmReportsNewReport, 'Caption', rmRes + 3139);
  RMSetStrProp(ppmReportsDelete, 'Caption', rmRes + 3142);
  RMSetStrProp(ppmReportsRename, 'Caption', rmRes + 3149);
  RMSetStrProp(ppmPrint, 'Caption', rmRes + 3140);
  RMSetStrProp(ppmPrintPreview, 'Caption', rmRes + 3141);
  RMSetStrProp(ppmReportsView, 'Caption', rmRes + 3150);
  RMSetStrProp(ppmReportsViewList, 'Caption', rmRes + 3153);
  RMSetStrProp(ppmReportsViewDetails, 'Caption', rmRes + 3154);
  RMSetStrProp(ppmFoldersExplore, 'Caption', rmRes + 3155);
  RMSetStrProp(ppmFoldersOpen, 'Caption', rmRes + 3137);
  RMSetStrProp(ppmFoldersEmptyRecycleBin, 'Caption', rmRes + 3156);
  RMSetStrProp(ppmFoldersNewFolder, 'Caption', rmRes + 3138);
  RMSetStrProp(ppmFoldersNewReport, 'Caption', rmRes + 3139);
  RMSetStrProp(ppmFoldersDelete, 'Caption', rmRes + 3142);
  RMSetStrProp(ppmFoldersRename, 'Caption', rmRes + 3149);
end;

procedure TRMDFormReportExplorer.Refresh;
begin
  UpdateTreeView;
  SelectFolder(FReportExplorer.CurrentFolderId);
  FListView.ItemName := FReportExplorer.CurrentItemName;
end;

procedure TRMDFormReportExplorer.RefreshCurrentListView;
begin
  SelectFolder(FReportExplorer.CurrentFolderId);
  FListView.ItemName := FReportExplorer.CurrentItemName;
end;

procedure TRMDFormReportExplorer.RefreshCurrentListItem;
begin
  FListView.ItemName := FReportExplorer.CurrentItemName;
end;

function TRMDFormReportExplorer.GetReportExplorer: TRMReportExplorer;
begin
  Result := FReportExplorer;
end;

procedure TRMDFormReportExplorer.SetReportExplorer(Value: TRMReportExplorer);
begin
  FReportExplorer := Value;
  FListView.ReportExplorer := Value;
end;

procedure TRMDFormReportExplorer.LoadFromIniFile; //调入配置
var
  IniFile: TRegIniFile;
  lScreenRes: TPoint;
  liLeft: Integer;
  liTop: Integer;
  liWidth: Integer;
  liHeight: Integer;
  liWindowState: Integer;
begin
  IniFile := TRegIniFile.Create(FReportExplorer.RootKey);
  try
  liLeft := IniFile.ReadInteger('Position', 'Left', -1);
  if liLeft <> -1 then
  begin
    lScreenRes := RMGetScreenRes;
    liWidth := 790;
    liHeight := 600;
    if lScreenRes.X <> 1024 then
    begin
      liWidth := (liWidth * lScreenRes.X) div 1024;
      liHeight := (Height * lScreenRes.Y) div 768;
    end;

    liLeft := (Screen.Width - liWidth) div 2;
    liTop := (Screen.Height - liHeight) div 2;
    liWindowState := IniFile.ReadInteger('Position', 'WindowState', Ord(wsNormal));
    if TWindowState(liWindowState) = wsNormal then
    begin
      liLeft := IniFile.ReadInteger('Position', 'Left', liLeft);
      liTop := IniFile.ReadInteger('Position', 'Top', liTop);
      liWidth := IniFile.ReadInteger('Position', 'Width', liWidth);
      liHeight := IniFile.ReadInteger('Position', 'Height', liHeight);
    end;

    SetBounds(liLeft, liTop, liWidth, liHeight);
    if TWindowState(liWindowState) <> wsMinimized then
      WindowState := TWindowState(liWindowState);
    SetViewStyle(IniFile.ReadBool('State', 'ViewList', True));
    SetViewToolbar(IniFile.ReadBool('State', 'ViewToolbar', True));
    SetViewStatusBar(IniFile.ReadBool('State', 'ViewStatusBar', True));

    FListView.SortMode := IniFile.ReadInteger('State', 'SortMode', 1);
    FListView.Columns[0].Width := IniFile.ReadInteger('State', 'ListViewColumn1Width', 250);
    FListView.Columns[1].Width := IniFile.ReadInteger('State', 'ListViewColumn2Width', 120);
    FListView.Columns[2].Width := IniFile.ReadInteger('State', 'ListViewColumn3Width', 100);
    FListView.Columns[3].Width := IniFile.ReadInteger('State', 'ListViewColumn4Width', 140);
    FListView.FolderId := IniFile.ReadInteger('State', 'Selected Folder', 0);
    FListView.ItemName := IniFile.ReadString('State', 'Selected Item', '');

    FReportExplorer.CurrentFolderId := FListView.FolderId;
    FReportExplorer.CurrentItemName := FListView.ItemName;
  end
  else
    WindowState := wsMaximized;
  finally
  IniFile.Free;
  end;
end;

procedure TRMDFormReportExplorer.SaveToIniFile; //保存配置
var
  IniFile: TRegIniFile;
begin
  IniFile := TRegIniFile.Create(FReportExplorer.RootKey);
  try
  with IniFile do
  begin
    WriteInteger('Position', 'WindowState', Ord(WindowState));
    WriteInteger('Position', 'Left', Left);
    WriteInteger('Position', 'Top', Top);
    WriteInteger('Position', 'Width', Width);
    WriteInteger('Position', 'Height', Height);
    WriteBool('State', 'ViewList', padViewList.Checked);
    WriteBool('State', 'ViewToolbar', padViewToolbar.Checked);
    WriteBool('State', 'ViewStatusBar', padViewStatusBar.Checked);
    WriteInteger('State', 'SortMode', FListView.SortMode);
    WriteInteger('State', 'ListViewColumn1Width', FListView.Columns[0].Width);
    WriteInteger('State', 'ListViewColumn2Width', FListView.Columns[1].Width);
    WriteInteger('State', 'ListViewColumn3Width', FListView.Columns[2].Width);
    WriteInteger('State', 'ListViewColumn4Width', FListView.Columns[3].Width);
    WriteInteger('State', 'Selected Folder', FListView.FolderId);
    WriteString('State', 'Selected Item', FListView.ItemName);
  end;
  finally
  IniFile.Free;
  end;
end;

procedure TRMDFormReportExplorer.SetViewToolbar(Value: Boolean);
begin
  padViewToolbar.Checked := Value;
  ToolBar.Visible := Value;
end;

procedure TRMDFormReportExplorer.SetViewStatusBar(Value: Boolean);
begin
  padViewStatusBar.Checked := Value;
  sbrExplorer.Visible := Value;
end;

procedure TRMDFormReportExplorer.SetViewStyle(Value: Boolean);
begin
  if Value then
  begin
    padViewList.Checked := True;
    ppmReportsViewList.Checked := True;
    btnViewDetails.Down := False;
    btnViewList.Down := True;
    FListView.ViewStyle := vsList;
  end
  else
  begin
    padViewDetails.Checked := True;
    ppmReportsViewDetails.Checked := True;
    btnViewList.Down := False;
    btnViewDetails.Down := True;
    FListView.ViewStyle := vsReport;
  end;
end;

procedure TRMDFormReportExplorer.OpenItem; //打开,修改报表
begin
  if FListView.FolderId = itRecycleBin then Exit;
  if (FListView.ItemType <> itReport) or (FListView.ItemName = '') then Exit;
  Cursor := crHourGlass;
  FListView.Cursor := crHourGlass;
  try
    FReportExplorer.Open(FListView.ItemName, FListView.FolderId);
  finally
    Cursor := crDefault;
    FListView.Cursor := crDefault;
  end;
end;

procedure TRMDFormReportExplorer.SelectFolder(aFolderId: Integer); //选择文件夹
var
  Index: integer;
  ItemFound: TTreeNode;
begin
  Index := 0; ItemFound := nil;
  while Index < trvFolders.Items.Count do
  begin
    if Integer(trvFolders.Items[Index].Data) = aFolderId then
    begin
      ItemFound := trvFolders.Items[Index];
      Break;
    end;
    Inc(Index);
  end;

  if ItemFound <> nil then
    trvFolders.Selected := ItemFound
  else
    trvFolders.Selected := trvFolders.Items[0];

  FListView.FolderId := Integer(trvFolders.Selected.Data);
  UpdateStatusBar;
end;

procedure TRMDFormReportExplorer.UpdateStatusBar;
var
  item: TTreeNode;
begin
  Item := trvFolders.Selected;
  if Item <> nil then
  begin
    if Integer(Item.Data) = itRecycleBin then
    begin
      btnUpOneLevel.Enabled := False;
      btnNewFolder.Enabled := False;
      btnNewReport.Enabled := False;
      btnOpenReport.Enabled := False;

      padFileOpen.Enabled := btnOpenReport.Enabled;
      padFileNewFolder.Enabled := False;
      padFileNewReport.Enabled := False;
      padFileRename.Enabled := False;
    end
    else
    begin
      btnUpOneLevel.Enabled := (Integer(Item.Data) <> itAllFolders);
      btnNewFolder.Enabled := True;
      btnNewReport.Enabled := True;
      btnOpenReport.Enabled := True;

      padFileOpen.Enabled := True;
      padFileNewFolder.Enabled := True;
      padFileNewReport.Enabled := True;
      padFileRename.Enabled := TRUE;
    end;
  end;

  btnPrint.Enabled := FListView.Focused and (FListView.ItemType = itReport);
  btnPrintPreview.Enabled := btnPrint.Enabled;
  ppmPrint.Enabled := btnPrint.Enabled;
  ppmPrintPreview.Enabled := btnPrint.Enabled;
  padFilePrint.Enabled := btnPrint.Enabled;
  padFilePrintPreview.Enabled := btnPrint.Enabled;

  item := trvFolders.Selected;
  btnDelete.Enabled := (FListView.Selected <> nil) or
    ((item <> nil) and (Integer(Item.Data) > itAllFolders));
end;

procedure TRMDFormReportExplorer.UpdateRecycleBin;
var
  sl: TStringList;
begin
  sl := TStringList.Create;
  try
    FReportExplorer.GetItems(itRecycleBin, itAllFolders, sl);
    if sl.Count > 0 then
    begin
      FRecycleBinNode.ImageIndex := 1;
      FRecycleBinNode.SelectedIndex := 1;
    end
    else
    begin
      FRecycleBinNode.ImageIndex := 3;

⌨️ 快捷键说明

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