📄 rm_pgopt.pas
字号:
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 + -