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

📄 frmdrawreportdesignmainunt.pas

📁 EAComps手工画报表 对写报表编辑器有一定的参考价值
💻 PAS
📖 第 1 页 / 共 3 页
字号:
  drReport.Width := 800;
  drReport.Height := 1024;
  drReport.Pages.Add('第 1 页');
  drReport.Store.StopStore := False;
  LoadReportSizeToList;
end;

procedure TfrmDrawReportDesignMain.scrollReportResize(Sender: TObject);
begin
  AdjustDrawReportPos;
end;

procedure TfrmDrawReportDesignMain.ActGrid_AddGridExecute(Sender: TObject);
var
  P: TDrawReportDesignAddGridParam;
  vTop, I, vTmp: Integer;
  vPage: TEAPage;
begin
  P.PageWidth := drReport.Width - drReport.MarginSize.LeftRight * 2;
  P.PageHeight := drReport.Height - drReport.MarginSize.TopBottom * 2;
  P.CellSpace := 5;
  if ShowDrawReportDesignAddGridDlg(P) then
  begin
    drReport.PageIndex := tabPages.TabIndex;
    vTop := drReport.MarginSize.TopBottom;
    vPage := drReport.Pages[tabPages.TabIndex];
    for I := 0 to vPage.Count - 1 do
    begin
      vTmp := vPage.Objects[I].DisplayRect.Bottom;
      if vTop < vTmp then
        vTop := vTmp + 20;
    end;

    if vTop < 38 then
      vTop := 38;
    if P.IsFixCellSize then
    begin
      TEAReportDrawGrid.CreateDrawGrid(vPage, vTop, P.Cols * P.ColWidth,
        P.Rows * P.RowHeight, P.Rows, P.Cols, TEAHorzPos(P.GridAlign));
    end
    else begin
      TEAReportDrawGrid.CreateDrawGrid(vPage, drReport.MarginSize.LeftRight, vTop,
         drReport.Width - drReport.MarginSize.LeftRight * 2,
         P.Rows * 20, P.Rows, P.Cols);
    end;
  end;
end;

procedure TfrmDrawReportDesignMain.ActTool_DrawLineExecute(
  Sender: TObject);
var
  vPage: TEAPage;
begin
  vPage := drReport.SelectedPage;
  if vPage = nil then
    Exit;
  SetupAllDrawGridTool(erdtDrawLine);
  ActTool_DrawLine.Checked := True;
  drReport.ReportPenState := erpsDrawGrid;
end;

procedure TfrmDrawReportDesignMain.ActTool_NoneExecute(Sender: TObject);
begin
  SetupAllDrawGridTool(erdtNone);
  drReport.ReportPenState := erpsNone;
  ActTool_None.Checked := True;
end;

procedure TfrmDrawReportDesignMain.ActTool_ErasureExecute(Sender: TObject);
var
  vPage: TEAPage;
begin
  vPage := drReport.SelectedPage;
  if vPage = nil then
    Exit;
  SetupAllDrawGridTool(erdtErasure);
  ActTool_Erasure.Checked := True;
  drReport.ReportPenState := erpsNone;
end;

procedure TfrmDrawReportDesignMain.ActTool_ShowLineExecute(
  Sender: TObject);
var
  vPage: TEAPage;
begin
  vPage := drReport.SelectedPage;
  if vPage = nil then
    Exit;
  SetupAllDrawGridTool(erdtShowLine);
  ActTool_ShowLine.Checked := True;
  drReport.ReportPenState := erpsNone;
end;

procedure TfrmDrawReportDesignMain.ActTool_HideLineExecute(
  Sender: TObject);
var
  vPage: TEAPage;
begin
  vPage := drReport.SelectedPage;
  if vPage = nil then
    Exit;
  SetupAllDrawGridTool(erdtHideLine);
  ActTool_HideLine.Checked := True;
  drReport.ReportPenState := erpsNone;
end;

procedure TfrmDrawReportDesignMain.ActFrame_FramePopupExecute(Sender: TObject);
begin
//
end;

procedure TfrmDrawReportDesignMain.ActEdit_FindExecute(Sender: TObject);
var
  P: TDrawReportDesignFindReplaceParam;
begin
  P.DrdFindReplace := dfrFind;
  ShowDrawReportDesignFindReplaceDlg(P);
