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

📄 rm_pgopt.pas

📁 report machine 2.3 功能强大
💻 PAS
📖 第 1 页 / 共 2 页
字号:
    chkPrintToPrevPage.Checked := FPageSetting.PrintToPrevPage;
    chkPrintToDefault.Checked := FPageSetting.PrintToDefault;
    chkDoublePass.Checked := FPageSetting.DoublePass;
    chkUnlimitedHeight.Checked := FPageSetting.UnlimitedHeight;
    chkUseMargins.Checked := not FPageSetting.UseMargins;
    chkTaoda.Checked := FPageSetting.Taoda;

    rdbPortrait.Checked := (FPageSetting.PageOr = poPortrait);
    rdbLandscape.Checked := (FPageSetting.PageOr = poLandscape);
    imgPortrait.Visible := rdbPortrait.Checked;
    imgLandScape.Visible := not rdbPortrait.Checked;

    edtPaperWidth.Text := FloatToStrF(FPageSetting.PageWidth / 100, ffGeneral, 3, 0);
    edtPaperHeight.Text := FloatToStrF(FPageSetting.PageHeight / 100, ffGeneral, 3, 0);

    lstBinNames.ItemIndex := FPrinterInfo.GetBinIndex(FPageSetting.PageBin);
    cmbPaperNames.ItemIndex := FPrinterInfo.GetPaperSizeIndex(FPageSetting.PageSize);

    RMEnableControls([edtPaperWidth, edtPaperHeight, FSpinPaperWidth, FSpinPaperHeight],
      cmbPaperNames.ItemIndex = cmbPaperNames.Items.Count - 1);
    if edtPaperWidth.Enabled then
    begin
      edtPaperWidthExit(nil);
      edtPaperHeightExit(nil);
    end;
    FPreviewPage.DrawPage;
  finally
    FUpdating := False;
  end;
end;

procedure TRMPageSetupForm.FormCreate(Sender: TObject);
begin
  Localize;
  FPageSetting := TRMPageSetting.Create;

  FSpinPaperWidth := TRMUpDown.CreateForControl(edtPaperWidth);
  FSpinPaperWidth.OnClick := SpinPaperWidthClick;

  FSpinPaperHeight := TRMUpDown.CreateForControl(edtPaperHeight);
  FSpinPaperHeight.OnClick := SpinPaperHeightClick;

  FSpinMarginBottom := TRMUpDown.CreateForControl(edtMarginBottom);
  FSpinMarginBottom.OnClick := SpinMarginBottomClick;

  FSpinMarginTop := TRMUpDown.CreateForControl(edtMarginTop);
  FSpinMarginTop.OnClick := SpinMarginTopClick;

  FSpinMarginLeft := TRMUpDown.CreateForControl(edtMarginLeft);
  FSpinMarginLeft.OnClick := SpinMarginLeftClick;

  FSpinMarginRight := TRMUpDown.CreateForControl(edtMarginRight);
  FSpinMarginRight.OnClick := SpinMarginRightClick;

  FSpinColCount := TRMUpDown.CreateForControl(edtColumns);
  FSpinColCount.OnClick := SpinColCountClick;

  FSpinColGap := TRMUpDown.CreateForControl(edtColumnSpace);
  FSpinColGap.OnClick := SpinColGapClick;

  FForm := Self;
  FPreviewPage := TRMPageImage.Create(Self);
  grbPreview.InsertControl(FPreviewPage);
  with FPreviewPage do
  begin
    Left := 5;
    Top := 20;
    Width := grbPreview.Width - 10;
    Height := grbPreview.Height - 30;
  end;

  PageControl1.ActivePage := TabSheet1;
end;

procedure TRMPageSetupForm.FormShow(Sender: TObject);
begin
  if FPageSetting.ColCount < 1 then
    FPageSetting.ColCount := 1;
  cmbPrinterNames.Items.Assign(RMPrinters.Printers);
  cmbPrinterNames.ItemIndex := RMPrinter.PrinterIndex;
  PrinterChange;
end;

procedure TRMPageSetupForm.cmbPrinterNamesChange(Sender: TObject);
begin
  PrinterChange;
end;

procedure TRMPageSetupForm.cmbPaperNamesChange(Sender: TObject);
var
  index: Integer;
begin
  index := cmbPaperNames.ItemIndex;
  if Index < 0 then Exit;
  FPageSetting.PageSize := FPrinterInfo.PaperSizes[index];
  if Index <> cmbPaperNames.Items.Count - 1 then
  begin
    with FPrinterInfo do
    begin
      if FPageSetting.PageOr = poPortrait then
      begin
        FPageSetting.PageWidth := PaperWidths[index];
        FPageSetting.PageHeight := PaperHeights[index];
      end
      else
      begin
        FPageSetting.PageWidth := PaperHeights[index];
        FPageSetting.PageHeight := PaperWidths[index];
      end;
    end;
  end;
  PaperChange;
