Niewłaściwa orientacja wydruku w trybie dupleks

Odpowiedz Nowy wątek
2016-02-06 00:04

Rejestracja: 8 lat temu

Ostatnio: 8 miesięcy temu

0

Witam,
Program przetwarza ilość grafik odpowiednio do wybranego rodzaju papieru, czyli 1 grafika na A6, 2szt/A5, 4szt/A4 i 8szt/A3. Jednakże o ile nie ma problemu z A6 i A4 to na A5 (i sądzę, że na A3) druga strona wydruku jest odwrócona o 180 stopni. Rodzaj papieru wybieram w programie, aby za każdym razem nie wchodzić w ustawienia kopiarki.

Oto fragment mojego kodu:

   try
      with printer do begin
         Title:=txt;
         GetPrinter(Device, Driver, Port, DeviceMode);
         DevMode:=GlobalLock(DeviceMode);
         case rodz of
          0: begin
               DevMode^.dmOrientation:=1;
//               DevMode^.dmPaperSize:=DMPAPER_A6;
               DevMode^.dmPaperSize:=DMPAPER_USER;
               DevMode^.dmPaperLength:=1500;
               DevMode^.dmPaperWidth:=1000;
               DevMode^.dmFields:=DevMode^.dmFields or DM_PAPERSIZE or
                         DM_PAPERLENGTH or DM_PAPERWIDTH;
          end;
          1: begin
               DevMode^.dmOrientation:=2;
               DevMode^.dmPaperSize:=DMPAPER_A5;
          end;
          2: begin
               DevMode^.dmOrientation:=1;
               DevMode^.dmPaperSize:=DMPAPER_A4;
          end;
          3: begin
               DevMode^.dmOrientation:=2;
               DevMode^.dmPaperSize:=DMPAPER_A3;
          end;
         end;
         GlobalUnlock(DeviceMode);
         SetPrinter(Device, Driver, Port, DeviceMode);
         BeginDoc;
               Druk(Bmp1,rodz,x,y,wx,wy,ox,oy);
               Printer.NewPage;
               Druk(Bmp2,rodz,x,y,wx,wy,ox,oy);
         EndDoc;
      end;
   finally
   end;

W związku z tym mam kilka pytań:

  1. Dlaczego "DMPAPER_A6" jest ignorowane, gdy wybieram A6 we właściwościach drukowania to pobiera papier A6, jeśli pozostawię bez zmian, kopiarka pobiera A4. Uzyskałem właściwy rezultat ustawiając rozmiar 10x15cm.
  2. W jaki sposób uzyskać właściwy tryb drukowania drugiej strony? Obecnie, jak już pisałem, po wybraniu A5 tylna strona jest odwrócona o 180 stopni. Jest błąd w moim kodzie? Czy istnieje polecenia odwrócenia strony o 180 stopni?
    Procedura "Druk" drukuje wybrany obraz określoną ilość razy zależnie od rodz, x i y to marginesy, wx i wy wielkość obliczona do rozdzielczości drukarki, ox i oy odstępy pomiędzy kolejnymi obrazami.

Pozdrawiam.

edytowany 3x, ostatnio: Klakierus, 2016-02-06 21:47

Pozostało 580 znaków

2016-02-06 11:28

Rejestracja: 16 lat temu

Ostatnio: 10 godzin temu

0

a co robi to DevMode^.dmOrientation:=2;?

Pozostało 580 znaków

2016-02-06 11:51

Rejestracja: 8 lat temu

Ostatnio: 8 miesięcy temu

Polecenie DevMode^.dmOrientation:=2 powoduje wydruk w pozycji poziomej kartki.

Problem rozwiązany, okazał się banalnie prosty. Wcześniej nie sprawdzałem polecenia dmDuplex, gdyż błędnie założyłem że chodzi o włączenie bądź wyłączenie drukowania dwustronnego (tak jak we właściwościach drukarki). Poleceniem tym ustawiam również jak ma być odwrócona druga strona.

edytowany 4x, ostatnio: Klakierus, 2016-02-06 21:51

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0