end;

procedure TfrmDrawReportDesignMain.ActEdit_ReplaceExecute(Sender: TObject);
var
  P: TDrawReportDesignFindReplaceParam;
begin
  P.DrdFindReplace := dfrReplace;
  ShowDrawReportDesignFindReplaceDlg(P);
end;

procedure TfrmDrawReportDesignMain.ActFrame_AllFrameExecute(
  Sender: TObject);
begin
  SetupAllDrawGridFrame([egfLeft, egfTop, egfRight, egfBottom, egfHorz,
    egfVert]);
end;

procedure TfrmDrawReportDesignMain.ActFrame_AllNullExecute(
  Sender: TObject);
begin
  SetupAllDrawGridFrame([]);
end;

procedure TfrmDrawReportDesignMain.ActFrame_OuterExecute(Sender: TObject);
begin
  SetupAllDrawGridFrame([egfLeft, egfTop, egfRight, egfBottom]);
end;

procedure TfrmDrawReportDesignMain.ActFrame_CrossExecute(Sender: TObject);
begin
  SetupAllDrawGridFrame([egfHorz, egfVert]);
end;

procedure TfrmDrawReportDesignMain.ActFrame_LeftExecute(Sender: TObject);
begin
  SetupAllDrawGridFrame([egfLeft]);
end;

procedure TfrmDrawReportDesignMain.ActFrame_HorzCenterExecute(
  Sender: TObject);
begin
  SetupAllDrawGridFrame([egfVert]);
end;

procedure TfrmDrawReportDesignMain.ActFrame_RightExecute(Sender: TObject);
begin
  SetupAllDrawGridFrame([egfRight]);
end;

procedure TfrmDrawReportDesignMain.ActFrame_TopExecute(Sender: TObject);
begin
  SetupAllDrawGridFrame([egfTop]);
end;

procedure TfrmDrawReportDesignMain.ActFrame_VertCenterExecute(
  Sender: TObject);
begin
  SetupAllDrawGridFrame([egfHorz]);
end;

procedure TfrmDrawReportDesignMain.ActFrame_BottomExecute(Sender: TObject);
begin
  SetupAllDrawGridFrame([egfBottom]);
end;

procedure TfrmDrawReportDesignMain.ActFrame_ToLeftTopExecute(
  Sender: TObject);
begin
  SetupAllDrawGridFrame([egfLeftDiagonal]);
end;

procedure TfrmDrawReportDesignMain.ActFrame_ToRightTopExecute(
  Sender: TObject);
begin
  SetupAllDrawGridFrame([egfRightDiagonal]);
end;

procedure TfrmDrawReportDesignMain.AdjustDrawReportPos;
var
  vLeft: Integer;
begin
  scrollReport.VertScrollBar.Range := drReport.Height + 40;
  scrollReport.HorzScrollBar.Range := drReport.Width + 40;
  vLeft := Trunc((scrollReport.ClientWidth - drReport.Width) / 2);
  if vLeft < 20 then
    vLeft := 20;
  drReport.Left := vLeft;
  pnlShadow.SetBounds(vLeft + 2, drReport.Top + 2, drReport.Width,
    drReport.Height);
end;

procedure TfrmDrawReportDesignMain.SetupAllDrawGridTool(
  ADrawGridTool: TEAReportDrawGridTool);
var
  I: Integer;
  vPage: TEAPage;
begin
  vPage := drReport.SelectedPage;
  if vPage = nil then
    Exit;
  for I := 0 to vPage.Count - 1 do
    if vPage.Objects[I] is TEAReportDrawGrid then
      TEAReportDrawGrid(vPage.Objects[I]).DrawGridTool := ADrawGridTool;
end;

procedure TfrmDrawReportDesignMain.SetupAllDrawGridFrame(
  AGridFrames: TEAGridFrames);
var
  I: Integer;
  vPage: TEAPage;
begin
  vPage := drReport.SelectedPage;
  if vPage = nil then
    Exit;
  for I := 0 to vPage.SelectedCount - 1 do
    if vPage.Objects[I] is TEAReportDrawGrid then
      TEAReportDrawGrid(vPage.Objects[I]).SetSelectedCellFrames(AGridFrames);
end;

