Changeset 241 for PrintPreview/UPrintPreview.pas
- Timestamp:
- May 10, 2011, 6:51:04 AM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
PrintPreview/UPrintPreview.pas
r239 r241 28 28 TPrintPreview = class(TComponent) 29 29 private 30 FOnNewPage: TNotifyEvent; 30 31 FOnPrint: TNotifyEvent; 31 32 FOnPrintFooter: TNotifyEvent; … … 47 48 PageTitle: string; 48 49 Margins: TRect; 50 MarginsMM: TRect; 49 51 property XDPI: Integer read GetXDPI; 50 52 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; 52 55 procedure CreateNewPage; 53 56 constructor Create(AOwner: TComponent); override; … … 59 62 property PageNumber: Integer read GetPageNumber; 60 63 property Zoom: Double read GetZoom write SetZoom; 64 property OnNewPage: TNotifyEvent read FOnNewPage write FOnNewPage; 61 65 property OnPrint: TNotifyEvent read FOnPrint write FOnPrint; 62 66 property PageWidth: Integer read GetWidth; … … 83 87 Button3: TButton; 84 88 Button4: TButton; 85 Button5: TButton;86 89 EditPageNumber: TEdit; 87 90 Image1: TImage; … … 112 115 procedure AZoomInExecute(Sender: TObject); 113 116 procedure AZoomOutExecute(Sender: TObject); 114 procedure Button5Click(Sender: TObject);115 117 procedure EditPageNumberChange(Sender: TObject); 116 118 procedure FormCreate(Sender: TObject); … … 204 206 procedure TPrintPreview.UpdateMargins; 205 207 begin 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)); 210 end; 211 212 function TPrintPreview.MMToPixels(AValue: Double; VertRes: Boolean = True): Integer; 210 213 begin 211 214 if VertRes then … … 215 218 end; 216 219 220 function TPrintPreview.PixelsToMM(AValue: Integer; VertRes: Boolean): Double; 221 begin 222 if VertRes then 223 Result := AValue / YDPI * 25.4 224 else 225 Result := AValue / XDPI * 25.4; 226 end; 227 217 228 procedure TPrintPreview.CreateNewPage; 218 229 var … … 223 234 end else begin 224 235 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); 225 239 Pages.Add(NewPage); 226 Canvas := NewPage.Bitmap.Canvas;227 240 NewPage.Bitmap.SetSize(PageWidth, PageHeight); 228 241 with NewPage.Bitmap.Canvas do begin … … 241 254 end; 242 255 end; 256 if Assigned(FOnNewPage) then FOnNewPage(Self); 243 257 end; 244 258 … … 248 262 Zoom := 1; 249 263 Pages := TObjectList.Create; 264 MarginsMM := Rect(10, 10, 10, 10); 250 265 end; 251 266 … … 307 322 procedure TPrintPreviewForm.APrintExecute(Sender: TObject); 308 323 begin 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 309 334 PrintDialog1.MinPage := 1; 310 335 PrintDialog1.MaxPage := PrintPreview.PageCount; … … 317 342 procedure TPrintPreviewForm.AZoomInExecute(Sender: TObject); 318 343 begin 319 PrintPreview.Zoom := PrintPreview.Zoom * 2;344 PrintPreview.Zoom := PrintPreview.Zoom * 1.25; 320 345 Redraw; 321 346 end; … … 323 348 procedure TPrintPreviewForm.AZoomOutExecute(Sender: TObject); 324 349 begin 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; 335 353 end; 336 354 … … 397 415 Page.Bitmap.Canvas.Width, 398 416 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); 401 419 DestRect.Right := DestRect.Left + Round(Page.Bitmap.Canvas.Width * PrintPreview.Zoom); 402 420 DestRect.Bottom := DestRect.Top + Round(Page.Bitmap.Canvas.Height * PrintPreview.Zoom); … … 421 439 procedure TPrintPreviewForm.APageSetupExecute(Sender: TObject); 422 440 begin 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; 426 455 end; 427 456
Note:
See TracChangeset
for help on using the changeset viewer.