mirror of
http://gitlab.expertsoft.com.ua/git/expertcad
synced 2026-01-11 17:25:39 +02:00
445 lines
13 KiB
ObjectPascal
445 lines
13 KiB
ObjectPascal
unit PrvForm;
|
||
|
||
interface
|
||
|
||
uses
|
||
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
||
StdCtrls, Buttons, ExtCtrls,Printers,PCTypesUtils, siComp, siLngLnk,
|
||
Mask, RzEdit, RzSpnEdt, RzCmboBx;
|
||
|
||
type
|
||
TfrmPrv = class(TForm)
|
||
ScrollBox1: TScrollBox;
|
||
bClose: TBitBtn;
|
||
prnLabel: TLabel;
|
||
pbox: TPaintBox;
|
||
bSetting: TBitBtn;
|
||
bPrint: TBitBtn;
|
||
lng_Forms: TsiLangLinked;
|
||
pnDivOverlay: TPanel;
|
||
lbDivOverlay: TLabel;
|
||
seDivOverlay: TRzSpinEdit;
|
||
lbDivOverlayUOM: TLabel;
|
||
pnScale: TPanel;
|
||
lbScale: TLabel;
|
||
cbScale: TRzComboBox;
|
||
Label1: TLabel;
|
||
Label2: TLabel;
|
||
lbPageCount: TLabel;
|
||
Timer_Scale: TTimer;
|
||
procedure bCloseClick(Sender: TObject);
|
||
procedure pboxPaint(Sender: TObject);
|
||
procedure FormCreate(Sender: TObject);
|
||
procedure bSettingClick(Sender: TObject);
|
||
procedure bPrintClick(Sender: TObject);
|
||
procedure FormDestroy(Sender: TObject);
|
||
procedure cbScaleKeyPress(Sender: TObject; var Key: Char);
|
||
procedure Timer_ScaleTimer(Sender: TObject);
|
||
procedure cbScaleChange(Sender: TObject);
|
||
private
|
||
FScaleKoeff: Double;
|
||
FIdxScaleToPaper: Integer;
|
||
{ Private declarations }
|
||
Procedure DrawPage;
|
||
Procedure DrawMargins;
|
||
procedure AddIntItemToScales(AVal: Integer);
|
||
procedure DefineScaleKoeff;
|
||
public
|
||
{ Public declarations }
|
||
tBmp: TBitmap;
|
||
CadControl: Pointer;
|
||
FPrRect: TDoubleRect;
|
||
FIsRect: Boolean;
|
||
Procedure Init(AStartPreview: Boolean=false);
|
||
end;
|
||
|
||
var
|
||
frmPrv: TfrmPrv;
|
||
prnName: String;
|
||
resX,resY: Integer;
|
||
offX,offY: Integer;
|
||
dx,dy: Integer;
|
||
dScale: Double;
|
||
ox,oy,pw,ph:Integer;
|
||
dpm: Double;
|
||
Init_prnW: Integer;
|
||
Init_prnH: Integer;
|
||
|
||
|
||
implementation
|
||
|
||
{$R *.DFM}
|
||
uses PCDrawing, U_Constants, U_Common, U_BaseCommon;
|
||
|
||
{ TfrmPrv }
|
||
|
||
procedure TfrmPrv.Init(AStartPreview: Boolean=false);
|
||
var
|
||
Cad: TPCDrawing;
|
||
TmpInitPrnW: Integer;
|
||
TmpInitPrnH: Integer;
|
||
prnW,prnH: Double; //06.12.2011 Integer;
|
||
pw, ph: integer;
|
||
prow, pcol : integer;
|
||
OFFX, OFFY: integer;
|
||
ShowDivOverlay: Boolean;
|
||
begin
|
||
Cad := TPCDrawing(CadControl);
|
||
prnName := Printer.Printers[Printer.PrinterIndex];
|
||
prnLabel.Caption := cPrevForm_Mes1 + prnName;
|
||
|
||
CAD.DefinePrnDivIndent;
|
||
|
||
ShowDivOverlay := false;
|
||
if Not FIsRect then
|
||
FPrRect := DoubleRect(0,0,Cad.WorkWidth,Cad.WorkHeight);
|
||
|
||
if AStartPreview then
|
||
begin
|
||
cbScale.ItemIndex := cbScale.IndexOf(IntToStr(100));
|
||
FScaleKoeff := 1;
|
||
DefineScaleKoeff;
|
||
end;
|
||
|
||
if not GPreview then
|
||
begin
|
||
//02.12.2011 Init_prnW := GetDeviceCaps(printer.Handle, PHYSICALWIDTH);
|
||
//02.12.2011 Init_prnH := GetDeviceCaps(printer.Handle, PHYSICALHEIGHT);
|
||
end;
|
||
//25.11.2011 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
TmpInitPrnW := GetDeviceCaps(printer.Handle, PHYSICALWIDTH);
|
||
TmpInitPrnH := GetDeviceCaps(printer.Handle, PHYSICALHEIGHT);
|
||
prnW := GetDeviceCaps(printer.Handle, PHYSICALWIDTH);
|
||
prnH := GetDeviceCaps(printer.Handle, PHYSICALHEIGHT);
|
||
resX := GetDeviceCaps(printer.Handle, LOGPIXELSX);
|
||
resY := GetDeviceCaps(printer.Handle, LOGPIXELSY);
|
||
OFFX := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX);
|
||
OFFY := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY);
|
||
pw := round(prnW / (resX / 25.4));
|
||
ph := round(prnH / (resY / 25.4));
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||
//prnW := round(prnW * ( (Abs(FPrRect.Right - FPrRect.Left)*FScaleKoeff) / pw));
|
||
//prnH := round(prnH * ( (Abs(FPrRect.Bottom - FPrRect.Top)*FScaleKoeff) / ph));
|
||
prnW := round(prnW * ( (Abs(FPrRect.Right - FPrRect.Left)) / pw));
|
||
prnH := round(prnH * ( (Abs(FPrRect.Bottom - FPrRect.Top)) / ph));
|
||
if (prnW > TmpInitPrnW) or (prnH > TmpInitPrnH) then
|
||
begin
|
||
//ShowDivOverlay := true;
|
||
if FIsRect then
|
||
begin
|
||
TmpInitPrnW := Round(PrnW);
|
||
TmpInitPrnH := Round(PrnH);
|
||
end;
|
||
end;
|
||
if not GPreview then
|
||
begin
|
||
Init_prnW := TmpInitPrnW;
|
||
Init_prnH := TmpInitPrnH;
|
||
end;
|
||
|
||
//06.12.2011 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
prnW := GetDeviceCaps(Printer.Handle, PHYSICALWIDTH);
|
||
prnH := GetDeviceCaps(Printer.Handle, PHYSICALHEIGHT);
|
||
resX := GetDeviceCaps(printer.Handle, LOGPIXELSX);
|
||
resY := GetDeviceCaps(printer.Handle, LOGPIXELSY);
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><>
|
||
prnW := (prnW / resX) * 25.4;
|
||
prnH := (prnH / resY) * 25.4;
|
||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if ((prnW+prnReservTiling) < (Abs(FPrRect.Right - FPrRect.Left)*FScaleKoeff)) or
|
||
((prnH+prnReservTiling) < (Abs(FPrRect.Bottom - FPrRect.Top)*FScaleKoeff)) then
|
||
ShowDivOverlay := true;
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
Cad.CalcPrDims(prnW, prnH, prow, pcol, Abs(FPrRect.Right - FPrRect.Left), Abs(FPrRect.Bottom - FPrRect.Top), FScaleKoeff);
|
||
lbPageCount.Caption := IntToStr(prow * pcol);
|
||
|
||
// GPreview := False;
|
||
resX := GetDeviceCaps(printer.Handle, LOGPIXELSX);
|
||
resY := GetDeviceCaps(printer.Handle, LOGPIXELSY);
|
||
offX := GetDeviceCaps(printer.Handle, PHYSICALOFFSETX );
|
||
offY := GetDeviceCaps(printer.Handle, PHYSICALOFFSETY );
|
||
// offX := 0;
|
||
// offY := 0;
|
||
|
||
//01.12.2011
|
||
pnDivOverlay.Visible := ShowDivOverlay;
|
||
seDivOverlay.Value := 0;
|
||
lbDivOverlayUOM.Caption := GetNameUOM(ConvertUOMToMin(GCurrProjUnitOfMeasure), true);
|
||
end;
|
||
|
||
procedure TfrmPrv.bCloseClick(Sender: TObject);
|
||
begin
|
||
Close;
|
||
end;
|
||
|
||
procedure TfrmPrv.pboxPaint(Sender: TObject);
|
||
var
|
||
//clpRgn: Integer;
|
||
clpRgn: HRGN;
|
||
begin
|
||
{//24.11.2011
|
||
DrawPage;
|
||
tbmp.Canvas.Brush.Color := clWhite;
|
||
tbmp.Canvas.Brush.Style := bsSolid;
|
||
tbmp.Canvas.FillRect(Rect(0,0,tbmp.Width,tbmp.Height));
|
||
TPCDrawing(CadControl).DrawToCanvas(tbmp.canvas, dx, dy, dScale);
|
||
clpRgn := CreateRectRgn(dx + ox, dy + ox, dx + pw - ox, dy + ph - ox);
|
||
SelectClipRgn(pbox.canvas.handle,clpRgn);
|
||
Pbox.Canvas.Draw(0, 0, tbmp);
|
||
SelectClipRgn(pbox.canvas.handle, 0);
|
||
DeleteObject(ClpRgn);
|
||
DrawMargins; }
|
||
|
||
DrawPage;
|
||
tbmp.Canvas.Brush.Color := clWhite;
|
||
tbmp.Canvas.Brush.Style := bsSolid;
|
||
tbmp.Canvas.FillRect(Rect(0,0,tbmp.Width,tbmp.Height));
|
||
if Not FIsRect then
|
||
begin
|
||
TPCDrawing(CadControl).DrawToCanvas(tbmp.canvas, dx, dy, dScale);
|
||
end
|
||
else
|
||
begin
|
||
//TPCDrawing(CadControl).tileX := ;
|
||
//TPCDrawing(CadControl).tileY := y1;
|
||
TPCDrawing(CadControl).DrawRectToCanvas(FPrRect, tbmp.canvas, dx, dy, dScale);
|
||
end;
|
||
clpRgn := CreateRectRgn(dx + ox, dy + ox, dx + pw - ox, dy + ph - ox);
|
||
SelectClipRgn(pbox.canvas.handle,clpRgn);
|
||
Pbox.Canvas.Draw(0, 0, tbmp);
|
||
SelectClipRgn(pbox.canvas.handle, 0);
|
||
DeleteObject(ClpRgn);
|
||
DrawMargins;
|
||
end;
|
||
|
||
procedure TfrmPrv.DrawPage;
|
||
var
|
||
xr, yr, cr: Double;
|
||
dpmO: Double;
|
||
q: integer;
|
||
begin
|
||
// q := prnW;
|
||
// prnW := (prnH * 2);
|
||
// prnH := q;
|
||
xr := (pbox.Width - 10) / Init_prnW;
|
||
yr := (pBox.Height - 10) / Init_prnH;
|
||
if xr < yr then
|
||
cr := xr
|
||
else
|
||
cr := yr;
|
||
pw := round(Init_prnW * cr);
|
||
ph := round(Init_prnH * cr);
|
||
ox := round(offX * cr);
|
||
oy := round(offY * cr);
|
||
if ox < 3 then
|
||
ox := 3;
|
||
if oy < 3 then
|
||
oy := 3;
|
||
dx := (pbox.Width - pw) div 2;
|
||
dy := (pbox.Height - ph) div 2;
|
||
|
||
dpm := (((pw * resx) / Init_prnW) / 25.4);
|
||
dpmO := TPCDrawing(CadControl).DotsPerMilOrig;
|
||
dScale := dpm / dpmO;
|
||
|
||
pbox.Canvas.Brush.Style := bsSolid;
|
||
pbox.Canvas.Brush.Color := clGray;
|
||
pbox.Canvas.Pen.Color := clGray;
|
||
pbox.Canvas.Pen.Style := psSolid;
|
||
pbox.Canvas.Rectangle(dx + 4, dy + 4, dx + pw + 4, dy + ph + 4);
|
||
pbox.Canvas.Pen.Color := clBlack;
|
||
pbox.Canvas.Brush.Color := clWhite;
|
||
pbox.Canvas.Rectangle(dx, dy, dx + pw, dy + ph);
|
||
end;
|
||
|
||
procedure TfrmPrv.DrawMargins;
|
||
begin
|
||
pbox.Canvas.pen.Color := clRed;
|
||
pbox.Canvas.MoveTo(dx+ox,dy);
|
||
pbox.Canvas.LineTo(dx+ox,dy+ph);
|
||
pbox.Canvas.MoveTo(dx,dy+oy);
|
||
pbox.Canvas.LineTo(dx+pw,dy+oy);
|
||
pbox.Canvas.MoveTo(dx+pw-ox,dy);
|
||
pbox.Canvas.LineTo(dx+pw-ox,dy+ph);
|
||
pbox.Canvas.MoveTo(dx,dy+ph-oy);
|
||
pbox.Canvas.LineTo(dx+pw,dy+ph-oy);
|
||
end;
|
||
|
||
procedure TfrmPrv.AddIntItemToScales(AVal: Integer);
|
||
begin
|
||
cbScale.Items.AddObject(IntToStr(AVal), TObject(AVal));
|
||
end;
|
||
|
||
procedure TfrmPrv.DefineScaleKoeff;
|
||
var
|
||
Prcnt: Double;
|
||
|
||
TmpInitPrnW: Integer;
|
||
TmpInitPrnH: Integer;
|
||
prnW,prnH: Double;
|
||
pw, ph: Double;
|
||
WorkWidth, WorkHeight: Double;
|
||
OFFX, OFFY: integer;
|
||
begin
|
||
if (cbScale.ItemIndex <> -1) then
|
||
begin
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if (cbScale.ItemIndex = FIdxScaleToPaper) then
|
||
begin
|
||
{ //06.12.2011 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
//OFFX := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX);
|
||
//OFFY := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY);
|
||
TmpInitPrnW := GetDeviceCaps(printer.Handle, PHYSICALWIDTH);
|
||
TmpInitPrnH := GetDeviceCaps(printer.Handle, PHYSICALHEIGHT);
|
||
prnW := TmpInitPrnW; // - OFFX*2;
|
||
prnH := TmpInitPrnH; // - OFFY*2;
|
||
resX := GetDeviceCaps(printer.Handle, LOGPIXELSX);
|
||
resY := GetDeviceCaps(printer.Handle, LOGPIXELSY);
|
||
|
||
pw := prnW / (resX / 25.4);
|
||
ph := prnH / (resY / 25.4);
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||
prnW := round(prnW * (Abs(FPrRect.Right - FPrRect.Left) / pw));
|
||
prnH := round(prnH * (Abs(FPrRect.Bottom - FPrRect.Top) / ph));
|
||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if (prnW > TmpInitPrnW) or (prnH > TmpInitPrnH) then
|
||
begin
|
||
// <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if Abs(prnW - TmpInitPrnW) > Abs(prnH - TmpInitPrnH) then
|
||
FScaleKoeff := TmpInitPrnW / prnW
|
||
else
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
FScaleKoeff := TmpInitPrnH / prnH;
|
||
end
|
||
else
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if (TmpInitPrnW > prnW) or (TmpInitPrnH > prnH) then
|
||
begin
|
||
// <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if Abs(TmpInitPrnW - prnW) < Abs(TmpInitPrnH - prnH) then
|
||
FScaleKoeff := TmpInitPrnW / prnW
|
||
else
|
||
FScaleKoeff := TmpInitPrnH / prnH;
|
||
end;}
|
||
|
||
//------------------------------
|
||
WorkWidth := Abs(FPrRect.Right - FPrRect.Left); // - TPCDrawing(CadControl).prnDivIndentX;
|
||
WorkHeight := Abs(FPrRect.Bottom - FPrRect.Top); // - TPCDrawing(CadControl).prnDivIndentY;
|
||
prnW := GetDeviceCaps(Printer.Handle, PHYSICALWIDTH);
|
||
prnH := GetDeviceCaps(Printer.Handle, PHYSICALHEIGHT);
|
||
resX := GetDeviceCaps(printer.Handle, LOGPIXELSX);
|
||
resY := GetDeviceCaps(printer.Handle, LOGPIXELSY);
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><>
|
||
prnW := (prnW / resX) * 25.4;
|
||
prnH := (prnH / resY) * 25.4;
|
||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if (prnW < WorkWidth) or (prnH < WorkHeight) then
|
||
begin
|
||
// <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if Abs(WorkWidth - prnW) > Abs(WorkHeight - prnH) then
|
||
FScaleKoeff := (prnW-TPCDrawing(CadControl).prnDivIndentX*1.5) / WorkWidth
|
||
else
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
FScaleKoeff := (prnH-TPCDrawing(CadControl).prnDivIndentY*1.5) / WorkHeight;
|
||
end
|
||
else
|
||
if (WorkWidth < prnW) or (WorkHeight < prnH) then
|
||
begin
|
||
// <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if Abs(prnW - WorkWidth) < Abs(prnH - WorkHeight) then
|
||
FScaleKoeff := (prnW - TPCDrawing(CadControl).prnDivIndentX) / WorkWidth
|
||
else
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
FScaleKoeff := (prnH - TPCDrawing(CadControl).prnDivIndentY) / WorkHeight;
|
||
end;
|
||
end
|
||
else
|
||
begin
|
||
Prcnt := StrToFloatDef_My(cbScale.Items[cbScale.ItemIndex], 0);
|
||
if Prcnt > 0 then
|
||
FScaleKoeff := Prcnt / 100;
|
||
end;
|
||
end
|
||
else
|
||
begin
|
||
Prcnt := StrToFloatDef_My(cbScale.Text, 0);
|
||
if Prcnt > 0 then
|
||
FScaleKoeff := Prcnt / 100;
|
||
end;
|
||
end;
|
||
|
||
procedure TfrmPrv.FormCreate(Sender: TObject);
|
||
begin
|
||
tBmp := tBitmap.Create;
|
||
tbmp.Width := pbox.width;
|
||
tbmp.Height := pbox.height;
|
||
|
||
FIsRect := false;
|
||
|
||
//AddIntItemToScales(10);
|
||
AddIntItemToScales(25);
|
||
AddIntItemToScales(50);
|
||
AddIntItemToScales(75);
|
||
AddIntItemToScales(100);
|
||
AddIntItemToScales(150);
|
||
AddIntItemToScales(200);
|
||
AddIntItemToScales(400);
|
||
AddIntItemToScales(500);
|
||
FIdxScaleToPaper := cbScale.Items.Add(cPrnScaleToPaper);
|
||
FScaleKoeff := 1;
|
||
end;
|
||
|
||
procedure TfrmPrv.bSettingClick(Sender: TObject);
|
||
begin
|
||
TPCDrawing(CadControl).ExecuteTBCommand(cPrinterSetup);
|
||
Init;
|
||
PBox.Refresh;
|
||
end;
|
||
|
||
procedure TfrmPrv.bPrintClick(Sender: TObject);
|
||
var
|
||
oldScale: Double;
|
||
begin
|
||
TPCDrawing(CadControl).prnDivOverlay := FloatInUOM(seDivOverlay.Value, ConvertUOMToMin(GCurrProjUnitOfMeasure), umMM);
|
||
oldScale := TPCDrawing(CadControl).prnScale;
|
||
TPCDrawing(CadControl).prnScale := FScaleKoeff;
|
||
try
|
||
if Not FIsRect then
|
||
TPCDrawing(CadControl).ExecuteTBCommand(cPrint)
|
||
else
|
||
TPCDrawing(CadControl).PrintRect(FPrRect);
|
||
finally
|
||
TPCDrawing(CadControl).prnScale := oldScale;
|
||
end;
|
||
end;
|
||
|
||
procedure TfrmPrv.FormDestroy(Sender: TObject);
|
||
begin
|
||
//tbmp.FreeImage;
|
||
//tbmp.Free;
|
||
//tbmp.free;
|
||
end;
|
||
|
||
procedure TfrmPrv.cbScaleKeyPress(Sender: TObject; var Key: Char);
|
||
begin
|
||
Timer_Scale.Enabled := true;
|
||
end;
|
||
|
||
procedure TfrmPrv.cbScaleChange(Sender: TObject);
|
||
begin
|
||
Timer_Scale.Enabled := true;
|
||
end;
|
||
|
||
|
||
procedure TfrmPrv.Timer_ScaleTimer(Sender: TObject);
|
||
begin
|
||
TTimer(Sender).Enabled := false;
|
||
|
||
DefineScaleKoeff;
|
||
Init;
|
||
PBox.Refresh;
|
||
end;
|
||
|
||
end.
|