printer_index の挙動がおかしいので SetPrinter をやめる。[ap-dev:2219]
added Printer#paper_size. [ap-dev:2219]
@@ -22,6 +22,7 @@ | ||
22 | 22 | interface |
23 | 23 | |
24 | 24 | uses |
25 | + Windows, | |
25 | 26 | {$IFDEF VCL} |
26 | 27 | Printers, |
27 | 28 | {$ELSE} |
@@ -52,15 +53,6 @@ | ||
52 | 53 | end; |
53 | 54 | |
54 | 55 | {$IFDEF VCL} |
55 | -procedure SetPrinter; | |
56 | -var | |
57 | - Device, Driver, Port: array[0..512] of Char; | |
58 | - hDev: THandle; | |
59 | -begin | |
60 | - Printer.GetPrinter(Device, Driver, Port, hDev); | |
61 | - Printer.SetPrinter(Device, Driver, Port, 0); | |
62 | -end; | |
63 | - | |
64 | 56 | function Printer_get_printer_index(This: Tvalue): Tvalue; cdecl; |
65 | 57 | var |
66 | 58 | real: TPrinter; |
@@ -67,7 +59,6 @@ | ||
67 | 59 | begin |
68 | 60 | real := ap_data_get_struct(This); |
69 | 61 | result := ap_Fixnum(real.PrinterIndex); |
70 | - SetPrinter; | |
71 | 62 | end; |
72 | 63 | |
73 | 64 | function Printer_set_printer_index(This, v: Tvalue): Tvalue; cdecl; |
@@ -166,6 +157,38 @@ | ||
166 | 157 | TPrinter(ap_data_get_struct(This)).Orientation := TPrinterOrientation(dl_Integer(v)); |
167 | 158 | end; |
168 | 159 | |
160 | +function Printer_set_paper_size(This,v: Tvalue): Tvalue; cdecl; | |
161 | +var | |
162 | + DrvName, PrtName, PortName : array[0..127] of Char; | |
163 | + DeviceMode : THandle; | |
164 | + PDevMode : ^TDevMode; | |
165 | +begin | |
166 | + result := v; | |
167 | + with Printer do begin | |
168 | + GetPrinter(DrvName, PrtName, PortName, DeviceMode); | |
169 | + PDevMode := GlobalLock(DeviceMode); | |
170 | + PDevMode^.dmFields := PDevMode^.dmFields or dm_PaperSize; | |
171 | + PDevMode^.dmPaperSize := dl_Integer(v); // DMPAPER_B4; | |
172 | + GlobalUnlock(DeviceMode); | |
173 | + SetPrinter(DrvName, PrtName, PortName, DeviceMode); | |
174 | + end; | |
175 | +end; | |
176 | + | |
177 | +function Printer_get_paper_size(This: Tvalue): Tvalue; cdecl; | |
178 | +var | |
179 | + DrvName, PrtName, PortName : array[0..127] of Char; | |
180 | + DeviceMode : THandle; | |
181 | + PDevMode : ^TDevMode; | |
182 | +begin | |
183 | + with Printer do begin | |
184 | + GetPrinter(DrvName, PrtName, PortName, DeviceMode); | |
185 | + PDevMode := GlobalLock(DeviceMode); | |
186 | + result := ap_Integer(PDevMode^.dmPaperSize); | |
187 | + GlobalUnlock(DeviceMode); | |
188 | + SetPrinter(DrvName, PrtName, PortName, DeviceMode); | |
189 | + end; | |
190 | +end; | |
191 | + | |
169 | 192 | function Printer_instance(This: Tvalue): Tvalue; cdecl; |
170 | 193 | begin |
171 | 194 | result := vPrinter; |
@@ -234,6 +257,9 @@ | ||
234 | 257 | DefineAttrSet(cPrinter, 'copies', Printer_set_copies); |
235 | 258 | DefineAttrSet(cPrinter, 'orientation', Printer_set_orientation); |
236 | 259 | |
260 | + DefineAttrSet(cPrinter, 'paper_size', Printer_set_paper_size); | |
261 | + DefineAttrGet(cPrinter, 'paper_size', Printer_get_paper_size); | |
262 | + | |
237 | 263 | OutputConstSetType(mPhi, TypeInfo(TPrinterCapability)); |
238 | 264 | OutputConstSetType(mPhi, TypeInfo(TPrinterOrientation)); |
239 | 265 |