procedure TfrmDrawReportDesignMain.ActInsert_LabelExecute(Sender: TObject);
var
  vPage: TEAPage;
begin
  vPage := drReport.SelectedPage;
  if vPage = nil then
    Exit;
  ActInsert_Label.Checked := True;
  drReport.ReportPenState := erpsLabel;
end;

procedure TfrmDrawReportDesignMain.ActFile_ExitExecute(Sender: TObject);
begin
  Close;
end;

procedure TfrmDrawReportDesignMain.ActView_GridLineExecute(
  Sender: TObject);
begin
  ActView_GridLine.Checked := not ActView_GridLine.Checked;
  drReport.Gridding.Visible := ActView_GridLine.Checked;
end;

procedure TfrmDrawReportDesignMain.ActGrid_CellPropertyExecute(
  Sender: TObject);
var
  vPage: TEAPage;
  vGrid: TEAReportDrawGrid;
  I: Integer;
  P: TDrawGridCellSetupParam;
begin
  vPage := drReport.SelectedPage;
  if vPage = nil then
    Exit;
  vGrid := nil;
  for I := 0 to vPage.SelectedCount - 1 do
    if vPage.SelectedObjects[I] is TEAReportDrawGrid then
    begin
      vGrid := TEAReportDrawGrid(vPage.SelectedObjects[I]);
      Break;
    end;
  if vGrid = nil then
    Exit;

  P.Cells := vGrid.SelectedCells;
  P.Grid := vGrid;
  if ShowDrawGridCellSetupDlg(P) then
    vGrid.Invalidate;
end;

procedure TfrmDrawReportDesignMain.cboReportSizeChange(Sender: TObject);
label
  gotoLabel;
var
  vViewScale, vIndex: Integer;
  P: TEAPubInputParam;
begin
  vIndex := cboReportSize.ItemIndex;
  if vIndex > -1 then
    vViewScale := Integer(cboReportSize.Items.Objects[vIndex])
  else
    vViewScale  := 100;

  if vIndex = 7 then
  begin
    P.Caption := '设置';
    P.Title := '显示比例(%)';
    P.EditValue := IntToStr(vViewScale);
    P.EditType := epitNumber;
    P.AllowNull := False;
    P.MaxLength := 0;
    gotoLabel:
    if ShowEAPubInputDlg(P) then
    begin
      vViewScale := StrToInt(P.EditValue);
      if (vViewScale < 25) or (vViewScale > 500) then
      begin
        ea.Dlg.MsgInfo('显示比例只能是大于等于25且小于等于500的数字。');
        goto gotoLabel;
      end;
      cboReportSize.Items.Objects[vIndex] := TObject(vViewScale);
    end;
  end;

  if drReport.ViewScale <> vViewScale then
  begin
    drReport.ViewScale := vViewScale;
    drReport.SetBounds(drReport.Left, drReport.Top,
      800 * vViewScale div 100,
      1024 * vViewScale div 100);
    AdjustDrawReportPos;
  end;
end;

procedure TfrmDrawReportDesignMain.FormShow(Sender: TObject);
begin
  drReport.SetFocus;
end;

procedure TfrmDrawReportDesignMain.LoadReportSizeToList;
begin
  cboReportSize.Items.AddObject('500 %', TObject(500));
  cboReportSize.Items.AddObject('400 %', TObject(400));
  cboReportSize.Items.AddObject('200 %', TObject(200));
  cboReportSize.Items.AddObject('100 %', TObject(100));
  cboReportSize.Items.AddObject('75 %', TObject(75));
  cboReportSize.Items.AddObject('50 %', TObject(50));
  cboReportSize.Items.AddObject('25 %', TObject(25));
  cboReportSize.Items.AddObject('自定义大小...', TObject(100));
  cboReportSize.ItemIndex := 3;
end;

procedure TfrmDrawReportDesignMain.ActFile_PrintSetupExecute(
  Sender: TObject);
begin
  drReport.PrintSetup;
end;

procedure TfrmDrawReportDesignMain.ActFile_PrintExecute(Sender: TObject);
begin
  if drReport.PrintSetup then
    drReport.Print;
end;

procedure TfrmDrawReportDesignMain.ActFile_PreviewExecute(Sender: TObject);
begin
  drReport.Preview;
end;

