...bring up a printer's properties dialog?

Author: Thomas Stutz

Category: Printing

{
  If you need to create your own printer dialog, you can use the PrinterProperties
  API function to bring up a printer's properties dialog.
}

uses
  
WinSpool, Printers;

procedure TForm1.Button1Click(Sender: TObject);
const
  
{
   The TPrinterDefaults structure specifies the default data type,
   environment, initialization data, and access rights for a printer.
  }
  
Defaults: TPrinterDefaults = (pDatatype: nil;
    pDevMode: nil;
    DesiredAccess: STANDARD_RIGHTS_REQUIRED or PRINTER_ACCESS_USE);
var
  
hPrinter: THandle;
  Device: array[0..255] of char;
  Driver: array[0..255] of char;
  Port: array[0..255] of char;
  hDeviceMode: THandle;
  RetVal: Boolean;
begin
  
Printer.PrinterIndex := Combobox1.ItemIndex;
  { Retrieve information about the specified printer }
  
Printer.GetPrinter(Device,
    Driver,
    Port,
    hDeviceMode);
  { Retrieve a handle identifying the specified printer or print }
  
if not OpenPrinter(@Device, hPrinter, @Defaults) then
    
RaiseLastWin32Error;
  try
    
{ Display a printer-properties property sheet for the specified printer }
    
PrinterProperties(Handle, hPrinter);
  finally
    
{ Close the specified printer object }
    
ClosePrinter(hPrinter);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  
{ Show available printers in a Combobox }
  
Combobox1.Items := Printer.Printers;
  Combobox1.ItemIndex := 0;
end;

 

printed from
www.swissdelphicenter.ch
developers knowledge base