Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Сохранить установки принтера в файл

Delphi , ОС и Железо , Принтеры и Печать

Сохранить установки принтера в файл

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{ 
  Create a unit PrinterSetup and place code in this unit 
  Do the following to save the printer config to file 
}

 procedure TForm1.Button1Click(Sender: TObject);
 var
   PrinterSetup: TPrinterSetup
 begin
   PrinterSetup := TPrinterSetup.Create;
   PrinterSetup.SaveSetup(FileName);
   //where file name is a string to the location of the File ex.'c:\print.cfg' 
  PrinterSetup.Free;
 end

 {***********************************}

 unit PrinterSetup;

 interface

 uses
   printers,
   windows,
   SysUtils,
   Classes,
   WinSpool;

 type
   TPrinterSetup = class

   private
     Device, Driver, Port: array[0..CCHDEVICENAME] of char;
     DeviceMode: THandle;
     procedure Refresh;

   protected

   public
     procedure SaveSetup(FileName: TFilename);
     procedure LoadSetup(FileName: TFilename);
   end;
   TPrinterConfig = record
     ADevice, ADriver, APort: array[0..CCHDEVICENAME] of char;
     SizeOfDeviceMode: DWORD;
   end;

 implementation

 procedure TPrinterSetup.Refresh;
 begin
   Printer.GetPrinter(Device, Driver, Port, DeviceMode);
 end;

 procedure TPrinterSetup.SaveSetup(FileName: TFilename);
 var
   StubDevMode: TDeviceMode;
   SetupPrinter: TPrinterConfig;
   FPrinterHandle: THandle;
   fFileConfig: file of TPrinterConfig;
   fFileDevMode: file of Char;
   pDevMode: PChar;
   Contador: Integer;
 begin
   Refresh;
   with SetupPrinter do
   begin
     StrLCopy(ADevice, Device, SizeOf(ADevice));
     StrLCopy(ADriver, Driver, SizeOf(ADriver));
     StrLCopy(APort, Port, SizeOf(APort));
     OpenPrinter(Device, FPrinterHandle, nil);
     SizeOfDeviceMode := DocumentProperties(0, FPrinterHandle, Device,
       StubDevMode, StubDevMode, 0);
   end;
   AssignFile(fFileConfig, FileName);
   ReWrite(fFileConfig);
   Write(fFileConfig, SetupPrinter);
   CloseFile(fFileConfig);
   AssignFile(fFileDevMode, FileName);
   Reset(fFileDevMode);
   Seek(fFileDevMode, FileSize(fFileDevMode));
   pDevMode := GlobalLock(DeviceMode);
   for Contador := 0 to SetupPrinter.SizeOfDeviceMode - 1 do
   begin
     Write(fFileDevMode, pDevMode[Contador]);
   end;
   CloseFile(fFileDevMode);
   GlobalUnLock(DeviceMode);
 end;


 procedure TPrinterSetup.LoadSetup(FileName: TFilename);
 var
   SetupPrinter: TPrinterConfig;
   fFileConfig: file of TPrinterConfig;
   fFileDevMode: file of Char;
   ADeviceMode: THandle;
   pDevMode: PChar;
   Contador: Integer;
 begin
   if FileExists(FileName) then
   begin
     AssignFile(fFileConfig, FileName);
     Reset(fFileConfig);
     read(fFileConfig, SetupPrinter);
     CloseFile(fFileConfig);
     AssignFile(fFileDevMode, FileName);
     Reset(fFileDevMode);
     Seek(fFileDevMode, SizeOf(SetupPrinter));
     ADeviceMode := GlobalAlloc(GHND, SetupPrinter.SizeOfDeviceMode);
     pDevMode := GlobalLock(ADeviceMode);
     for Contador := 0 to SetupPrinter.SizeOfDeviceMode - 1 do
     begin
       read(fFileDevMode, char(pDevMode[Contador]));
     end;
     CloseFile(fFileDevMode);
     GlobalUnLock(ADeviceMode);
     Printer.SetPrinter(SetupPrinter.ADevice, SetupPrinter.ADriver,
       SetupPrinter.APort, ADeviceMode);
   end;
 end;

 end.

Here's the translation of the provided text into Russian:

В этом коде реализовано сохранение и загрузка конфигурации настройки принтера в файле. Он использует юнит TPrinterSetup, который включает в себя процедуры для сохранения и загрузки настройки принтера.

Описание работы: 1. Процедура SaveSetup сохраняет текущие настройки принтера в файле. Она обновляет настройки принтера с помощью метода Refresh, а затем записывает настройки в два файла: один для конфигурации принтера (fFileConfig) и другой для режима устройства (fFileDevMode). Режим устройства считывается из файла и хранится в переменной DeviceMode. 2. Процедура LoadSetup загружает конфигурацию настройки принтера из файла. Она проверяет, существует ли файл, затем читает настройки принтера и режим устройства из файлов. Наконец, она устанавливает загруженные настройки принтера с помощью метода SetPrinter.

