VB6 系統列印常識

2022-01-12 18:12:47 字數 3109 閱讀 5758

在一次做列印的時候,對位置的調整老是不得法,後來通過cbm666老師的幫助才解決問題,分享以下他給的幫助。

'其中pic:為物件, 如圖形框picture等;

'destx,desty:目標影象位置;

'destwidth,destheight:目標影象尺寸;

'scrx,scry:原影象的裁剪座標;

'scrwidth,scrheight:原影象的裁剪尺寸;

printer.paintpicture pica.picture, 200, 200, pica.width /

2, pica.height /

2printer.enddoc

'vb 列印

privatesubcommand1_click()

onerrorgotoerr1

ifpicture1.picture <> loadpicture("")then

printer.paintpicture picture1.picture, 200, picture1.top + 1000

'列印else

msgbox "沒有可列印的", 16, "提示"

endif

printer.enddoc  '列印結束

exitsub

err1:

msgbox err.description, 16, "提示"

'錯誤處理

endsub

【屬性匹配與窗體縮放】

因為控制印表機實際繪圖區域大小的屬性height和width,由目前正在使用的紙張決定,而且可列印的區域與紙張邊緣有一定距離。因而為了獲得正確的列印輸出結果,不能簡單地將printer物件直接傳遞給繪圖例行程式,還必須要解決印表機的縮放屬性與顯示窗體屬性相匹配的問題。即:保證使窗體中的列印內容以正確的大小顯示,並居於可列印區域的中間。實際上實現的是印表機的座標體系向螢幕座標體系的轉換。具體過程是:使用印表機的scalex和scaley方法,獲取以twip為單位的印表機尺寸,再利用窗體的scalex和scaley方法將這些尺寸轉換為窗體中的座標系統,從而實現以窗體的座標系統提供印表機可列印區域大小的目的。然後,用這些尺寸作為印表機中新的scalewidth和scaleheight,即可實現屬性匹配。

但是,我們在列印時,經常會遇到這樣的場合——在不改變窗體形狀的情況下,需要擴大或縮小窗體的大小。要完成這樣的工作,不僅需要完成屬性匹配,還要確定物件被縮放的係數。程式如下:

privatesubsetprinterscale(objasobject)

dimpwidassingle, phgtassingle, xmidassingle, ymidassingle

dimowidassingle, ohgtassingle

owid = obj.scalex(obj.scalewidth, obj.scalemode, vbtwips)

ohgt = obj.scaley(obj.scaleheight, obj.scalemode, vbtwips)

'獲取窗體以twips表示的尺寸

pwid = printer.scalex(printer.scalewidth, printer.scalemode, vbtwips)

phgt = printer.scaley(printer.scaleheight, printer.scalemode, vbtwips)

'獲取印表機以twips表示的尺寸

if(ohgt / owid > phgt / pwid)then

s = phgt / ohgt

else

s = pwid / owid

endif『'計算縮放因子

pwid = obj.scalex(pwid, vbtwips, obj.scalemode) / s

phgt = obj.scaley(phgt, vbtwips, obj.scalemode) / s

'將印表機的尺寸轉換成obj的座標系統 / 縮放因子

x_mid = obj.scaleleft + obj.scalewidth /

2y_mid = obj.scaletop + obj.scaleheight /

2'設定列印區域的中心點座標

printer.scale (x_mid - pwid /

2, y_mid - phgt /

2)-(x_mid + pwid /

2, y_mid + phgt /

2)'設定印表機中新的scalewidth和scaleheight

endsub

VB6技巧 總結

vb設定多行textbox的位置 由於自動輸入的文字比較多,最後輸入的跑到下面了,想要自動滾動到下面,本來以為 操作滾動條呢,但是沒有方法。於是我巧妙的採用了 顯示列表是設定了乙個多行 的 textbox 顯示列表.selstart len 顯示列表.text 1 顯示列表.sellength 1 ...

vb6 讀寫檔案

write file dim nhandle as integer,fname as string fname d 1.txt nhandle freefile open fname for output as nhandle print nhandle,0 print nhandle,2 clos...

vb6中的hook技術

public declare function setwindowshookex lib user32 alias setwindowshookexa byval idhook as long,byval lpfn as long,byval hmod as long,byval dwthreadi...