Entwickler-Ecke

Windows API - seitengröße für druckauftrag ändern


farbdoc - Mo 22.07.02 13:14
Titel: seitengröße für druckauftrag ändern
hi.

ich versuche die Seitengröße für einen druckauftrag zu ändern zwecks auf etiketten drucken (etikettendrucker vom typ brady BP).
ich hab auch schon einen beispielcode gefunden, aber auf den reagiert mein drucker nicht:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
var
Device : array[0..255] of char;
Driver : array[0..255] of char;
Port   : array[0..255] of char;
hDMode : THandle;
PDMode : PDEVMODE;
begin
  Printer.PrinterIndex := Printer.PrinterIndex;
  Printer.GetPrinter(Device, Driver, Port, hDMode);
  
  if hDMode <> 0 then 
  begin
    pDMode := GlobalLock(hDMode);
    if pDMode <> nil then 
    begin

     {Set to legal}
      pDMode^.dmFields := pDMode^.dmFields or dm_PaperSize;
      pDMode^.dmPaperSize := DMPAPER_LEGAL;

     {Set to custom size}
      pDMode^.dmFields := pDMode^.dmFields or 
                          DM_PAPERSIZE or
                          DM_PAPERWIDTH or
                          DM_PAPERLENGTH;
      pDMode^.dmPaperSize := DMPAPER_USER;
      pDMode^.dmPaperWidth := 100 {SomeValueInTenthsOfAMillimeter};
      pDMode^.dmPaperLength := 100 {SomeValueInTenthsOfAMillimeter};

     {Set the bin to use}
      pDMode^.dmFields := pDMode^.dmFields or DMBIN_MANUAL;
      pDMode^.dmDefaultSource := DMBIN_MANUAL;

      GlobalUnlock(hDMode);
    end;
  end;
  
  Printer.PrinterIndex := Printer.PrinterIndex;
  Printer.BeginDoc;
  Printer.Canvas.TextOut(100,100, 'Test 1');
  Printer.EndDoc;
end;



ich benutz win2000. kann mir jemand ne' hilfestelluing geben?
der drucker benutz scheinbar trotz obigem code die seitengröße, die
er standardmäßig benutzt.

schon mal danke im voraus!

der farbdoc...


L.E.A. - Mi 24.07.02 18:24

Hallo.

Ist Printer vom Typ TPrinter? Da gibt es nämlich die Properties PageHeight und PageWidth und du brauchst den ganzen Code vorm Drucken nicht.

Was soll Printer.PrinterIndex := Printer.PrinterIndex; machen?

Ciao
Dirk


farbdoc - Do 25.07.02 11:52

hi.

das mit pageHeight und pageWidth habe ich versucht, und bin daran gescheitert weil diese Properties readOnly sind.

Was das mit

Quelltext
1:
Printer.PrinterIndex := Printer.PrinterIndex;                    

soll weiß ich auch nicht. Diese Zeilen habe ich in meinem code
auch auskommentiert.

danke trotzdem...