Ignore:
Timestamp:
May 10, 2011, 6:51:04 AM (13 years ago)
Author:
george
Message:
  • Modified: Page count estimation.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • PrintPreview/UPrintPreview.pas

    r239 r241  
    2828  TPrintPreview = class(TComponent)
    2929  private
     30    FOnNewPage: TNotifyEvent;
    3031    FOnPrint: TNotifyEvent;
    3132    FOnPrintFooter: TNotifyEvent;
     
    4748    PageTitle: string;
    4849    Margins: TRect;
     50    MarginsMM: TRect;
    4951    property XDPI: Integer read GetXDPI;
    5052    property YDPI: Integer read GetYDPI;
    51     function MM(AValue: Double; VertRes: Boolean=True): Integer;
     53    function MMToPixels(AValue: Double; VertRes: Boolean = True): Integer;
     54    function PixelsToMM(AValue: Integer; VertRes: Boolean = True): Double;
    5255    procedure CreateNewPage;
    5356    constructor Create(AOwner: TComponent); override;
     
    5962    property PageNumber: Integer read GetPageNumber;
    6063    property Zoom: Double read GetZoom write SetZoom;
     64    property OnNewPage: TNotifyEvent read FOnNewPage write FOnNewPage;
    6165    property OnPrint: TNotifyEvent read FOnPrint write FOnPrint;
    6266    property PageWidth: Integer read GetWidth;
     
    8387    Button3: TButton;
    8488    Button4: TButton;
    85     Button5: TButton;
    8689    EditPageNumber: TEdit;
    8790    Image1: TImage;
     
    112115    procedure AZoomInExecute(Sender: TObject);
    113116    procedure AZoomOutExecute(Sender: TObject);
    114     procedure Button5Click(Sender: TObject);
    115117    procedure EditPageNumberChange(Sender: TObject);
    116118    procedure FormCreate(Sender: TObject);
     
    204206procedure TPrintPreview.UpdateMargins;
    205207begin
    206   Margins := Rect(MM(10), MM(10), MM(10), MM(10));
    207 end;
    208 
    209 function TPrintPreview.MM(AValue: Double; VertRes: Boolean = True): Integer;
     208  Margins := Rect(MMToPixels(MarginsMM.Left), MMToPixels(MarginsMM.Top),
     209    MMToPixels(MarginsMM.Right), MMToPixels(MarginsMM.Bottom));
     210end;
     211
     212function TPrintPreview.MMToPixels(AValue: Double; VertRes: Boolean = True): Integer;
    210213begin
    211214  if VertRes then
     
    215218end;
    216219
     220function TPrintPreview.PixelsToMM(AValue: Integer; VertRes: Boolean): Double;
     221begin
     222  if VertRes then
     223    Result := AValue / YDPI * 25.4
     224  else
     225    Result := AValue / XDPI * 25.4;
     226end;
     227
    217228procedure TPrintPreview.CreateNewPage;
    218229var
     
    223234  end else begin
    224235      NewPage := TPrintPage.Create;
     236      Canvas := NewPage.Bitmap.Canvas;
     237      if Pages.Count > 0 then
     238        NewPage.Bitmap.Canvas.Font.Assign(TPrintPage(Pages.Last).Bitmap.Canvas.Font);
    225239      Pages.Add(NewPage);
    226       Canvas := NewPage.Bitmap.Canvas;
    227240      NewPage.Bitmap.SetSize(PageWidth, PageHeight);
    228241      with NewPage.Bitmap.Canvas do begin
     
    241254      end;
    242255    end;
     256  if Assigned(FOnNewPage) then FOnNewPage(Self);
    243257end;
    244258
     
    248262  Zoom := 1;
    249263  Pages := TObjectList.Create;
     264  MarginsMM := Rect(10, 10, 10, 10);
    250265end;
    251266
     
    307322procedure TPrintPreviewForm.APrintExecute(Sender: TObject);
    308323begin
     324(*  with Printer.Canvas.Font do begin
     325    Size := 10;
     326    ShowMessage(IntToStr(Height) + ' ' +
     327      IntToStr(PixelsPerInch));
     328  end;
     329  with TPrintPage(PrintPreview.Pages.Last).Bitmap.Canvas.Font do begin
     330    Size := 10;
     331    ShowMessage(IntToStr(Height) + ' ' + IntToStr(PixelsPerInch));
     332  end; *)
     333
    309334  PrintDialog1.MinPage := 1;
    310335  PrintDialog1.MaxPage := PrintPreview.PageCount;
     
    317342procedure TPrintPreviewForm.AZoomInExecute(Sender: TObject);
    318343begin
    319   PrintPreview.Zoom := PrintPreview.Zoom * 2;
     344  PrintPreview.Zoom := PrintPreview.Zoom * 1.25;
    320345  Redraw;
    321346end;
     
    323348procedure TPrintPreviewForm.AZoomOutExecute(Sender: TObject);
    324349begin
    325   PrintPreview.Zoom := PrintPreview.Zoom / 2;
    326   Redraw;
    327 end;
    328 
    329 procedure TPrintPreviewForm.Button5Click(Sender: TObject);
    330 begin
    331   ShowMessage('Printer page size: ' + IntToStr(Printer.PageWidth) + ', ' + IntToStr(Printer.PageHeight) +
    332     ' DPI: ' + IntToStr(Printer.XDPI) + ', ' + IntToStr(Printer.YDPI) +
    333   ' Page size: ' + IntToStr(TPrintPage(PrintPreview.Pages.Last).Bitmap.Width) +
    334     ', ' + IntToStr(TPrintPage(PrintPreview.Pages.Last).Bitmap.Height) + ' ');
     350  PrintPreview.Zoom := PrintPreview.Zoom / 1.25;
     351  EditPageNumberChange(Self);
     352  Redraw;
    335353end;
    336354
     
    397415    Page.Bitmap.Canvas.Width,
    398416    Page.Bitmap.Canvas.Height);
    399   DestRect.Left := -Round(ScrollBarHoriz.Position / ScrollBarHoriz.Max * Width);
    400   DestRect.Top := -Round(ScrollBarVert.Position / ScrollBarVert.Max * Height);
     417  DestRect.Left := -Round(ScrollBarHoriz.Position / ScrollBarHoriz.Max * Width * PrintPreview.Zoom);
     418  DestRect.Top := -Round(ScrollBarVert.Position / ScrollBarVert.Max * Height * PrintPreview.Zoom);
    401419  DestRect.Right := DestRect.Left + Round(Page.Bitmap.Canvas.Width * PrintPreview.Zoom);
    402420  DestRect.Bottom := DestRect.Top + Round(Page.Bitmap.Canvas.Height * PrintPreview.Zoom);
     
    421439procedure TPrintPreviewForm.APageSetupExecute(Sender: TObject);
    422440begin
    423   PageSetupDialog1.Margins := PrintPreview.Margins;
    424   PageSetupDialog1.Execute;
    425   PrintPreview.Margins := PageSetupDialog1.Margins;
     441  with PrintPreview do begin
     442    PageSetupDialog1.Margins := Rect(MarginsMM.Left * 100,
     443      MarginsMM.Top * 100,
     444      MarginsMM.Right * 100,
     445      MarginsMM.Bottom * 100);
     446    if PageSetupDialog1.Execute then begin
     447      MarginsMM := Rect(Round(PageSetupDialog1.Margins.Left / 100),
     448        Round(PageSetupDialog1.Margins.Top / 100),
     449        Round(PageSetupDialog1.Margins.Right / 100),
     450        Round(PageSetupDialog1.Margins.Bottom / 100));
     451      UpdateMargins;
     452      Redraw;
     453    end;
     454  end;
    426455end;
    427456
Note: See TracChangeset for help on using the changeset viewer.