HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0505
ANTARESグラフィックの印刷0解決


ANTARES

リンク

2008/5/5(Mon) 20:24:34|NO.15668

 ようやく船丸さんの印刷モジュールを動かすことに
成功したので、投稿しときます。

元記事
http://hsp.tv/play/pforum.php?mode=all&num=15112#15419


#include "gdi32.as" #include "comdlg32.as" #module #defcfunc utinscopy int prm1 // // prm1 =1 : 用紙に合わせて拡大・縮小して印刷 // prm1 =0 : そのまま印刷 // mref st,64 dispSizeX=ginfo_winx dispSizeY=ginfo_winy #define HORZRES 8 #define VERTRES 10 #define LOGPIXELSX 88 #define LOGPIXELSY 90 #define PD_RETURNDC $00000100 #define PD_RETURNDEFAULT 0x00000400 #define DM_ORIENTATION 0x00000001;L #define DMORIENT_PORTRAIT 1 #define DMORIENT_LANDSCAPE 2 #define SIZE_PRINTDLG 66 #define SIZE_POINTER 4 #define SIZE_DEVMODE 156 #define lStructSize 0 #define hwndOwner 1 #define hDevMode 2 #define hDevNames 3 #define Flags 5 #define dmFields 10 #define dmOrientation 11 nMode = prm1 : if (nMode<=0)|(nMode>1) : nMode=0 dim pd,int((SIZE_PRINTDLG+3)/4) ;PRINTDLG 構造体 ;用紙の向きのデフォルトを設定する if ginfo_winx>ginfo_winy { orient=DMORIENT_LANDSCAPE ;用紙の向き:横 } else { orient=DMORIENT_PORTRAIT ;用紙の向き:縦 } ;デフォルトプリンタのDEVMODEとDEVNAMESを取得 pd.lStructSize=SIZE_PRINTDLG pd.hwndOwner=hwnd pd.hDevMode=0 pd.hDevNames=0 pd.Flags=PD_RETURNDEFAULT PrintDlg varptr(pd) ret=stat if ret==0: return -3 ;DEVMODE.dmOrientationにorientを設定 dupptr pdevmode, pd.hDevMode, SIZE_POINTER dupptr devmode, pdevmode, SIZE_DEVMODE ;DEVMODE 構造体 if devmode.dmFields & DM_ORIENTATION { ;devmode.dmOrientation:DEVMODE.dmOrientation 〜 DEVMODE.dmPaperSize devmode.dmOrientation=devmode.dmOrientation & $FFFF0000 | orient } ;印刷ダイアログの表示 pd.lStructSize = SIZE_PRINTDLG ;いらないかも pd.hwndOwner = hwnd ;いらないかも pd.Flags = PD_RETURNDC PrintDlg varptr(pd) ret=stat if ret==0 { CommDlgExtendedError st=stat ;↑ユーザーがキャンセルした場合はstatが-1になる return -1 } PDhdc = pd(4) // PrinterHDC ;印刷 pdevcaps=HORZRES,VERTRES,LOGPIXELSX,LOGPIXELSY,LOGPIXELSX,LOGPIXELSY repeat 6 GetDeviceCaps PDhdc, pdevcaps(cnt) prnInfo(cnt)=stat loop SetMapMode PDhdc ,7 SetWindowOrgEx PDhdc, 0,0,0 SetViewportOrgEx PDhdc, 0,0,0 SetWindowExtEx PDhdc, dispSizeX,dispSizeY,0 if nMode=0 { SetViewportExtEx PDhdc, dispSizeX,dispSizeY,0 ScaleViewportExtEx PDhdc, prnInfo(2), prnInfo(4), prnInfo(3), prnInfo(5) } else { SetViewportExtEx PDhdc, prnInfo(0),prnInfo(1),0 } dim dci,5 : pDOCNAME = "HSPDocument": dci= 20,varptr(pDOCNAME) StartDoc PDhdc,varptr(dci) ret=stat if ret<0 { DeleteDC PDhdc : return -2 } StartPage PDhdc BitBlt PDhdc ,0,0,dispSizeX,dispSizeY, hdc, 0,0, $CC0020 EndPage PDhdc : EndDoc PDhdc : DeleteDC PDhdc ;MSDNのPD_RETURNDEFAULTの説明に明記されていないのでやらなかったが、 ;pd.hDevModeとpd.hDevNamesを解放する必要があるかもしれない return 0 #global sdim file,260 dialog "bmp;*.jpg",16 if stat==0: end file=refstr width ,,0,0 picload file ret=utinscopy(1) ;0でなければ失敗 ec=stat ;ret=-1の場合のみ有効 if ret==-1 { if ec!=-1 { ;ユーザがキャンセルしたらstatは-1 dialog "印刷ダイアログエラー。エラーコード="+ec } } else: if ret==-3 { dialog "デフォルトプリンタの情報取得失敗。" } else: if ret { dialog "印刷エラー。StartDoc()失敗。" } end



この記事に返信する


ONION software Copyright 1997-2021(c) All rights reserved.