Обновленный код:

unit PrinterSetup;
interface
uses
  printers,
  windows,
  SysUtils,
  Classes,
  WinSpool;
type
  TPrinterSetup = class

  private
    Device, Driver, Port: array[0..CCHDEVICENAME] of char;
    DeviceMode: THandle;
    procedure Refresh;
    function GetDevice: string;
    function GetDriver: string;
    function GetPort: string;

  protected

  public
    procedure SaveSetup(FileName: TFilename);
    procedure LoadSetup(FileName: TFilename);

  end;
implementation
procedure TPrinterSetup.Refresh;
begin
  Printer.GetPrinter(Device, Driver, Port, DeviceMode);
end;
procedure TPrinterSetup.SaveSetup(FileName: TFilename);
var
  StubDevMode: TDeviceMode;
  SetupPrinter: TPrinterConfig;
  FPrinterHandle: THandle;
  fFileConfig: TextFile;
  fFileDevMode: TextFile;
  pDevMode: PChar;
  Contador: Integer;
begin
  Refresh;
  with SetupPrinter do
  begin
    StrLCopy(ADevice, GetDevice, SizeOf(ADevice));
    StrLCopy(ADriver, GetDriver, SizeOf(ADriver));
    StrLCopy(APort, GetPort, SizeOf(APort));
    OpenPrinter(GetDevice, FPrinterHandle, nil);
    SizeOfDeviceMode := DocumentProperties(0, FPrinterHandle, GetDevice,
      StubDevMode, StubDevMode, 0);
  end;
  AssignFile(fFileConfig, FileName);
  Rewrite(fFileConfig);
  WriteLn(fFileConfig, SetupPrinter. ADevice);
  WriteLn(fFileConfig, SetupPrinter.ADriver);
  WriteLn(fFileConfig, SetupPrinter.APort);
  CloseFile(fFileConfig);

  AssignFile(fFileDevMode, FileName);
  Reset(fFileDevMode);
  Seek(fFileDevMode, FileSize(fFileDevMode));
  pDevMode := GlobalLock(DeviceMode);
  for Contador := 0 to SetupPrinter.SizeOfDeviceMode - 1 do
  begin
    Write(fFileDevMode, pDevMode[Contador]);
  end;
  CloseFile(fFileDevMode);
  GlobalUnLock(DeviceMode);
end;
procedure TPrinterSetup.LoadSetup(FileName: TFilename);
var
  SetupPrinter: TPrinterConfig;
  fFileConfig: TextFile;
  fFileDevMode: TextFile;
  ADeviceMode: THandle;
  pDevMode: PChar;
  Contador: Integer;
begin
  if FileExists(FileName) then
  begin
    AssignFile(fFileConfig, FileName);
    Reset(fFileConfig);
    ReadLn(fFileConfig, SetupPrinter.ADevice);
    ReadLn(fFileConfig, SetupPrinter.ADriver);
    ReadLn(fFileConfig, SetupPrinter.APort);
    CloseFile(fFileConfig);

    AssignFile(fFileDevMode, FileName);
    Reset(fFileDevMode);
    Seek(fFileDevMode, SizeOf(SetupPrinter));
    ADeviceMode := GlobalAlloc(GHND, SetupPrinter.SizeOfDeviceMode);
    pDevMode := GlobalLock(ADeviceMode);
    for Contador := 0 to SetupPrinter.SizeOfDeviceMode - 1 do
    begin
      Read(fFileDevMode, char(pDevMode[Contador]));
    end;
    CloseFile(fFileDevMode);
    GlobalUnLock(ADeviceMode);
    Printer.SetPrinter(SetupPrinter.ADevice, SetupPrinter.ADriver,
      SetupPrinter.APort, ADeviceMode);
  end;
end;
function TPrinterSetup.GetDevice: string;
begin
  Result := Device;
end;
function TPrinterSetup.GetDriver: string;
begin
  Result := Driver;
end;
function TPrinterSetup.GetPort: string;
begin
  Result := Port;
end;
end.

Обновленный код использует TextFile вместо file of TPrinterConfig и file of Char. Это делает код чище и проще для чтения. Он также включает в себя методы-getter для настроек принтера, которые могут использоваться в других частях вашего программы, если это необходимо.

Помните, что это базовый пример и может не соответствовать вашим конкретным требованиям. Вам может потребоваться адаптация кода к вашим нуждам.

Сохранение настроек принтера в файл позволяет сохранить все параметры принтера, включая имя устройства, драйвер и порт, а также устройство режима печати, для последующего использования или восстановления.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Принтеры и Печать ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 08:52:05/0.0065040588378906/0