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

程式自動產生列表機列印紙張設定

答題得分者是:chris681016
jimmy_wei
高階會員


發表:9
回覆:176
積分:147
註冊:2003-08-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-12-26 13:39:05 IP:123.194.xxx.xxx 訂閱
各位大大好:
我想要用程式自動產生一個使用者自定的紙章設定(A4、A5、Letter......等)我要自訂一個非標準的。
有辦法嗎??

參考過一些站內的文章
http://delphi.ktop.com.tw/board.php?cid=30&fid=71&tid=26727

http://delphi.ktop.com.tw/board.php?cid=30&fid=100&tid=83474
等等等....

感恩~~
chris681016
中階會員


發表:69
回覆:122
積分:98
註冊:2006-10-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-12-29 09:32:26 IP:211.75.xxx.xxx 訂閱
我用下列方式變更紙張,不知道對你有沒有用

function VrSet(VR_Size,is_os:string; Print1: TPrinter):string;
var Driver,Device,Port: array[0..512] of Char;
hDev: THandle; // DeviceMode結構體的記憶體Handle
pDev: PDEVICEMODE; // 對DeviceMode結構體的Pointer
hPrn: THandle; // 印表機的Handle
paper_num,Driver_name:string;
hPrinter : THandle;
begin
Print1.GetPrinter(Device, Driver, Port, hDev);
pDev := GlobalLock(hDev);
try
if (pDev.dmFields and DM_PAPERSIZE) <> 0 then
begin
pDev.dmPaperSize :=StrToInt(paper_num); //紙張編號,a4的話一定是9,letter一定是1,其它大小可用函數去抓
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;
Print1.SetPrinter(Device, Driver, Port, hDev);
end;
jimmy_wei
高階會員


發表:9
回覆:176
積分:147
註冊:2003-08-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-01-06 12:05:35 IP:123.194.xxx.xxx 訂閱
您給的方法,是自動選擇已設定的紙張格式,我現在想要做的是,自動產生一個新的紙張格式,加到window裡的設定裡
chris681016
中階會員


發表:69
回覆:122
積分:98
註冊:2006-10-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-01-07 09:31:38 IP:211.75.xxx.xxx 訂閱
  Printer.GetPrinter(PrintDevice, PrintDriver, PrintPort, hDMode);
OpenPrinter(PrintDevice, hPrinter, nil);
if hPrinter = 0 then
raise Exception.Create('找不到印表機!');
with FormInfo do
begin
Flags := FORM_USER;
pName:= PChar(Trim(Edit1.Text)); //紙張名稱
Size.cx := StrToInt(trim(Edit2.Text))*100; //寬
Size.cy := StrToInt(trim(Edit3.Text))*100; //高
ImageableArea.Left := 0;
ImageableArea.Top := 0;
ImageableArea.Right:=StrToInt(trim(Edit2.Text))*100;
ImageableArea.Bottom :=StrToInt(trim(Edit3.Text))*100;
end;
jimmy_wei
高階會員


發表:9
回覆:176
積分:147
註冊:2003-08-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-01-07 11:51:59 IP:123.194.xxx.xxx 訂閱
chris您好~~
看起來~~這一段程式確實是設定紙張格式的程式,但有些地方我不明白

Printer.GetPrinter(PrintDevice, PrintDriver, PrintPort, hDMode);
OpenPrinter(PrintDevice, hPrinter, nil);

1.printer是不是要先create ==> printer:= Tprinter.create ??
2.printers這個unit下,確實有getprinter這個 procedure,而WinSpool下也有openprinter,
但我是不要先宣告或給值,還是我只要宣告PrintDevice, PrintDriver, PrintPort, hDMode
就可以,當然PrintDevice, hPrinter也是一樣的情形
with FormInfo do
3.FormInfo是什麼,一個你宣告的元件or是form,我不太明白
4.承上一個問題,以下的屬性,是您自行宣告的嗎??還是那個元件的屬性
Flags := FORM_USER;
pName:= PChar(Trim(Edit1.Text)); //紙張名稱
Size.cx := StrToInt(trim(Edit2.Text))*100; //寬
Size.cy := StrToInt(trim(Edit3.Text))*100; //高
ImageableArea.Left := 0;
ImageableArea.Top := 0;
ImageableArea.Right:=StrToInt(trim(Edit2.Text))*100;
ImageableArea.Bottom :=StrToInt(trim(Edit3.Text))*100;

以上


chris681016
中階會員


發表:69
回覆:122
積分:98
註冊:2006-10-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-01-07 15:28:06 IP:211.75.xxx.xxx 訂閱
給你完整的程式碼,其實我也是看別人的啦,不過忘了參考那的
一般沒有特別指定Printer就會抓預設的那個。
procedure TForm1.Button1Click(Sender: TObject);
var
PrintDevice, PrintDriver, PrintPort : array[0..255] of Char;
hDMode : THandle;
hPrinter : THandle;
FormInfo : TFormInfo1;
begin

Printer.GetPrinter(PrintDevice, PrintDriver, PrintPort, hDMode);
OpenPrinter(PrintDevice, hPrinter, nil);
if hPrinter = 0 then
raise Exception.Create('找不到印表機!');

with FormInfo do
begin
Flags := FORM_USER;
pName:= PChar(Trim(Edit1.Text));
Size.cx := StrToInt(trim(Edit2.Text))*100;
Size.cy := StrToInt(trim(Edit3.Text))*100;
ImageableArea.Left := 0;
ImageableArea.Top := 0;
ImageableArea.Right:=StrToInt(trim(Edit2.Text))*100;
ImageableArea.Bottom :=StrToInt(trim(Edit3.Text))*100;
end;
//檢查新增紙張是否重覆
if not SetForm(hPrinter, PChar(Trim(Edit1.Text)), 1, @FormInfo) then
begin
AddForm(hPrinter, 1, @FormInfo);
ShowMessage('Success');
end
else ShowMessage('Repeat Page_Nme');
ClosePrinter(hPrinter);
end;
系統時間:2024-11-23 0:15:46
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!