線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1318
推到 Plurk!
推到 Facebook!

畫面列印的怪問題

尚未結案
kenlee
一般會員


發表:10
回覆:8
積分:3
註冊:2004-04-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-20 14:04:57 IP:61.219.xxx.xxx 未訂閱
我想列印出表單(Form1)的畫面,但用下面程式碼的方式雖有列印動作,但實際上卻無輸出任何圖形(空白),但是如果先將表單上的畫面儲存後再讀取,就可列印出畫面?兩者皆將最後輸出畫面存檔後,以圖像軟體看到的畫面卻相同(但由Win200的[內容][摘要]到的資訊卻不相同)??請問要如何在不讀/存檔的條件下,直接列印表單上的指定區域?
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Graphics::TBitmap *Bmp = new Graphics::TBitmap();
    TRect  ImgRect, PrintRect;
    int Left, Top;        // 若不先執行此行,則列印輸出為空白 //
//    Bmp->LoadFromFile("C:\\Sp\\sky.bmp");        Bmp->Width = 800;
    Bmp->Height = 600;
    Bmp->Canvas->CopyRect(Rect(0,0,800,600), Form1->Canvas, Rect(0,0,320,240));
    Left = (Printer()->PageWidth - Bmp->Width*4) / 2;
    Top =(Printer()->PageHeight - Bmp->Height*4) / 2;
    ImgRect= Rect(0, 0, Bmp->Width, Bmp->Height);
    PrintRect = Rect(10, 10, Left   Bmp->Width*4, Top   Bmp->Height*4);        Printer()->BeginDoc();
    Printer()->Canvas->CopyRect(PrintRect, Bmp->Canvas, ImgRect);
    // 測試輸出的結果 //
    Bmp->SaveToFile("C:\\Output.bmp");
    Printer()->EndDoc();
    delete Bmp;
}
geniustom
版主


發表:100
回覆:303
積分:260
註冊:2003-01-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-27 19:50:27 IP:219.68.xxx.xxx 未訂閱
kenlee您好..用以下的方法比較直接..也比較簡單.. < class="code"> Graphics::TBitmap*Bmp1=new Graphics::TBitmap(); TCanvas *MyCanvas= new TCanvas; TRect rect = Form1->ClientRect; HDC dc = GetDC(Form1->Handle); MyCanvas->Handle = dc; Bmp1->Width = rect.Right - rect.Left; Bmp1->Height = rect.Bottom - rect.Top; Bmp1->Canvas->CopyRect(rect,MyCanvas,rect); 寫下您的PRINT程式區段 delete MyCanvas; delete Bmp1; 這樣就能順利的從記憶體取得FORM1的畫面了
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-28 01:58:18 IP:221.169.xxx.xxx 未訂閱
kenlee:你要的TBitmap不讀/存檔的條件下直接列印!不太簡單。 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=24240 【問題】請問列印StringGrid的問題~~ 答題得分者為:william 請注意RaynorPao 版大的範例將StringGrid1改成Form1試試! 另提供比較簡單的方式: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=51967 【問題】使用TPrinter印的內容有沒有辦法預覽? 答題得分者為:Fishman 雖然是Delphi,但裡面提到一種方式就是 QuickReport 上放個 QRImage 然後,在該 QRImage1 畫上你要的東西,再進行Preview或Print 請參考! Andy Chang
------
Andy Chang
kenlee
一般會員


發表:10
回覆:8
積分:3
註冊:2004-04-29

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-28 10:28:59 IP:61.219.xxx.xxx 未訂閱
geniustom你好: 你的方式先前己有試過,看似有輸出,但實際上輸出到印表機的檔案大小只有1.xKB,也就是一片空白.雖然儲存圖片時,看起來是正常的..    andychang你好: 文章24240的方式應該是Windows比較"正統"的可行方法,但略顯複雜,我想我還是用最偷懶的方式:先存檔 -> 再讀檔 -> 刪除儲存檔 例如:
     GetTempFileName("." , "bmp" ,1 ,TpFile);
     GetBitmap->SaveToFile(TpFile);
     GetBitmap->LoadFromFile(TpFile);
     DeleteFile(TpFile);
系統時間:2024-05-19 8:07:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!