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

请教sendmessage用法?

尚未結案
xxiaowang
中階會員


發表:51
回覆:75
積分:55
註冊:2005-01-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-16 15:51:06 IP:218.17.xxx.xxx 未訂閱
我用下面这个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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-19 13:15:57 IP:221.226.xxx.xxx 未訂閱
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
系統時間:2024-07-01 5:18:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!