怎样用程序直接选择打印机? 本机有两台打印机,一台本地打印机,一台远程打印服务器,打印是自动输出,有时输出本地打印机,有时输出远程打印机。怎么实现,谢谢各位大虾指点迷津! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 TPrintDialog部件显示一打印对话框 ...get / set the default printer? uses Printers, Messages; function GetDefaultPrinter: string; var ResStr: array[0..255] of Char; begin GetProfileString('Windows', 'device', '', ResStr, 255); Result := StrPas(ResStr); end; procedure SetDefaultPrinter1(NewDefPrinter: string); var ResStr: array[0..255] of Char; begin StrPCopy(ResStr, NewdefPrinter); WriteProfileString('windows', 'device', ResStr); StrCopy(ResStr, 'windows'); SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, Longint(@ResStr)); end; procedure SetDefaultPrinter2(PrinterName: string); var I: Integer; Device: PChar; Driver: PChar; Port: PChar; HdeviceMode: THandle; aPrinter: TPrinter; begin Printer.PrinterIndex := -1; GetMem(Device, 255); GetMem(Driver, 255); GetMem(Port, 255); aPrinter := TPrinter.Create; try for I := 0 to Printer.Printers.Count - 1 do begin if Printer.Printers = PrinterName then begin aprinter.PrinterIndex := i; aPrinter.getprinter(device, driver, port, HdeviceMode); StrCat(Device, ','); StrCat(Device, Driver); StrCat(Device, Port); WriteProfileString('windows', 'device', Device); StrCopy(Device, 'windows'); SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, Longint(@Device)); end; end; finally aPrinter.Free; end; FreeMem(Device, 255); FreeMem(Driver, 255); FreeMem(Port, 255); end; procedure TForm1.Button1Click(Sender: TObject); begin label1.Caption := GetDefaultPrinter2; end; //Fill the combobox with all available printers procedure TForm1.FormCreate(Sender: TObject); begin Combobox1.Items.Clear; Combobox1.Items.AddStrings(Printer.Printers); end; //Set the selected printer in the combobox as default printer procedure TForm1.Button2Click(Sender: TObject); begin SetDefaultPrinter(Combobox1.Text); end; 重新提个问题 如何在Dbgrid某一行下画一个Stringgrid控件,像Treeview一样单击一个'+'来收缩展开? sql2000桌面版同时连接的客户数是多少 FastReport的问题 请教一个关于鼠标拖放问题,如何接收到鼠标在窗口外部的拖放事件? 条码打印机打印中文(高分求,急等) 为什么使用“子类化”有些消息不响应? Delphi7中Animte控件播放AVI花屏? delphi中如何制作开关式按钮,EASY吧 在delphi7中怎么用dbExpress访问MS_SQL? 求救!ADO有什么好一点的Join查询数据保存提交控件 关于Excel和StringGrid的问题
uses
Printers, Messages; function GetDefaultPrinter: string;
var
ResStr: array[0..255] of Char;
begin
GetProfileString('Windows', 'device', '', ResStr, 255);
Result := StrPas(ResStr);
end; procedure SetDefaultPrinter1(NewDefPrinter: string);
var
ResStr: array[0..255] of Char;
begin
StrPCopy(ResStr, NewdefPrinter);
WriteProfileString('windows', 'device', ResStr);
StrCopy(ResStr, 'windows');
SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, Longint(@ResStr));
end; procedure SetDefaultPrinter2(PrinterName: string);
var
I: Integer;
Device: PChar;
Driver: PChar;
Port: PChar;
HdeviceMode: THandle;
aPrinter: TPrinter;
begin
Printer.PrinterIndex := -1;
GetMem(Device, 255);
GetMem(Driver, 255);
GetMem(Port, 255);
aPrinter := TPrinter.Create;
try
for I := 0 to Printer.Printers.Count - 1 do
begin
if Printer.Printers = PrinterName then
begin
aprinter.PrinterIndex := i;
aPrinter.getprinter(device, driver, port, HdeviceMode);
StrCat(Device, ',');
StrCat(Device, Driver);
StrCat(Device, Port);
WriteProfileString('windows', 'device', Device);
StrCopy(Device, 'windows');
SendMessage(HWND_BROADCAST, WM_WININICHANGE,
0, Longint(@Device));
end;
end;
finally
aPrinter.Free;
end;
FreeMem(Device, 255);
FreeMem(Driver, 255);
FreeMem(Port, 255);
end; procedure TForm1.Button1Click(Sender: TObject);
begin
label1.Caption := GetDefaultPrinter2;
end; //Fill the combobox with all available printers
procedure TForm1.FormCreate(Sender: TObject);
begin
Combobox1.Items.Clear;
Combobox1.Items.AddStrings(Printer.Printers);
end; //Set the selected printer in the combobox as default printer
procedure TForm1.Button2Click(Sender: TObject);
begin
SetDefaultPrinter(Combobox1.Text);
end;