Author: Remmelt Koenes
How to save the printer setting to file and then load it
Answer:
Create a unit PrinterSetup and place code in this unit. Do the following to save
the printer config to file
1
2 procedure TForm1.Button1Click(Sender: TObject);
3 var
4 PrinterSetup: TPrinterSetup
5 begin
6 PrinterSetup := TPrinterSetup.Create;
7 PrinterSetup.SaveSetup(FileName);
8 //where file name is a string to the location of the File ex.'c:\print.cfg'
9 PrinterSetup.Free;
10 end
11
12 PrinterSetup unit code
13
14 unit PrinterSetup;
15
16 interface
17
18 uses
19 printers,
20 windows,
21 SysUtils,
22 Classes,
23 WinSpool;
24
25 type
26 TPrinterSetup = class
27
28 private
29 Device, Driver, Port: array[0..CCHDEVICENAME] of char;
30 DeviceMode: THandle;
31 procedure Refresh;
32
33 protected
34
35 public
36 procedure SaveSetup(FileName: TFilename);
37 procedure LoadSetup(FileName: TFilename);
38 end;
39 TPrinterConfig = record
40 ADevice, ADriver, APort: array[0..CCHDEVICENAME] of char;
41 SizeOfDeviceMode: DWORD;
42 end;
43
44 implementation
45
46 procedure TPrinterSetup.Refresh;
47 begin
48 Printer.GetPrinter(Device, Driver, Port, DeviceMode);
49 end;
50
51 procedure TPrinterSetup.SaveSetup(FileName: TFilename);
52 var
53 StubDevMode: TDeviceMode;
54 SetupPrinter: TPrinterConfig;
55 FPrinterHandle: THandle;
56 fFileConfig: file of TPrinterConfig;
57 fFileDevMode: file of Char;
58 pDevMode: PChar;
59 Contador: Integer;
60 begin
61 Refresh;
62 with SetupPrinter do
63 begin
64 StrLCopy(ADevice, Device, SizeOf(ADevice));
65 StrLCopy(ADriver, Driver, SizeOf(ADriver));
66 StrLCopy(APort, Port, SizeOf(APort));
67 OpenPrinter(Device, FPrinterHandle, nil);
68 SizeOfDeviceMode := DocumentProperties(0, FPrinterHandle, Device,
69 StubDevMode, StubDevMode, 0);
70 end;
71 AssignFile(fFileConfig, FileName);
72 ReWrite(fFileConfig);
73 write(fFileConfig, SetupPrinter);
74 CloseFile(fFileConfig);
75 AssignFile(fFileDevMode, FileName);
76 Reset(fFileDevMode);
77 Seek(fFileDevMode, FileSize(fFileDevMode));
78 pDevMode := GlobalLock(DeviceMode);
79 for Contador := 0 to SetupPrinter.SizeOfDeviceMode - 1 do
80 begin
81 write(fFileDevMode, pDevMode[Contador]);
82 end;
83 CloseFile(fFileDevMode);
84 GlobalUnLock(DeviceMode);
85 end;
86
87 procedure TPrinterSetup.LoadSetup(FileName: TFilename);
88 var
89 SetupPrinter: TPrinterConfig;
90 fFileConfig: file of TPrinterConfig;
91 fFileDevMode: file of Char;
92 ADeviceMode: THandle;
93 pDevMode: PChar;
94 Contador: Integer;
95 begin
96 if FileExists(FileName) then
97 begin
98 AssignFile(fFileConfig, FileName);
99 Reset(fFileConfig);
100 read(fFileConfig, SetupPrinter);
101 CloseFile(fFileConfig);
102 AssignFile(fFileDevMode, FileName);
103 Reset(fFileDevMode);
104 Seek(fFileDevMode, SizeOf(SetupPrinter));
105 ADeviceMode := GlobalAlloc(GHND, SetupPrinter.SizeOfDeviceMode);
106 pDevMode := GlobalLock(ADeviceMode);
107 for Contador := 0 to SetupPrinter.SizeOfDeviceMode - 1 do
108 begin
109 read(fFileDevMode, char(pDevMode[Contador]));
110 end;
111 CloseFile(fFileDevMode);
112 GlobalUnLock(ADeviceMode);
113 Printer.SetPrinter(SetupPrinter.ADevice, SetupPrinter.ADriver,
114 SetupPrinter.APort, ADeviceMode);
115 end;
116 end;
117
118 end.
|