| Code: |
| procedure TMainForm.FormCreate(Sender: TObject);
begin PrintPreview.AddNewForm('My Custom Form', 10000 {x 0.01 mm}, 10000 {x 0.01 mm}); PrintPreview.FormName := 'My Custom Form'; end; procedure TMainForm.FormDestroy(Sender: TObject); begin PrintPreview.RemoveForm('My Custom Form'); end; |
| Quote: |
| Retrieve the printer's DEVMODE structure, set the dmFormName member, and use the ResetDC function to set this form as the current form for the Device Context (DC) of the printer. When this form is selected for the DC, it is only selected for the calling process and does not change the driver's default setting. This does not require any special permissions. This method is preferred for applications that change a printer's settings. |
| Code: |
| procedure TPrintPreview.SetPrinterOptions;
var DeviceMode: THandle; DevMode: PDeviceMode; Device, Driver, Port: array[0..MAX_PATH] of Char; PaperSize: TPoint; DriverInfo2: PDriverInfo2; DriverInfo2Size: DWORD; hPrinter: THandle; TheFormName: String; begin if PrinterInstalled then begin TheFormName := FormName; Printer.GetPrinter(Device, Driver, Port, DeviceMode); OpenPrinter(Device, hPrinter, nil); try DevMode := PDevMode(GlobalLock(DeviceMode)); try with DevMode^ do begin dmFields := dmFields or DM_PAPERSIZE; if IsCustomPaper then begin PaperSize := ConvertXY(FPageExt.X, FPageExt.Y, FUnits, mmLoMetric); if FOrientation = poLandscape then SwapValues(PaperSize.X, PaperSize.Y); dmPaperSize := DMPAPER_USER; dmFields := dmFields or DM_PAPERWIDTH; dmPaperWidth := PaperSize.X; dmFields := dmFields or DM_PAPERLENGTH; dmPaperLength := PaperSize.Y; end else begin dmPaperSize := PaperSizes[FPaperType].ID; dmFields := dmFields and not (DM_PAPERWIDTH or DM_PAPERLENGTH); end; dmFields := dmFields or DM_ORIENTATION; case FOrientation of poPortrait: dmOrientation := DMORIENT_PORTRAIT; poLandscape: dmOrientation := DMORIENT_LANDSCAPE; end; if TheFormName <> '' then begin dmFields := dmFields or DM_FORMNAME; StrPLCopy(dmFormName, TheFormName, CCHFORMNAME); end; ResetDC(Printer.Handle, DevMode^); end; finally GlobalUnlock(DeviceMode); end; GetPrinterDriver(hPrinter, nil, 2, nil, 0, DriverInfo2Size); GetMem(DriverInfo2, DriverInfo2Size); try GetPrinterDriver(hPrinter, nil, 2, DriverInfo2, DriverInfo2Size, DriverInfo2Size); StrPCopy(Driver, ExtractFileName(StrPas(DriverInfo2^.PDriverPath))); finally FreeMem(DriverInfo2, DriverInfo2Size); end; finally ClosePrinter(hPrinter); end; Printer.SetPrinter(Device, Driver, Port, DeviceMode); end; end; |
output generated using printer-friendly topic mod. All times are GMT