請問如何才能知道印表機是否有支援自訂紙張大小的格式呢? |
尚未結案
|
SKYSTAR
中階會員 發表:76 回覆:198 積分:64 註冊:2002-06-10 發送簡訊給我 |
|
qoo1234
版主 發表:256 回覆:1167 積分:659 註冊:2003-02-24 發送簡訊給我 |
//取得印表機的紙張格式列表
uses WinSpool,Printers; .... procedure GetPaperFormats(ComboBoxTmp:TComboBox;PrinterName:String); type TPaperName = array[0..63] of Char; TPaperNameArray = array[1..256] of TPaperName; FPapernameArray = ^TPaperNameArray; var i, numPaperformats: Integer; pPaperFormats: FPapernameArray; PrinterHandle: THandle; begin OpenPrinter(PChar(PrinterName), PrinterHandle, nil); numPaperformats :=WinSpool.DeviceCapabilities(PChar(PrinterName), 'LPT1', DC_PAPERNAMES, nil, nil); if numPaperformats > 0 then begin GetMem(pPaperformats,numPaperformats * Sizeof(TPapername)); try WinSpool.DeviceCapabilities(PChar(PrinterName), 'LPT1', DC_PAPERNAMES,Pchar(pPaperFormats), nil); ComboBoxTmp.clear; for i := 1 to numPaperformats do ComboBoxTmp.Items.Add(pPaperformats^[i]); finally FreeMem(pPaperformats); end; end; end; //取得已安裝的印表機名稱列表 procedure TForm1.FormShow(Sender: TObject); begin ComboBox1.items:= printer.printers; end; //取得印表機的紙張格式列表 procedure TForm1.ComboBox1Change(Sender: TObject); begin if ComboBox1.Text<>'' then GetPaperFormats(ComboBox2,ComboBox1.Text); end;網海無涯,學無止境! |
qoo1234
版主 發表:256 回覆:1167 積分:659 註冊:2003-02-24 發送簡訊給我 |
|
SKYSTAR
中階會員 發表:76 回覆:198 積分:64 註冊:2002-06-10 發送簡訊給我 |
您好: 謝謝您的回答!! 先補充一下,您所提供的程式,有三個相同的地方,可能要稍稍修改一下,否則好
像會抓不到紙張的大小清單! 原因好像是印表機的全名,因為會加上 On LPT1:
,共九個字元,所以我就改成了以下紅色的部份,就沒有問題了!!
引言: //取得印表機的紙張格式列表另外可否再次請教: 因為每一台印表機的自訂紙張格式所傳回的文字: 有的是 : 使用者自訂大小 有的是 : 使用者定義大小 等等...都不太相同.... 因為曾在WINAPI看過,好像可以傳回相對的數值... 如: A4 ---> 傳回 9 如: 自訂紙張 ---> 傳回 256 所以想請教一下....在Delphi中要如何傳回這些紙張的相對應之數值呢? Thanks!!uses WinSpool,Printers; .... procedure GetPaperFormats(ComboBoxTmp:TComboBox;PrinterName:String); type TPaperName = array[0..63] of Char; TPaperNameArray = array[1..256] of TPaperName; FPapernameArray = ^TPaperNameArray; var i, numPaperformats: Integer; pPaperFormats: FPapernameArray; PrinterHandle: THandle; begin OpenPrinter(PChar(Copy(PrinterName,1,Length(PrinterName)-9)), PrinterHandle, nil); numPaperformats :=WinSpool.DeviceCapabilities(PChar(Copy(PrinterName,1,Length(PrinterName)-9)), 'LPT1', DC_PAPERNAMES, nil, nil); if numPaperformats > 0 then begin GetMem(pPaperformats,numPaperformats * Sizeof(TPapername)); try WinSpool.DeviceCapabilities(PChar(Copy(PrinterName,1,Length(PrinterName)-9)), 'LPT1', DC_PAPERNAMES,Pchar(pPaperFormats), nil); ComboBoxTmp.clear; for i := 1 to numPaperformats do ComboBoxTmp.Items.Add(pPaperformats^[i]); finally FreeMem(pPaperformats); end; end; end; //取得已安裝的印表機名稱列表 procedure TForm1.FormShow(Sender: TObject); begin ComboBox1.items:= printer.printers; end; //取得印表機的紙張格式列表 procedure TForm1.ComboBox1Change(Sender: TObject); begin if ComboBox1.Text<>'' then GetPaperFormats(ComboBox2,ComboBox1.Text); end;網海無涯,學無止境! |
qoo1234
版主 發表:256 回覆:1167 積分:659 註冊:2003-02-24 發送簡訊給我 |
請參考 DEVMODE API部分有詳細資料與Windows.pas單元
http://www.scalabium.com/faq/dct0019.htm
http://www.scalabium.com/faq/dct0020.htm example:
procedure SetPrinterSettings(FPrinter: TPrinter); var FDevice: PChar; FDriver: PChar; FPort: PChar; DeviceMode: THandle; DevMode: PDeviceMode; begin {to get a current printer settings} FPrinter.GetPrinter(FDevice, FDriver, FPort, DeviceMode); {lock a printer device} DevMode := GlobalLock(DeviceMode); {set a paper size as A4-Transverse} if ((DevMode^.dmFields and DM_PAPERSIZE) = DM_PAPERSIZE) then begin DevMode^.dmFields := DevMode^.dmFields or DM_PAPERSIZE; DevMode^.dmPaperSize := DMPAPER_A4_TRANSVERSE; end; {set a paper source as Tractor bin} if ((DevMode^.dmFields and DM_DEFAULTSOURCE) = DM_DEFAULTSOURCE) then begin DevMode^.dmFields := DevMode^.dmFields or DM_DEFAULTSOURCE; DevMode^.dmDefaultSource := DMBIN_TRACTOR; end; {set a Landscape orientation} if ((DevMode^.dmFields and DM_ORIENTATION) = DM_ORIENTATION) then begin DevMode^.dmFields := DevMode^.dmFields or DM_ORIENTATION; DevMode^.dmOrientation := DMORIENT_LANDSCAPE; end; {set a printer settings} FPrinter.SetPrinter(FDevice, FDriver, FPort, DeviceMode); {unlock a device} GlobalUnlock(DeviceMode); end;網海無涯,學無止境! 發表人 - qoo1234 於 2004/03/01 18:41:58 發表人 - qoo1234 於 2004/03/01 18:53:58 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |