Papiergröße vom Standarddrucker auf A5 ändern



  • Hallo, habe folgenden Delphi Quellcode zum ändern der Papiergröße gefunden.

    Procedure SetPrinterSettings;
    Var
       Device, Driver, Port: Array [0..255] Of Char;
       hDevMode:             THandle;
       pDevMode:             PDeviceMode;
    Begin
         Printer.GetPrinter(Device, Driver, Port, hDevmode);
         Printer.SetPrinter(Device, Driver, Port, 0);
         Printer.GetPrinter(Device, Driver, Port, hDevmode);
         If hDevmode <> 0 Then Begin
            pDevmode := GlobalLock(hDevmode);
            If pDevmode <> NIL Then
               Try
                  // Ändern der Auflösung (hier 300 dpi):
                  pDevMode^.dmPrintQuality := LoWord(300);
                  pDevmode^.dmYResolution  := HiWord(300);
                  pDevmode^.dmFields       := pDevmode^.dmFields Or
                                              DM_PRINTQUALITY Or
                                              DM_YRESOLUTION;
                  // Ändern der Papiergröße (hier A5):
                  pDevMode^.dmPaperSize    := DMPAPER_A5;
                  pDevmode^.dmFields       := pDevmode^.dmFields Or
                                              DM_PAPERSIZE;
               Finally
                  GlobalUnlock(hDevmode);
               End;
         End;
    End;
    

    Habe das soweit umgesetzt.

    TPrinter *printer = new TPrinter();
    Char Device[255], Driver[255], Port[255];
    THandle hDevMode;
    PDeviceMode pDevMode;
    printer->GetPrinter(Device, Driver, Port, hDevMode);
    printer->SetPrinter(Device, Driver, Port, 0);
    printer->GetPrinter(Device, Driver, Port, hDevMode);
    if (hDevMode != NULL)
    {
       pDevMode = GlobalLock(hDevMode);
       ...
    }
    delete printer;
    

    Da bekomme ich folgendes:

    [BCC32 Fehler] Unit1.cpp(58): E2034 Konvertierung von 'unsigned int' nach 'void *' nicht möglich
    [BCC32 Fehler] Unit1.cpp(58): E2342 Keine Übereinstimmung des Typs beim Parameter 'hMem' ('void *' erwartet, 'unsigned int' erhalten)

    Kann mir jemand erklären wodran das liegt ?
    Danke.



  • Hallo

    auf dem BCB2009 müsste Zeile 10 im unteren Listing heissen:

    pDevMode = (DEVMODEW*)GlobalLock((HGLOBAL)hDevMode);
    

    mfg
    kpeter


Anmelden zum Antworten