procedure TfrmDrawReportDesignMain.ActPage_AddExecute(Sender: TObject);
label
  gotoLabel;
var
  vStr: string;
begin
  vStr := GetNewPageName;

  gotoLabel:
  if ShowEAPubInputDlg(vStr) then
  begin
    vStr := Trim(vStr);
    if not IsNotRepeatPageName(vStr, -1) then
      goto gotoLabel;
  end
  else
    Exit;

  drReport.Pages.Add(vStr);
  tabPages.Tabs.Add(vStr);
  tabPages.TabIndex := tabPages.Tabs.Count - 1;
  drReport.PageIndex := tabPages.Tabs.Count - 1;
end;

procedure TfrmDrawReportDesignMain.tabPagesChange(Sender: TObject;
  NewTab: Integer; var AllowChange: Boolean);
begin
  drReport.HideEditor;
  drReport.PageIndex := NewTab;
end;

procedure TfrmDrawReportDesignMain.ActPage_InsertExecute(Sender: TObject);
label
  gotoLabel;
var
  vIndex: Integer;
  vStr: string;
begin
  vIndex := tabPages.TabIndex;
  if vIndex < 0 then
    ActPage_Add.Execute
  else begin
    vStr := GetNewPageName;

    gotoLabel:
    if ShowEAPubInputDlg(vStr) then
    begin
      vStr := Trim(vStr);
      if not IsNotRepeatPageName(vStr, -1) then
        goto gotoLabel;
    end
    else
      Exit;

    drReport.Pages.Insert(vIndex).Name := vStr;
    tabPages.Tabs.Insert(vIndex, vStr);
    tabPages.TabIndex := vIndex;
    drReport.PageIndex := vIndex;
  end;
end;

procedure TfrmDrawReportDesignMain.ActPage_DeleteExecute(Sender: TObject);
var
  vIndex: Integer;
begin
  vIndex := tabPages.TabIndex;
  if vIndex = -1 then
    Exit;
  if ea.Dlg.MsgYesNo('确实要删除页[' + tabPages.Tabs[vIndex] + ']吗?') =ID_YES then
  begin
    drReport.Pages.Delete(vIndex);
    tabPages.Tabs.Delete(vIndex);
    if drReport.Pages.Count = 0 then
    begin
      drReport.Pages.Add('第 1 页');
      tabPages.Tabs.Add('第 1 页');
      drReport.PageIndex := 0;
    end;
  end;
end;

procedure TfrmDrawReportDesignMain.ActPage_RenameExecute(Sender: TObject);
label
  gotoLabel;
var
  vIndex: Integer;
  vStr: string;
begin
  vIndex := tabPages.TabIndex;
  if vIndex = -1 then
    Exit;
  vStr := tabPages.Tabs[vIndex];
  gotoLabel:
  if ShowEAPubInputDlg(vStr) then
  begin
    vStr := Trim(vStr);
    if IsNotRepeatPageName(vStr, vIndex) then
    begin
      tabPages.Tabs[vIndex] := vStr;
      drReport.Pages[vIndex].Name := vStr;
    end
    else
      goto gotoLabel;
  end;
end;

procedure TfrmDrawReportDesignMain.ActEdit_SendToBackExecute(
  Sender: TObject);
var
  vPage: TEAPage;
begin
  vPage := drReport.SelectedPage;
  if (vPage = nil) or (vPage.SelectedCount = 0) then
    Exit;
  vPage.SendToBack(vPage.SelectedObjects[0]);
end;

procedure TfrmDrawReportDesignMain.ActPage_BackColorExecute(
  Sender: TObject);
begin
  dlgColor.Color := drReport.PageInfo.Color;
  if dlgColor.Execute then
    drReport.PageInfo.Color := dlgColor.Color;
end;

procedure TfrmDrawReportDesignMain.ActPage_PagePropertyExecute(
  Sender: TObject);
begin
//
ShowMessage('页属性');
end;

procedure TfrmDrawReportDesignMain.ActHelp_AboutExecute(Sender: TObject);
var
  vStr: string;
begin
  vStr := 'SharpExpress <EMail:SharpExpress@tom.com QQ:17805552>' + #13
    + 'ReportPmm(v1.0) Design Demo';
  ShowMessage(vStr);

⌨️ 快捷键说明

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