请教sendmessage用法? |
尚未結案
|
xxiaowang
中階會員 ![]() ![]() ![]() 發表:51 回覆:75 積分:55 註冊:2005-01-26 發送簡訊給我 |
我用下面这个FUNCTION,修改了纸张后,却不能立即生效,只有退出程序再启动才生效,用sendMessage(HWND_BROADCAST,WM_WININICHANGE,0,0)也没用,小弟不才,请前辈指教,谢谢!我用的是win2k delphi7 Function TDM.changepaper(Psize:string):Boolean;
var
FormInfos : Array [1..1024] of Form_Info_1;
cbNeeded, cReturned ,neededsize: DWORD;
i,j:integer;
ppo:PRINTER_INFO_2;
dev :PDeviceMode;
begin
EnumForms(hPrinter, 1, Nil, 0, cbNeeded, cReturned);
EnumForms(hPrinter, 1, @FormInfos, cbNeeded, cbNeeded, cReturned );
j := 0;
for i:= 1 to cReturned do
if FormInfos[i].pName = Psize then j:=i;
GetPrinter(hPrinter,2,Nil, 0, @NeededSize);
GetPrinter(hPrinter, 2, @ppo, NeededSize, @NeededSize);
dev := ppo.pDevMode;
dev.dmPaperSize := j;
ppo.pDevMode := dev;
SetPrinter(hPrinter,2,@ppo,0);
Result := True;
end;
|
Vicen
高階會員 ![]() ![]() ![]() ![]() 發表:13 回覆:145 積分:151 註冊:2005-03-14 發送簡訊給我 |
procedure SetPaperSize(X, Y: Integer); // 这段代码绝对可用。单位是0.1mm // A4时 Printer.Pagewidth:=1440; A5时 Printer.Pagewidth:=1049; // B5时 Printer.Pagewidth:=1290; 16K时 Printer.Pagewidth:=1035; // lq1600宽行打印机这个值宽度最大为42cm左右, 长度大约2m。 //改变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; Printer.PrinterIndex := Printer.PrinterIndex; //以下开始打印 end;發表人 - vicen 於 2005/03/19 13:17:09 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |