| 
			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.
			 |