English 中文(简体)
如何找到安装打印机(使用德尔菲)
原标题:How can I find if there are printers installed (using Delphi)

我的节目在Delphi(以目标为导向的帕斯卡尔)撰写。 当我试图印刷任何东西时,我获得“目前没有安装任何打印机的计算机选用的缺省打印机”。

为了防止这种情况,我想检查是否安装了打印机。 是否有办法检查是否安装了打印机?

最佳回答
use Printers;

Printer.Printers.Count 给你安装的打印机数量

评论构成D2007年印刷单位:

  { TPrinter }

  { The printer object encapsulates the printer interface of Windows.  A print
    job is started whenever any redering is done either through a Text variable
    or the printers canvas.  This job will stay open until EndDoc is called or
    the Text variable is closed.  The title displayed in the Print Manager (and
    on network header pages) is determined by the Title property.

    EndDoc - Terminates the print job (and closes the currently open Text).
      The print job will being printing on the printer after a call to EndDoc.
    NewPage - Starts a new page and increments the PageNumber property.  The
      pen position of the Canvas is put back at (0, 0).
    Canvas - Represents the surface of the currently printing page.  Note that
      some printer do not support drawing pictures and the Draw, StretchDraw,
      and CopyRect methods might fail.
    Fonts - The list of fonts supported by the printer.  Note that TrueType
      fonts appear in this list even if the font is not supported natively on
      the printer since GDI can render them accurately for the printer.
    PageHeight - The height, in pixels, of the page.
    PageWidth - The width, in pixels, of the page.
    PageNumber - The current page number being printed.  This is incremented
      when ever the NewPage method is called.  (Note: This property can also be
      incremented when a Text variable is written, a CR is encounted on the
      last line of the page).
    PrinterIndex - Specifies which printer in the TPrinters list that is
      currently selected for printing.  Setting this property to -1 will cause
      the default printer to be selected.  If this value is changed EndDoc is
      called automatically.
    Printers - A list of the printers installed in Windows.
    Title - The title used by Windows in the Print Manager and for network
      title pages. }
问题回答

这里是一部配备目前安装的所有打印机的图像 com盒的密码。

procedure TMyForm.RefreshPrinterList;
var
  I: Integer;
  NewItem: TComboExItem;
  PPrinterEnumArray, PLocator: PPrinterInfo2;
  ArraySize, BufferSize: cardinal;
  strBuffer: string;
const
  idx_Default_Net_printer = 0;
  idx_Net_printer = 1;
  idx_Default_Local_printer = 2;
  idx_Local_printer = 3;

begin
  DefaultPrinterName := getDefaultPrinterName;
  cbPrinterList.ItemsEx.Clear;
  // S.G. 4/4/2008: list all other printers
  // S.G. 4/4/2008: Get the necessary buffer size
  ArraySize := 0;
  BufferSize := 0;
  PPrinterEnumArray := nil;
  EnumPrinters(PRINTER_ENUM_LOCAL or PRINTER_ENUM_CONNECTIONS, nil, 2, nil, 0, BufferSize, ArraySize);
  PPrinterEnumArray := AllocMem(BufferSize);
  try
    if EnumPrinters(PRINTER_ENUM_LOCAL or PRINTER_ENUM_CONNECTIONS, nil, 2, PPrinterEnumArray, BufferSize, BufferSize, ArraySize) then
    begin
      PLocator := PPrinterEnumArray;
      if ArraySize > 0 then
      begin
        for I := 0 to ArraySize - 1 do    // Iterate
        begin
          NewItem := cbPrinterList.ItemsEx.Add;
          strBuffer := StrPas(PLocator^.pPrinterName);
          UniqueString(strBuffer); // make sure we have a unique string instance and not a pointer
          NewItem.Caption := strBuffer;

          if AnsiSameText(DefaultPrinterName, strBuffer) then
          begin
            // default printer
            if  (PRINTER_ATTRIBUTE_LOCAL AND PLocator^.Attributes) <> 0 then
            begin
              // Local, default printer
              NewItem.ImageIndex := idx_Default_Local_printer;
            end
            else
            begin
              // Network default printer
              NewItem.ImageIndex := idx_Default_Net_printer;
            end;
            cbPrinterList.ItemIndex := NewItem.Index;
          end
          else
          begin
            // default printer
            if  (PRINTER_ATTRIBUTE_LOCAL AND PLocator^.Attributes) <> 0 then
            begin
              // Local, default printer
              NewItem.ImageIndex := idx_Local_printer;
            end
            else
            begin
              // Network default printer
              NewItem.ImageIndex := idx_Net_printer;
            end;
          end;
          Inc(PLocator);
        end;    // for
      end;
    end;
  finally // wrap up
    FreeMem(PPrinterEnumArray);
  end;    // try/finally
end;




相关问题
determining the character set to use

my delphi 2009 app has a basic translation system that uses GNUGetText. i had used some win API calls to prepare the fonts. i thought it was working correctly until recently when someone from Malta ...

Help with strange Delphi 5 IDE problems

Ok, I m going nuts here. For the last (almost) four years, I ve been putting up with some extremely bad behavior from my Delphi 5 IDE. Problems include: Seemingly random errors in coride50.bpl ...

How to write a Remote DataModule to run on a linux server?

i would like to know if there are any solution to do this. Does anyone? The big picture: I want to access data over the web, using my delphi thin clients. But i´would like to keep my server/service ...

How convert string to integer in Oxygene

In Delphi, there is a function StrToInt() that converts a string to an integer value; there is also IntToStr(), which does the reverse. These functions doesn t appear to be part of Oxygene, and I can ...

Quick padding of a string in Delphi

I was trying to speed up a certain routine in an application, and my profiler, AQTime, identified one method in particular as a bottleneck. The method has been with us for years, and is part of a "...

热门标签