如何用程序修改系统打印机的属性?

lp 2001-03-14 12:49:00
如何用程序修改系统打印机的默认属性,实现和在控制面板中修改的结果一样.
...全文
214 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fb 2001-03-24
  • 打赏
  • 举报
回复
?
hfamwu 2001-03-22
  • 打赏
  • 举报
回复
有点意思,我也想知道.
hfamwu 2001-03-14
  • 打赏
  • 举报
回复
最好是用API函数来实现。
wwwxing 2001-03-14
  • 打赏
  • 举报
回复
给你两段改变打印机纸张长宽的例子,其余的改变打印机的属性
可查ADeviceMode(TDeviceMode.dmFileds)属性。

procedure TPrintForm.SetHeight(PaperHeight: longint); //长度?=?
var
ADevice, ADriver, APort: String;
ADeviceMode: THandle;
DevMode: PDeviceMode;
begin
SetLength(ADevice, 255);
SetLength(ADriver, 255);
SetLength(APort, 255);

{ If ADeviceMode is zero, a printer driver is not loaded. Therefore,
setting PrinterIndex forces the driver to load. }
if ADeviceMode = 0 then
begin
Printer.PrinterIndex := Printer.PrinterIndex;
Printer.GetPrinter(PChar(ADevice), PChar(ADriver), PChar(APort), ADeviceMode);
end;

if ADeviceMode <> 0 then
begin
DevMode := GlobalLock(ADeviceMode);
try
DevMode^.dmFields := DevMode^.dmFields or DM_PAPERLENGTH; //or DM_PAPERWIDTH; DevMode^.dmPaperLength := PaperLength;
DevMode^.dmPaperWidth := PaperHeight;
///////////////////////设置纸张//////////////
finally
GlobalUnlock(ADeviceMode);
end;
end
else
raise Exception.Create('Could not set printer copies');
end;

procedure TPrintForm.SetWidth(PaperWidth: longint);
var
ADevice, ADriver, APort: String;
ADeviceMode: THandle;
DevMode: PDeviceMode;
begin
SetLength(ADevice, 255);
SetLength(ADriver, 255);
SetLength(APort, 255);

{ If ADeviceMode is zero, a printer driver is not loaded. Therefore,
setting PrinterIndex forces the driver to load. }
if ADeviceMode = 0 then
begin
Printer.PrinterIndex := Printer.PrinterIndex;
Printer.GetPrinter(PChar(ADevice), PChar(ADriver), PChar(APort), ADeviceMode);
end;

if ADeviceMode <> 0 then
begin
DevMode := GlobalLock(ADeviceMode);
try
DevMode^.dmFields := DevMode^.dmFields or DM_PAPERWIDTH; //or DM_PAPERWIDTH; DevMode^.dmPaperLength := PaperLength;
DevMode^.dmPaperWidth := PaperWidth;
///////////////////////设置纸张////////////////
finally
GlobalUnlock(ADeviceMode);
end;
end
else
raise Exception.Create('Could not set printer copies');
end;
lp 2001-03-14
  • 打赏
  • 举报
回复
我已经有api实现了
但我想实现和系统中一样的打印机设置对话框,不知有无高手指点啊

7,765

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