Printers(一) 印表機配置資訊

2021-07-14 07:08:51 字數 2858 閱讀 7917

單元名

uses printers;
1、獲取控制面板中的印表機列表

printer.printers  ;// 返回值型別 tstrings
2、設定印表機的列印屬性 列印方向 自定義紙張大小

//引數:lpname  表示指定印表機名字  ''表示非預設印表機

procedure setprinterinfo(lpname string) ;

var adevice, adriver, aport: pchar;

adevicemode: thandle ;

pdmode: pdevmode;

anew :boolean ;

begin

getmem(adevice,cchdevicename);

getmem(adriver,max_path);

getmem(aport,max_path);

trytrywith printer do

begin

判定印表機是否切換

if (lpname <>'') then

begin

anew := false;

if printerindex <> printer.printers.indexof(lpname ) then

anew := true ;

printerindex := printer.printers.indexof(lpname ) ;

end;

getprinter(adevice, adriver, aport,adevicemode);

/**b 針對印表機切換時使用******************************/

//例如將預設印表機切換到非預設印表機

//getnew_devicemode 自定義函式,位置unitprinterzdy單元中。

if anew then

begin

adevicemode := getnew_devicemode(adevice) ;

end;

/**e**********************************************/

if adevicemode <> 0 then

begin

pdmode := globallock(adevicemode);

if pdmode <> nil then

begin

pdmode^.dmfields:=pdmode^.dmfields or dm_orientation;

//設定列印方向橫向列印

pdmode^.dmorientation:= dmorient_landscape ;

end;

setprinter(adevice,adriver,aport, adevicemode);

globalunlock(adevicemode);

end;

/**開始列印*******/

begindoc ;

//此處列印內容

enddoc ;

/**結束列印*******/

end;

except

end;

finally

freemem(adevice,cchdevicename);

freemem(adriver,max_path);

freemem(aport,max_path);

end;

end ;

unit unitprinterzdy;

inte***ce

uses windows,winspool ;

function

getnew_devicemode

(adevice : pchar ) : thandle;

implementation

function

getnew_devicemode

(adevice : pchar ) : thandle;

var stubdevmode: tdevicemode;

fprinterhandle: thandle;

devicemode: thandle;

devmode: pdevicemode;

begin

devicemode := 0 ;

if openprinter(adevice, fprinterhandle, nil) then

begin

devicemode := globalalloc(ghnd,

documentproperties(0, fprinterhandle, adevice, stubdevmode,

stubdevmode, 0));

if devicemode <> 0

then

begin

devmode := globallock(devicemode);

if documentproperties(0, fprinterhandle, adevice, devmode^,

devmode^, dm_out_buffer) < 0

then

begin

globalunlock(devicemode);

globalfree(devicemode);

devicemode := 0;

devmode := nil;

endend;

end;

result := devicemode ;

end ;

end.

印表機案例, 辦公室裡多人使用同一印表機

印表機案例,辦公室裡多人使用同一印表機 class staff object 員工類 defuser printer self,info,pr 使用印表機的方法 param info 需要列印的資訊 param pr 印表機物件 return none pr.add task info class ...

202003 印表機安裝 網路印表機安裝 通用教程

該文源於自己的實踐總結 不一定完全正確,但可以應對大部分場景。一 對於普通印表機,通過usb連線的印表機,非網路印表機,直接找到該印表機對應的驅動,傻瓜安裝就可以啦 二 對於網路印表機 一 如果是初次安裝 先保證印表機自身接入網路,配置好ip 找到該印表機的驅動程式 未完待續 二 如果電腦裡已經安裝...

Linux配置印表機

列印流程的理解 如果印表機已經支援了ipp協議,這個協議就是基於http的。也就是說終端 pc 只要能發起http請求應該就可以列印文件。cups相當終端裝置與印表機之間的乙個橋梁,終端給cups提交文件,cpus通過ipp或者其他協議去列印這個文件。ppd檔案就是描述印表機的配置,比如印表機生產商...