全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:861
推到 Plurk!
推到 Facebook!

請問在winxp 和win98 下自訂報表尺寸的問題??

尚未結案
sawwewwe
一般會員


發表:6
回覆:10
積分:3
註冊:2004-06-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-06-08 14:03:58 IP:211.22.xxx.xxx 未訂閱
我參考 http://delphi.ktop.com.tw/topic.php?topic_id=237 下所說的程式設定抓取預設的印表機然後去更改他的報表尺寸, 我在win98下預覽正確查詢印表機的狀態,尺寸也有改為我所設定的尺寸, 但是列印出來卻不正確 而在winxp下其印表機狀態尺寸並未更改,我有在印表機伺服器中新增新的尺寸名稱,而程式中也指到那個名稱去,可是就是沒有改變 請問還有方法可解決嗎?? 我已困擾了好久, 謝謝喔
conundrum
尊榮會員


發表:893
回覆:1272
積分:643
註冊:2004-01-06

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-06-09 00:27:52 IP:61.64.xxx.xxx 未訂閱
sawwewwe 網友你好 只有一句話 請仔細看一部一部做 因為 98沒有你說的問題 如果有 那再dos下列印都可能變天了 xp 2000 2003 等才有可能如你說問題 但解法KTOP都有po 不然你再看看把 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=51363 如果是你自己程式問題 或特殊小於或大於 印表機支援紙張 那是硬體問題 如 長3.5cm寬7.0cm這種小於10cm是一般印表機不支援的 類似手型熱感印裝置
sawwewwe
一般會員


發表:6
回覆:10
積分:3
註冊:2004-06-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-06-09 09:45:04 IP:211.22.xxx.xxx 未訂閱
我貼上我的程式碼~~請指教一下~~是否那裡有錯~~~謝謝 function GetDefaultPrinter: string; var ResStr: array[0..255] of Char; S,I:integer; dPrinter:string; begin GetProfileString('Windows', 'device', '', ResStr, 255); S := Length(StrPas(ResStr)); For I := 1 to S do begin if Copy(StrPas(ResStr),I,1) <> ',' then dPrinter := dPrinter Copy(StrPas(ResStr),I,1) else Break; end; Result := dPrinter; end; // 自動設定紙張大小程式 procedure TForm1.Button6Click(Sender: TObject); var _PPrinterInfo2 : PPrinterInfo2; pPrinterName : PChar; sPrinterName, sFormName : String; hPrinter : THandle; cbNeeded : DWORD; dwBufferSize : DWORD; begin sFormName := '使用者定義大小'; sPrinterName := GetDefaultPrinter; // 取得預設印表機名稱 // 設定印表機的紙張大小名稱 if not WinSpool.OpenPrinter(PChar(sPrinterName), hPrinter, nil) then raise Exception.Create('OpenPrinter Error, Code : ' IntToStr (GetLastError)); WinSpool.GetPrinter(hPrinter, 2, nil, 0, @cbNeeded); _PPrinterInfo2 := nil; try GetMem(_PPrinterInfo2, cbNeeded); WinSpool.GetPrinter(hPrinter, 2, _PPrinterInfo2, cbNeeded, @cbNeeded); with _PPrinterInfo2^.pDevMode^ do begin StrLCopy(dmFormName, PChar(sFormName), CCHFORMNAME -1); //dmPaperSize := PaperSizeID(sPrinterName, sFormName); dmFields := DM_FORMNAME; // DM_PAPERSIZE end; // 不知為何 SetPrinter 一定會有錯誤 -> GetLastError //ERROR_ACCESS_DENIED // (即使以 Administrator 身份執行), 所以先把 raise 註解掉, //Who could explain it for me ? Thanks. if not WinSpool.SetPrinter(hPrinter, 2, _PPrinterInfo2, 0) then ; //raise Exception.Create('SetPrinter Error, Code : ' IntToStr(GetLastError)); finally if _PPrinterInfo2 <> nil then FreeMem(_PPrinterInfo2); _PPrinterInfo2 := nil; end; end; 之後就是有問題,我發現在執行過一次後,控制台裡印表機裡的試張選項就不見了所以沒辦法選擇,請問我是那裡做錯了~~謝謝 發表人 - sawwewwe 於 2004/06/09 10:02:09
fadichen
初階會員


發表:29
回覆:68
積分:29
註冊:2003-09-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-06-10 23:29:08 IP:61.230.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=50529 中有一個檔案 chapter10.pdf 請參考看看 1.win 98 其實設定好印表機, 及 QuickReport 就好了 簡單的方法先用, 複雜的再慢慢研究. ****阿彌陀佛*****
sawwewwe
一般會員


發表:6
回覆:10
積分:3
註冊:2004-06-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-06-23 10:22:53 IP:211.22.xxx.xxx 未訂閱
謝謝大家的回答~~ 我根據原本的程式加以更改~ 現在已可以設定了~~
系統時間:2024-05-08 4:50:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!