this slowpoke moves

Get Printer Driver Information

uses ExtCtrls, Printers, Winspool

private
    { Private declarations }
    pEnumDriversData: PDriverInfo2;
    
//

procedure TForm1.FormCreate(Sender: TObject);
begin
  ComboBox1.Items.Assign(Printer.Printers);
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
var
  hPrinter: THandle;
  PrtName: string;
  DriverInfo: PDriverInfo2;
  dwNeeded: DWORD;
begin
  Memo1.Clear;
  PrtName := Combobox1.Text;
  OpenPrinter(PChar(PrtName), hPrinter, nil);
  GetPrinterDriver(hPrinter, nil, 2, DriverInfo, 0, dwNeeded);
  GetMem(DriverInfo, dwNeeded);
  if GetPrinterDriver(hPrinter, nil, 2, DriverInfo, dwNeeded, dwNeeded) then
  begin
    // Add infos to Memo1
    Memo1.Lines.Add('Version: ' + IntToStr(DriverInfo.cVersion));
    Memo1.Lines.Add(StrPas(DriverInfo.pName));
    Memo1.Lines.Add(StrPas(DriverInfo.pEnvironment));
    Memo1.Lines.Add(StrPas(DriverInfo.pDriverPath));
    Memo1.Lines.Add(StrPas(DriverInfo.pDataFile));
    Memo1.Lines.Add(StrPas(DriverInfo.pConfigFile));
  end
  else
    Memo1.Lines.Add('No Info needed = ' + IntToStr(dwNeeded));

  ClosePrinter(hPrinter);
  FreeMem(DriverInfo);
end;

procedure TForm1.ListBox1Click(Sender: TObject);
var
  pTemp: PDriverInfo2;
begin
  with Sender as TListbox do 
  begin
    if ItemIndex >= 0 then 
    begin
      memo1.Clear;
      pTemp := PDriverInfo2(Items.Objects[ItemIndex]);
      with memo1.Lines, pTemp^ do
      begin
        Add(Format('cVersion:'#9#9'%d', [cVersion]));
        Add(Format('pName:'#9#9'%s', [pName]));
        Add(Format('pEnvironment:'#9'%s', [pEnvironment]));
        Add(Format('pDriverPath:'#9'%s', [pDriverPath]));
        Add(Format('pDataFile:'#9#9'%s', [pDataFile]));
        Add(Format('pConfigFile:'#9'%s', [pConfigFile]));
      end;
    end;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  i, bytesNeeded: DWORD;
  pTemp: PDriverInfo2;
  NumDrivers: DWORD;
begin
  listbox1.Clear;
  if Assigned(pEnumDriversData) then
    FreeMem(pEnumDriversData);
  // get number of installed drivers
  Numdrivers := 0;
  bytesNeeded := 0;
  EnumPrinterDrivers(nil, nil, 2, nil, 0, bytesNeeded, NumDrivers);
  if bytesNeeded = 0 then
  begin
    ShowMessage('No printer drivers installed!');
    Exit;
  end;

  // allocate memory for the driver data
  GetMem(pEnumDriversData, bytesNeeded);
  // fetch driver data
  if EnumPrinterDrivers(nil, nil, 2, pEnumDriversData, bytesNeeded,
    bytesNeeded, NumDrivers) then 
  begin
    // add drivers to listbox1
    pTemp := pEnumDriversData;
    for i := 1 to Numdrivers do 
    begin
      listbox1.Items.AddObject(pTemp^.pName, TObject(pTemp));
      Inc(pTemp);
      // Note: Inc increments a pointer by the size of its base type!
    end;
    listbox1.ItemIndex := 0;
    listbox1Click(listbox1);
  end
  else
    RaiseLastWin32Error;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  if Assigned(pEnumDriversData) then
    FreeMem(pEnumDriversData);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  ScaleX, ScaleY: Integer;
  RR: TRect;
begin
  with Printer do
  begin
    BeginDoc;
    // The StartDoc function starts a print job.
    try
      ScaleX := GetDeviceCaps(Handle, logPixelsX) div PixelsPerInch;
      ScaleY := GetDeviceCaps(Handle, logPixelsY) div PixelsPerInch;
      // Retrieves information about the Pixels per Inch of the Printer.
      RR := Rect(0, 0, Image1.picture.Width * scaleX, Image1.Picture.Height * ScaleY);
      Canvas.StretchDraw(RR, Image1.Picture.Graphic);
      // Stretch to fit
    finally
      EndDoc;
    end;
  end;
end;

Keine Kommentare:

Kommentar veröffentlichen

Beliebte Posts

Translate