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

📄 rmd_expfrm.pas

📁 report machine 2.3 功能强大
💻 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, TB97Tlbr, TB97Ctls, TB97{$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;
    Dock971: TDock97;
    ToolBar: TToolbar97;
    btnNewFolder: TToolbarButton97;
    btnUpOneLevel: TToolbarButton97;
    ToolbarSep971: TToolbarSep97;
    btnNewReport: TToolbarButton97;
    btnOpenReport: TToolbarButton97;
    btnPrintPreview: TToolbarButton97;
    ToolbarSep972: TToolbarSep97;
    btnPrint: TToolbarButton97;
    ToolbarSep973: TToolbarSep97;
    btnDelete: TToolbarButton97;
    ToolbarSep974: TToolbarSep97;
    btnViewDetails: TToolbarButton97;
    btnViewList: TToolbarButton97;
    ToolbarSep975: TToolbarSep97;
    btnClose: TToolbarButton97;
    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));

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

procedure TRMDFormReportExplorer.SaveToIniFile; //保存配置
var
  IniFile: TRegIniFile;
begin
  IniFile := TRegIniFile.Create(FReportExplorer.RootKey);
  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;
  IniFile.Free;
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;

⌨️ 快捷键说明

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