畫面列印的怪問題 |
尚未結案
|
kenlee
一般會員 發表:10 回覆:8 積分:3 註冊:2004-04-29 發送簡訊給我 |
我想列印出表單(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 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
geniustom你好:
你的方式先前己有試過,看似有輸出,但實際上輸出到印表機的檔案大小只有1.xKB,也就是一片空白.雖然儲存圖片時,看起來是正常的.. andychang你好:
文章24240的方式應該是Windows比較"正統"的可行方法,但略顯複雜,我想我還是用最偷懶的方式:先存檔 -> 再讀檔 -> 刪除儲存檔
例如:
GetTempFileName("." , "bmp" ,1 ,TpFile); GetBitmap->SaveToFile(TpFile); GetBitmap->LoadFromFile(TpFile); DeleteFile(TpFile); |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |