用修改WIN.INI文件中Device项的方法 举个例子: procedure TMainForm.cbPrintersChange(Sender:TObject); var IniFile:TInifile; TempStr1,TempStr2:String; begin with Printer do begin PrinterIndex:=cbPrinters.ItemIndex;//cbPrinters:TCombobox TemStr1:=Printers[PrinterIndex]; System.Delete(TempStr1,Pos('on',TempStr1),Length(TempStr1)); IniFile:=TIniFile.Create('WIN.INI'); try TempStr2:=IniFile.ReadString('Devices',TempStr1,''); Inifile.WriteString('Windows','Device',TempStr1+''+TempStr2); finally IniFile.Free; end; end; lblPrinter.Caption:=Printer.Printers[Printer.PrinterIndex];//lblPrinter:TLabel end;
WIN9X中可以这样 procedure TForm1.Button1Click(Sender: TObject); var hPrinter: THandle; dwSize: DWORD; pi: PRINTER_INFO_2; begin if OpenPrinter('PrinterName', hPrinter, nil) then begin GetPrinter(hPrinter, 2, @pi, 0, @dwSize); GetPrinter(hPrinter, 2, @pi, dwSize, @dwSize); pi.Attributes := PRINTER_ATTRIBUTE_DEFAULT; SetPrinter(hPrinter, 2, @pi, 0); ClosePrinter(hPrinter); end; end; 但是NT应该象 nkzgj(和曦) 那样。
nkzgj(和曦) 这个例子我也有,在MyBase中查到的。但是不好使
to prometheusphinx(白日梦) 我运行这段程序会出错?!
procedure TForm1.Button1Click(Sender: TObject); var hPrinter: THandle; dwSize: DWORD; pi: PPrinterInfo2; begin if OpenPrinter('Epson ActionLaser 1600', hPrinter, nil) then begin GetPrinter(hPrinter, 2, nil, 0, @dwSize); try GetMem(pi, dwSize); try GetPrinter(hPrinter, 2, pi, dwSize, @dwSize); pi^.Attributes := PRINTER_ATTRIBUTE_DEFAULT; SetPrinter(hPrinter, 2, pi, 0); finally FreeMem(pi); end; finally ClosePrinter(hPrinter); end; end; end;
有直接的打印函数;
可以直接调用获得默认的打印机;
:
先获得所有打印机,在指定默认的打印机;
delphi5开发人员指南上边有的;
用修改WIN.INI文件中Device项的方法
举个例子:
procedure TMainForm.cbPrintersChange(Sender:TObject);
var
IniFile:TInifile;
TempStr1,TempStr2:String;
begin
with Printer do
begin
PrinterIndex:=cbPrinters.ItemIndex;//cbPrinters:TCombobox
TemStr1:=Printers[PrinterIndex];
System.Delete(TempStr1,Pos('on',TempStr1),Length(TempStr1));
IniFile:=TIniFile.Create('WIN.INI');
try
TempStr2:=IniFile.ReadString('Devices',TempStr1,'');
Inifile.WriteString('Windows','Device',TempStr1+''+TempStr2);
finally
IniFile.Free;
end;
end;
lblPrinter.Caption:=Printer.Printers[Printer.PrinterIndex];//lblPrinter:TLabel
end;
procedure TForm1.Button1Click(Sender: TObject);
var
hPrinter: THandle;
dwSize: DWORD;
pi: PRINTER_INFO_2;
begin
if OpenPrinter('PrinterName', hPrinter, nil) then
begin
GetPrinter(hPrinter, 2, @pi, 0, @dwSize);
GetPrinter(hPrinter, 2, @pi, dwSize, @dwSize);
pi.Attributes := PRINTER_ATTRIBUTE_DEFAULT;
SetPrinter(hPrinter, 2, @pi, 0);
ClosePrinter(hPrinter);
end;
end;
但是NT应该象 nkzgj(和曦) 那样。
我运行这段程序会出错?!
var
hPrinter: THandle;
dwSize: DWORD;
pi: PPrinterInfo2;
begin
if OpenPrinter('Epson ActionLaser 1600', hPrinter, nil) then
begin
GetPrinter(hPrinter, 2, nil, 0, @dwSize);
try
GetMem(pi, dwSize);
try
GetPrinter(hPrinter, 2, pi, dwSize, @dwSize);
pi^.Attributes := PRINTER_ATTRIBUTE_DEFAULT;
SetPrinter(hPrinter, 2, pi, 0);
finally
FreeMem(pi);
end;
finally
ClosePrinter(hPrinter);
end;
end;
end;