printer不能使用共享打印机(100分)

  • 主题发起人 主题发起人 coolingxyz
  • 开始时间 开始时间
C

coolingxyz

Unregistered / Unconfirmed
GUEST, unregistred user!
下面是我的一个测试程序.
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
Printer.PrinterIndex := ComboBox1.ItemIndex;
for i := 1 to 3do
begin
printer.Copies := i;
RichEdit1.Text := '打印 '+inttostr(i)+' 份!';
RichEdit1.Print(inttostr(i));
end;
end;

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

当我选择的打印机是本机上安装的打印机时,可以打印.而选择其他机器上的共享打印机打印时,提示:Printer selected is not valid.
主要是我的程序中打印不同的报表需要不同的份数,而且不同的报表要同时打印出来,所以想自己设置打印份数,而不是由用户通过PrintDialog来选择.
这到底是什么问题?
 
不是程序问题,而是你的打印机还没共享好。
 
我用的也是网络打印机,没问题啊。
你是怎么设置打印机的?
 
你这样测试,现在在调试状况看看网络打印机的序号,然后直接设置后再打印,
Printer.PrinterIndex := 这里直接设置成网络打印机,然后看看结果。
 
先判断打印机状态:
uses WinSpool;
////////////////////////////////////////////////////////////////////////////////
//设计: Lsuper
//功能: 判断打印机是否就绪
//参数:!! 可能是网络打印机
////////////////////////////////////////////////////////////////////////////////
function IsPrinterReady(const APrinter: string): Boolean;
var
hGlobal, hPrinter: THandle;
dwNeeded: DWord;
pDefs: TPrinterDefaults;
pInfo: PPrinterInfo2;
bFlag: Boolean;
begin
Result := False;
if APrinter = '' then
Exit;
hGlobal := 0;
try
FillChar(pDefs, SizeOf(TPrinterDefaults), 0);
pDefs.DesiredAccess := {STANDARD_RIGHTS_REQUIRED or} PRINTER_ACCESS_USE;
bFlag := OpenPrinter(Pchar(APrinter), hPrinter, @pDefs);
dwNeeded := GetLastError;
if not bFlag or (hPrinter = INVALID_HANDLE_VALUE) then
Exit;
FillChar(pInfo, SizeOf(pInfo), #0);
WinSpool.GetPrinter(hPrinter, 2, nil, 0, @dwNeeded);
if dwNeeded = 0 then
Exit;
hGlobal := GlobalAlloc(GHND, dwNeeded);
if hGlobal = 0 then
Exit;
pInfo := PPrinterInfo2(GlobalLock(hGlobal));
if pInfo = nil then
Exit;
bFlag := WinSpool.GetPrinter(hPrinter, 2, pInfo, dwNeeded, @dwNeeded);
if bFlag then
Result := pInfo.Status = 0
else
Result := False;
finally
if pInfo <> nil then
GlobalUnlock(hGlobal);
if hGlobal <> 0 then
GlobalFree(hGlobal);
if hPrinter <> 0 then
ClosePrinter(hPrinter);
end;
end;
 
后退
顶部