end;

procedure TRMPageSetupForm.rdbPortraitClick(Sender: TObject);
begin
  if rdbPortrait.Checked then
    FPageSetting.PageOr := poPortrait
  else
    FPageSetting.PageOr := poLandscape;
  PaperChange;
end;

procedure TRMPageSetupForm.edtMarginTopKeyPress(Sender: TObject;
  var Key: Char);
begin
  if Key = #13 then
    edtMarginTopExit(Self);
end;

procedure TRMPageSetupForm.edtMarginTopExit(Sender: TObject);
begin
  if ActiveControl = btnCancel then Exit;
  try
    FPageSetting.MarginLeft := StrToFloat(edtMarginLeft.Text) * 10;
    FPageSetting.MarginTop := StrToFloat(edtMarginTop.Text) * 10;
    FPageSetting.MarginRight := StrToFloat(edtMarginRight.Text) * 10;
    FPageSetting.MarginBottom := StrToFloat(edtMarginBottom.Text) * 10;
    FPageSetting.ColCount := StrToInt(edtColumns.Text);
    FPageSetting.ColGap := StrToFloat(edtColumnSpace.Text) * 10;
    PaperChange;
  except
  end;
end;

procedure TRMPageSetupForm.edtPaperWidthKeyPress(Sender: TObject;
  var Key: Char);
begin
  if Key = #13 then
    edtPaperWidthExit(Self);
end;

procedure TRMPageSetupForm.edtPaperWidthExit(Sender: TObject);
begin
  if ActiveControl = btnCancel then Exit;
  try
    FPageSetting.PageWidth := Round(StrToFloat(edtPaperWidth.Text) * 100);
  except
  end;
  PaperChange;
end;

procedure TRMPageSetupForm.edtPaperHeightExit(Sender: TObject);
begin
  if ActiveControl = btnCancel then Exit;
  try
    FPageSetting.PageHeight := Round(StrToFloat(edtPaperHeight.Text) * 100);
  except
  end;
  PaperChange;
end;

procedure TRMPageSetupForm.SpinPaperHeightClick(Sender: TObject; Button: TUDBtnType);
begin
  if (Button = btPrev) then
    edtPaperHeight.Text := FloatToStr(StrToFloat(edtPaperHeight.Text) - 1)
  else
    edtPaperHeight.Text := FloatToStr(StrToFloat(edtPaperHeight.Text) + 1);
  edtPaperHeightExit(nil);
end;

procedure TRMPageSetupForm.SpinPaperWidthClick(Sender: TObject; Button: TUDBtnType);
begin
  if (Button = btPrev) then
    edtPaperWidth.Text := FloatToStr(StrToFloat(edtPaperWidth.Text) - 1)
  else
    edtPaperWidth.Text := FloatToStr(StrToFloat(edtPaperWidth.Text) + 1);
  edtPaperWidthExit(nil);
end;

procedure TRMPageSetupForm.SpinMarginTopClick(Sender: TObject; Button: TUDBtnType);
begin
  if (Button = btPrev) then
    FPageSetting.MarginTop := FPageSetting.MarginTop - 1
  else
    FPageSetting.MarginTop := FPageSetting.MarginTop + 1;
  PaperChange;
end;

procedure TRMPageSetupForm.SpinMarginBottomClick(Sender: TObject; Button: TUDBtnType);
begin
  if (Button = btPrev) then
    FPageSetting.MarginBottom := FPageSetting.MarginBottom - 1
  else
    FPageSetting.MarginBottom := FPageSetting.MarginBottom + 1;
  PaperChange;
end;

procedure TRMPageSetupForm.SpinMarginLeftClick(Sender: TObject; Button: TUDBtnType);
begin
  if (Button = btPrev) then
    FPageSetting.MarginLeft := FPageSetting.MarginLeft - 1
  else
    FPageSetting.MarginLeft := FPageSetting.MarginLeft + 1;
  PaperChange;
end;

procedure TRMPageSetupForm.SpinMarginRightClick(Sender: TObject; Button: TUDBtnType);
begin
  if (Button = btPrev) then
    FPageSetting.MarginRight := FPageSetting.MarginRight - 1
  else
    FPageSetting.MarginRight := FPageSetting.MarginRight + 1;
  PaperChange;
end;

