Announcement

Collapse
No announcement yet.

Papiergröße bei Printer lesen und setzen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Papiergröße bei Printer lesen und setzen

    Hallo,

    ich möchte die eingestellte Papiergröße eines Druckers ermitteln und setzen. Ich kann diese Werte zwar mit TPrinterSetupDialog setzen, aber ich möchte den dort eingestellten Wert danach auslesen und mir merken um ihn später gezielt vom Programm zu setzen. Die TPrinterSetupDialog-Komponente bietet aber außer dem Aufruf dieser Windows-API keinen Zugriff auf die Daten. Ich habe schon versucht mit DeviceCapabilities herum zu spielen, aber irgendwie habe ich da kein Glück gehabt. Hat jemand ein Beispiel wie ich das Problem lösen könnte ?

    Bye - Peter

  • #2
    Was ist mit Papiergröße gemeint?? Die Angabe A4 oder Pixel??

    Die Klasse TPrinter gibt in PageWidth & PageHeight die Größe in Pixel zurück. Mit Orientation die Ausrichtung. Mit Capabilities weiter Angaben wie Sortierung, Ausrichtung usw.

    Ggf. die DPI Zahl des Druckers (?) i.V.m. mit den Pixelangaben zur Umrechung nutzen
    Christian

    Comment


    • #3
      Hallo Peter,

      wahrscheinlich willst Du so Sachen wie Papierfach per Programm auslesen/einstellen, eben die Dinge, an die man so einfach nicht herankommt.

      Soweit mir bekannt ist, kommt man nicht umhin, in den Tiefen von Windows zu wühlen, um diese Aufgabe zu lösen. Ich habe einige freie Komponenten ausprobiert, die das können sollen, aber das war alles nix.
      Dann habe ich selbst was 'gestrickt', was auch ganz gut funktioniert. Die Druckereinstellungen stehen in der DEVICEMODE-Struktur (dm->dmDriverExtra) und ich schreibe das alles in eine Textdatei, um es später wieder setzen zu können. Falls Du an dem Code interessiert bist, kann ich ihn Dir gern zur Verfügung stellen, Anpassungen sind aber gewiss noch vonnöten.

      Gruß Knut

      Comment


      • #4
        Hallo Knut,

        mit Papiergröße meine ich natürlich A3, A4 usw. Ich bin auf jeden Fall an dem Beispiel interessiert. Vielleicht kann ich damit ja mein Problem lösen. Schick es doch einfach per mail an [email protected].

        Danke - Peter

        Comment


        • #5
          Hallo Peter,

          Post ist unterwegs.

          Gruß Knut

          Comment


          • #6
            Hallo,

            ich wäre auch an diesem Beispiel-Code interessiert. Könntest Du ihn mir an [email protected] schicken?

            Vielen Dank

            Birgit

            Comment


            • #7
              Hi Birgit,

              das Beispielprogramm ist unterwegs. Du kannst damit zwar alle in Windows eingestellten Werte des Druckers auslesen, doch was ich bisher nicht hinbekommen habe ist, die im PrinterSetupDialog gemachten Änderungen zu speichern, da man immer nur wieder die Standardwerte auslesen kann.

              Wenn du das hinbekommen solltest, wäre ich dankbar für eine Rückmeldung.

              Bye - Peter

              Comment


              • #8
                // Physicalische daten holen
                int offH = GetDeviceCaps( Printer()->Handle, PHYSICALOFFSETY );
                int offB = GetDeviceCaps( Printer()->Handle, PHYSICALOFFSETX );
                double scaleH = GetDeviceCaps( Printer()->Handle, LOGPIXELSY );
                double scaleB = GetDeviceCaps( Printer()->Handle, LOGPIXELSX );
                seitenB = Printer()->PageWidth;
                seitenH = Printer()->PageHeight;

                // pixel per millimeter bestimmen
                double x = scaleB/25.4;
                double y = scaleH/25.4;


                Für das setzen :
                BOOL GetPrinter(

                HANDLE hPrinter, // handle to printer of interest
                DWORD Level, // version of printer info data structure
                LPBYTE pPrinter, // pointer to array of bytes that receives printer info. structure
                DWORD cbBuf, // size, in bytes, of array of bytes
                LPDWORD pcbNeeded // pointer to variable with count of bytes retrieved (or required)
                );

                und
                DWORD SetPrinterData(

                HANDLE hPrinter, // handle of printer object
                LPTSTR pValueName, // address of data type
                DWORD Type, // flag for value type
                LPBYTE pData, // address of array that specifies printer data
                DWORD cbData // size, in bytes, of array
                );

                Beachte, du hast mehrere Strukturen die du auslesen und setzen mußt.

                mfg
                Fred

                Comment

                Working...
                X