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

Вывести список установленных принтеров и установить принтер по умолчанию

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



Автор: Xavier Pacheco

unit MainFrm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TMainForm = class(TForm)
    cbPrinters: TComboBox;
    lblPrinter: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure cbPrintersChange(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementation
uses IniFiles, Printers;

{$R *.DFM}

procedure TMainForm.FormCreate(Sender: TObject);
begin
  { Copy the printer names to the combobox and set the combobox to
    show the currently selected default printer }
  cbPrinters.Items.Assign(Printer.Printers);
  cbPrinters.Text := Printer.Printers[Printer.PrinterIndex];
  // Update the label to reflect the default printer
  lblPrinter.Caption := Printer.Printers[Printer.PrinterIndex];
end;

procedure TMainForm.cbPrintersChange(Sender: TObject);
var
  IniFile: TIniFile;
  TempStr1, TempStr2: string;
  S: array[0..64] of char;
begin
  with Printer do
  begin
    // Set the new printer based on the ComboBox's selected printer
    PrinterIndex := cbPrinters.ItemIndex;
    // Store the printer name into a temporary string
    TempStr1 := Printers[PrinterIndex];
    // Delete the unnecessary portion of the printer name
    System.Delete(TempStr1, Pos(' on ', TempStr1), Length(TempStr1));
    // Create a TIniFile class
    IniFile := TIniFile.Create('WIN.INI');
    try
      // Retrieve the device name of the selected printer
      TempStr2 := IniFile.ReadString('Devices', TempStr1, '');
      // Change the default printer to that chosen by the user
      IniFile.WriteString('windows', 'device', TempStr1 + ',' + TempStr2);
      // Tell all windows that the default printer changed.
      StrCopy(S, 'windows');
      SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, LongInt(@S));
    finally
      IniFile.Free;
    end;
  end;
  // Update the label to reflect the new printer selection
  lblPrinter.Caption := Printer.Printers[Printer.PrinterIndex];
end;

end.

Программа на Delphi, которая отображает список установленных принтеров и позволяет пользователю выбрать один из них как основной принтер.

Вот разбивка кода:

Основная форма Основная форма (TMainForm) имеет три компонента: cbPrinters (комбо-бокс), lblPrinter (етiqueta) и обработчики событий FormCreate и cbPrintersChange.

FormCreate В обработчике события FormCreate код: 1. присваивает список установленных принтеров комбо-боксу используя Printer.Printers. 2. устанавливает текст комбо-бокса на текущий выбранный основной принтер. 3. обновляет этикетку, отражающую основной принтер.

cbPrintersChange В обработчике события cbPrintersChange код: 1. устанавливает новый основной принтер в соответствии с выбраным элементом в комбо-боксе используя PrinterIndex. 2. удаляет ненужную часть имени принтера (например, "on "). 3. создает объект TIniFile для хранения устройства имени выбранного принтера. 4. получает устройное имя из файла INI и хранит его в временной строке. 5. записывает новые настройки основного принтера в файл INI. 6. отправляет сообщение всем окнам, чтобы обновить свои настройки основного принтера используя SendMessage. 7. обновляет этикетку, отражающую новый выбор принтера.

Альтернативное решение Вместо использования файла INI можно использовать функции Windows API для установки и получения настроек основного принтера. Вот пример:

uses
  Windows, Printers;

procedure TMainForm.cbPrintersChange(Sender: TObject);
var
  hPrinter: HPRINTERS;
begin
   // Установка нового основного принтера
  PrinterIndex := cbPrinters.ItemIndex;

   // Получение устройства имени выбранного принтера
  GetDeviceName(Printer.Printers[PrinterIndex], hPrinter, 0);

   // Установка основного принтера с помощью Windows API
  DefaultPrinter(hPrinter);
end;

function TMainForm.DefaultPrinter(HPrinter: HPRINTERS): Boolean;
begin
  Result := SetDefaultPrinter(HPrinter) = 1;
end;

В этом примере мы используем функцию GetDeviceName для получения устройства имени выбранного принтера и затем передаем его в функцию SetDefaultPrinter для установки основного принтера. Мы также определили новый обработчик события DefaultPrinter, который устанавливает основной принтер с помощью Windows API.

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


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 01:38:26/0.0034620761871338/0