QucikReport自定義紙張大小

2021-04-13 13:42:57 字數 3008 閱讀 4159

我今天剛解決這個問題.如下.新加乙個印表機:qs_little,首先你要在列印伺服器中設定一張

你定義的張如'qs_little*****' .然所把印表機預設紙張設為這:

procedure find_xp_qs_little;//nt2000中小紙印表機

varhandle:hwnd;

hprinter: thandle;

pform : pforminfo1;

forms :array[1..999] of form_info_1;

cbbuf,pcbneeded1,pcreturned : dword;

ii : integer;

ptestout : pdevicemode;

testout : array[1..3000]of byte;

device, driver, port: array[0..80] of char;

dmode : thandle;

m_string:string;

m_byte:dword;

printinfo:pprinterinfo1;

begin

try*****sizenum:= -1;

//開啟發票印表機,以獲得印表機控制代碼

if not(openprinter('qs_little',hprinter,nil)) then

messagedlg('無法開啟印表機設定紙張,qs_little!',mterror,[mbok],0);

pform := @forms[1];

cbbuf := sizeof(form_info_1)*999;

//敉舉所有的紙張型別

enumforms(hprinter,1,pform,cbbuf,pcbneeded1,pcreturned);

if pcreturned <> 0 then

for ii := 0 to pcreturned - 1 do

begin

if forms[ii + 1].pname = 'qs_little*****' then

begin

*****sizenum:=2 ;

break;

end;

//break;

end;

//如果沒有找到我設的自定義紙張型別,讓使用者加上去

if *****sizenum = -1 then

begin

//addmyform;//加紙張型別的方法

messagedlg('請在發票印表機的列印首選項裡將紙張型別設定為''qs_little*****''',mtwarning,[mbok],0);

// halt;

end;

//use documentproperties function to get *****size number

ptestout := @testout;

printer.getprinter(device, driver, port, dmode);

getmem(printinfo,1024);

getprinter(hprinter,1,printinfo,1024,@*****sizenum);

m_byte:=documentproperties(handle,hprinter,printinfo.pdescription,ptestout^,ptestout^,0);

getmem(ptestout,m_byte);

documentproperties(handle,hprinter,printinfo.pdescription,ptestout^,ptestout^,dm_out_buffer);

*****sizenum:=ptestout^.dm*****size;

m_string:=ptestout^.dmformname ;

//documentproperties最後乙個引數為dm_out_buffer時從印表機中讀取裝置狀態

except

on e:exception do

messagedlg('印表機設定失敗'+#13+e.message,mterror,[mbok],0);

end;

end;

procedure set_xp_little*****;

vardevice: array[0..255] of char;

driver: array[0..255] of char;

port: array[0..255] of char;

hdmode: thandle;

pdmode: pdevmode;

begin

printer.printerindex := printer.printerindex;

printer.getprinter(device, driver, port, hdmode);

if hdmode <> 0 then

begin

pdmode := globallock(hdmode);

if pdmode <> nil then

begin

pdmode^.dmfields := pdmode^.dmfields or

dm_*****size or

dm_formname;

pdmode^.dm*****size :=*****sizenum;//*****sizenum是乙個integer變數,它的取得見下面

pdmode^.dmformname :='qs_little*****';//my*****是我自定義的紙張型別

resetdc(printer.handle,pdmode^);

globalunlock(hdmode);

end;

end;

end;

然後在reoport 中紙張設定default size

在quickrep1.print前執行

find_xp_qs_little;

set_xp_little*****;

就好了.

自定義 如何自定義協議

何為自定義協議,其實是相對標準協議來說的,這裡主要針對的是應用層協議 常見的標準的應用層協議如http ftp smtp等,如果我們在網路通訊的過程中不去使用這些標準協議,那就需要自定義協議,比如我們常用的rpc框架 dubbo,thrift 分布式快取 redis,memcached 等都是自定義...

自定義控制項 自定義鐘錶

private context mcontext 畫筆 private paint mpaint 控制項的寬 private int mwidth x方向的圓心座標 private int center 鐘錶的半徑 private int mradio 圓環的寬 private int stroke...

自定義控制項及自定義屬性

自定義控制項在android開發中的重要性,是不言而喻,眾人皆知的。希望通過這二天的學習,能讓大家了解自定義控制項的原理,熟悉自定義控制項的使用步驟,並能寫出一些普通的效果。內容介紹 1 使用系統控制項,實現自定義的效果,案例有 優酷環形選單 廣告條 viewpager 下拉列表 spinner 2...