[ Milan Milosevic @ 21.06.2013. 18:40 ] @
Pozdrav ljudi
Evo koda

var
FDevice: array [0..255] of Char;
FDriver: array [0..255] of Char;
FPort: array [0..255] of Char;
DeviceMode: THandle;
DevMode: PDeviceMode;
begin

Printer.GetPrinter(FDevice, FDriver, FPort, DeviceMode);
DevMode := GlobalLock(DeviceMode);
DevMode^.dmFields := DevMode.dmFields or DM_PAPERSIZE;
DevMode^.dmPaperSize :=DMPAPER_A4;
DevMode^.dmFormName := 'Podeseno A4';
Memo1.Lines.Add(DevMode^.dmFormName);
Printer.SetPrinter(FDevice, FDriver, FPort, DeviceMode);
GlobalUnlock(DeviceMode);
end;

Kod bi trebalo da podesava PaperSize na A4 , ovo radi ukoliko pre toga aktiviram PrinterSetupDialog, ali pre toga ne.
Sto znaci da mi neki deo fali.
Dakle, kada pozivam proceduru iznad i proverim printer.PageWidth ona se ne menja

a ukoliko preko PrinterSetupDialog podesim PaperSize na neku vrednost kod mi prebacuje na A4, po defoltu je na letter.


[ savkic @ 22.06.2013. 00:17 ] @
Pisao sam ovo za globalno podešavanje rezolucije (ceo Windows), verujem da ga možeš prilagoditi i za papir.

Code:

procedure SetGlobalPrintQuality(const APrinterIndex: Integer; const AQuality: SHORT);
var
  Device, Driver, Port: array[0..80] of Char;
  DevMode: THandle;
  hPrinter: THandle;
  pDevmode: PDeviceMode;
begin
  Printer.PrinterIndex := APrinterIndex;
  Printer.GetPrinter(Device, Driver, Port, DevMode);
  OpenPrinter(Device, hPrinter, nil);
  if (Devmode <> 0) and (hPrinter <> 0) then
  begin
    pDevMode := GlobalLock(Devmode);
    if pDevmode <> nil then
    try
      pDevMode^.dmPrintQuality := AQuality;
      pDevMode^.dmYResolution := AQuality;
      pDevMode^.dmFields := pDevMode^.dmFields or DM_PRINTQUALITY or DM_YRESOLUTION;

      DocumentProperties(0, hPrinter, Device, pDevMode^, pDevMode^, DM_IN_BUFFER or DM_UPDATE);
      WinSpool.SetPrinter(hPrinter, 9, @pDevMode, 0);
    finally
      GlobalUnlock(DevMode);
    end;

    ClosePrinter(hPrinter);
  end;
end;
[ Milan Milosevic @ 22.06.2013. 06:36 ] @
Hvala na odgovoru.

Dodavanjem linije koda

DevMode^.dmPaperSize :=DMPAPER_A4;

podesava se printer na A4 format.