procedure TRMPageSetupForm.SpinColCountClick(Sender: TObject; Button: TUDBtnType);
begin
  if (Button = btPrev) then
    FPageSetting.ColCount := FPageSetting.ColCount - 1
  else
    FPageSetting.ColCount := FPageSetting.ColCount + 1;
  PaperChange;
end;

procedure TRMPageSetupForm.SpinColGapClick(Sender: TObject; Button: TUDBtnType);
begin
  if (Button = btPrev) then
    FPageSetting.ColGap := FPageSetting.ColGap - 1
  else
    FPageSetting.ColGap := FPageSetting.ColGap + 1;
  PaperChange;
end;

procedure TRMPageSetupForm.chkPrintToPrevPageClick(Sender: TObject);
begin
  FPageSetting.PrintToPrevPage := chkPrintToPrevPage.Checked;
end;

procedure TRMPageSetupForm.chkPrintToDefaultClick(Sender: TObject);
begin
  FPageSetting.PrintToDefault := chkPrintToDefault.Checked;
end;

procedure TRMPageSetupForm.chkDoublePassClick(Sender: TObject);
begin
  FPageSetting.DoublePass := chkDoublePass.Checked;
end;

procedure TRMPageSetupForm.chkUseMarginsClick(Sender: TObject);
begin
  FPageSetting.UseMargins := not chkUseMargins.Checked;
end;

procedure TRMPageSetupForm.chkUnlimitedHeightClick(Sender: TObject);
begin
  FPageSetting.UnlimitedHeight := chkUnlimitedHeight.Checked;
end;

procedure TRMPageSetupForm.lstBinNamesClick(Sender: TObject);
var
  index: Integer;
begin
  index := lstBinNames.ItemIndex;
  if Index < 0 then Exit;
  FPageSetting.PageBin := FPrinterInfo.Bins[Index];
end;

procedure TRMPageSetupForm.chkTaodaClick(Sender: TObject);
begin
  FPageSetting.Taoda := chkTaoda.Checked;
end;

procedure TRMPageSetupForm.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
var
  liLeft, liTop, liRight, liBottom: Double;
  liPrnInfo: TRMPrnInfo;

  function dm(pxls: integer; mmInInch: integer): Double;
  begin
    Result := pxls / RMInchPerMM / mmInInch + 0.1;
  end;

begin
  if ModalResult = mrOK then
  begin
    try
	    RMPrinter.PrinterIndex := cmbPrinterNames.ItemIndex;
      RMPrinter.SetPrinterInfo(FPageSetting.PageSize, FPageSetting.PageWidth, FPageSetting.PageHeight,
      	FPageSetting.PageBin, FPageSetting.PageOr, FALSE);
      RMPrinter.FillPrnInfo(liPrnInfo);

      liLeft := dm(RMPrinter.PageGutters.Left, RMPrinter.PixelsPerInch.X);
      liTop := dm(RMPrinter.PageGutters.Top, RMPrinter.PixelsPerInch.Y);
      liRight := dm(RMPrinter.PageGutters.Right, RMPrinter.PixelsPerInch.X);
      liBottom := dm(RMPrinter.PageGutters.Bottom, RMPrinter.PixelsPerInch.Y);

      if (FPageSetting.MarginLeft < liLeft) or (FPageSetting.MarginTop < liTop) or
        (FPageSetting.MarginRight < liRight) or (FPageSetting.MarginBottom < liBottom) then
      begin
        if Application.MessageBox(PChar(RMLoadStr(rmRes + 213)), PChar(RMLoadStr(SWarning)),
          MB_ICONEXCLAMATION + MB_YESNO) = IDYES then
        begin
          FPageSetting.MarginLeft := Max(FPageSetting.MarginLeft, liLeft);
          FPageSetting.MarginTop := Max(FPageSetting.MarginTop, liTop);
          FPageSetting.MarginRight := Max(FPageSetting.MarginRight, liRight);
          FPageSetting.MarginBottom := Max(FPageSetting.MarginBottom, liBottom);

//          edtMarginTop.Text := FloatToStrF(FPageSetting.MarginTop / 10, ffGeneral, 3, 0);
//          edtMarginBottom.Text := FloatToStrF(FPageSetting.MarginBottom / 10, ffGeneral, 3, 0);
//          edtMarginLeft.Text := FloatToStrF(FPageSetting.MarginLeft / 10, ffGeneral, 3, 0);
//          edtMarginRight.Text := FloatToStrF(FPageSetting.MarginRight / 10, ffGeneral, 3, 0);
//          PageControl1.ActivePage := TabSheet2;
        end;
      end;
    except
    end;
  end;
end;

end.

⌨️ 快捷键说明

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