老問題:設定紙張大小的問題 |
尚未結案
|
RootKit
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:16 回覆:358 積分:419 註冊:2008-01-02 發送簡訊給我 |
使用 AddForm 方式增加一個紙張格式。
我測試結果在 Windows2000/NT 可以,並且可在紙張列表中找到該新增的紙張名稱。 而在 Windows XP 卻不行。在「印表機與傳真」->「檔案」->「伺服器內容」有看見該紙張格式 但在DeviceCapabilities 紙張列表中卻找不到。 Why ? 另外,我用以下函數在 Win200/XP 都沒問題。好像看過有人反應不支援 Win2000/NT 覺得有些疑惑。 [code delphi] procedure SetPaperSize(X, Y: Integer); // 單位是0.1mm //改變devicemode結構 var Device: 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 if (x = 0) or (y = 0) then begin {Set to legal} pDMode^.dmFields := pDMode^.dmFields or dm_PaperSize; {pDMode^.dmPaperSize := DMPAPER_LEGAL; changed by wulianmin} pDMode^.dmPaperSize := DMPAPER_FANFOLD_US; end else begin {Set to custom size} pDMode^.dmFields := pDMode^.dmFields or DM_PAPERSIZE or DM_PAPERWIDTH or DM_PAPERLENGTH; pDMode^.dmPaperSize := DMPAPER_USER; pDMode^.dmPaperWidth := x {SomeValueInTenthsOfAMillimeter}; pDMode^.dmPaperLength := y {SomeValueInTenthsOfAMillimeter}; end; {Set the bin to use} pDMode^.dmFields := pDMode^.dmFields or DMBIN_MANUAL; pDMode^.dmDefaultSource := DMBIN_MANUAL; GlobalUnlock(hDMode); end; end; end; [/code] |
chris681016
中階會員 ![]() ![]() ![]() 發表:69 回覆:122 積分:98 註冊:2006-10-12 發送簡訊給我 |
|
RootKit
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:16 回覆:358 積分:419 註冊:2008-01-02 發送簡訊給我 |
在 XP 抓不到。我試了三款印表機都不行。有噴墨、雷射 ... 共用或本地都一樣。
AddForm ....正確。 在伺服器內容都看的到該格式。 唯有 XP 看得到卻無法使用。.... 不清楚原因 紙張大小下拉列表也不會多一列。 測試在 Win2000/Win 7 都會新增一行在紙張大小列。既使我用手Key進去也一樣。 另一種方法: 我使用「自訂大小」dmPaperSize = DMPAPER_USER Devicemode 方式 在 Win2000 / XP/ Win 7 都可以。 重點!我查網路都說這種方法僅適用在 Win9x/ME 真是不瞭... ===================引 用 chris681016 文 章=================== 您是說新增了一個自訂的紙張格式,在2000系統上印表機抓的到,在xp會抓不到嗎? 兩台電腦都用相同的印表機嗎?因為雷射跟噴墨有些並不支援自訂。 如果印表機是用分享,有時印表機那端,和要印的那端好像都要新增相同的紙張格式,有時好像會抓印表機那端的樣子。 那如果用手動新增,不要用addfrom 會正常嗎?~~~~~
編輯記錄
RootKit 重新編輯於 2010-05-10 20:59:34, 註解 無‧
|
chris681016
中階會員 ![]() ![]() ![]() 發表:69 回覆:122 積分:98 註冊:2006-10-12 發送簡訊給我 |
一般如果RUN程式抓不到我會到,「印表機和傳真」選則要列印的印表機,進去看「內容」,到「裝置管理員」裡的紙匣設定,
看是否本身印表驅動程式就可以抓的到,如果這樣看都抓不到我想因該不支援吧,我是這樣。 我設定紙張是這樣寫 paper_num:=Get_Default_PSize('8.27x11'); //會傳回設定紙張的代號一個函數,例如A4一定是9,LETTER一定是1 Printer.PrinterIndex := -1; Printer.GetPrinter(Device, Driver, Port, hDev); pDev := GlobalLock(hDev); try if (pDev.dmFields and DM_PAPERSIZE) <> 0 then begin pDev.dmPaperSize :=StrToInt(paper_num); pDev.dmFields := pdev.dmFields and not (DM_PAPERWIDTH or DM_PAPERLENGTH); end; Win32Check(OpenPrinter(Device, hPrn, Nil)); try // 將印表機設定與預設值合併 Win32Check(DocumentProperties(0, hPrn, Device, pDev^, pDev^, DM_COPY or DM_MODIFY) >= 0); finally ClosePrinter(hPrn); end; finally GlobalUnlock(hDev); end; Printer.SetPrinter(Device, Driver, Port, hDev); 一般我遇到的都是印表機本身沒有支援,XP,或2000千都可以。 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |