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

如何使用SavePictureDialog ?

答題得分者是:RaynorPao
wzchen
一般會員


發表:6
回覆:9
積分:3
註冊:2002-12-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-12-19 13:45:14 IP:210.64.xxx.xxx 未訂閱
各位前輩, 我的form上面有quickreport的元件 想利用image->canvas把form上面我要存的畫面存成圖檔 (會超出視窗範圍,沒辦法用抓screen的方式) 不知如何是好,還請各位先進指教^^
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-12-19 13:51:31 IP:203.73.xxx.xxx 未訂閱
引言: 各位前輩, 我的form上面有quickreport的元件 想利用image->canvas把form上面我要存的畫面存成圖檔 (會超出視窗範圍,沒辦法用抓screen的方式) 不知如何是好,還請各位先進指教^^
wzchen 你好: 動態 create 一個 TBitmap 便可完成< > 請參考以下的做法< >
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   Graphics::TBitmap *bmpBuf=new Graphics::TBitmap;       bmpBuf->Width=Form1->ClientWidth;
   bmpBuf->Height=Form1->ClientHeight;
   bmpBuf->Canvas->CopyMode=cmSrcCopy;
   bmpBuf->Canvas->CopyRect(Rect(0, 0, bmpBuf->Width, bmpBuf->Height),
      Form1->Canvas, Rect(0, 0, Form1->ClientWidth, Form1->ClientHeight));
   bmpBuf->SaveToFile("c:\\bmpBuf.bmp");       delete bmpBuf;
}
-- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2002/12/19 13:59:35
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
wzchen
一般會員


發表:6
回覆:9
積分:3
註冊:2002-12-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-12-19 15:06:52 IP:210.64.xxx.xxx 未訂閱
[/quote]    動態 create 一個 TBitmap 便可完成< > 請參考以下的做法< >
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   Graphics::TBitmap *bmpBuf=new Graphics::TBitmap;       bmpBuf->Width=Form1->ClientWidth;
   bmpBuf->Height=Form1->ClientHeight;
   bmpBuf->Canvas->CopyMode=cmSrcCopy;
   bmpBuf->Canvas->CopyRect(Rect(0, 0, bmpBuf->Width, bmpBuf->Height),
      Form1->Canvas, Rect(0, 0, Form1->ClientWidth, Form1->ClientHeight));
   bmpBuf->SaveToFile("c:\\bmpBuf.bmp");       delete bmpBuf;
}
-- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2002/12/19 13:59:35 [/quote] RaynorPao, 謝謝你的方法, 然而超出form的範圍卻抓不到 我的螢幕解析度為800*600 我想抓的表格卻有816*1056 超過form的範圍了 可以教一下嗎, 謝謝^^
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-12-19 15:14:05 IP:203.73.xxx.xxx 未訂閱
引言: 謝謝你的方法, 然而超出form的範圍卻抓不到 我的螢幕解析度為800*600 我想抓的表格卻有816*1056 超過form的範圍了 可以教一下嗎, 謝謝^^
wzchen 你好: 能夠把解析度調高嗎?? --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
wzchen
一般會員


發表:6
回覆:9
積分:3
註冊:2002-12-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-12-19 15:22:57 IP:210.64.xxx.xxx 未訂閱
引言: wzchen 你好: 能夠把解析度調高嗎?? < face="Verdana, Arial, Helvetica"> ㄟ... 我是用15"小螢幕... 視力又不太好..... so...... 另外,那個copymode的功能是? 好像跟source無關? 我是做個quickreport 要把這個report存起來 所以長度就太長了 想說用image把它框起來就可以處理了.... 無奈功力不足, 多謝你啦
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-12-19 15:32:08 IP:203.73.xxx.xxx 未訂閱
引言: 另外,那個copymode的功能是? 好像跟source無關?
wzchen 你好: 建議你查詢 bcb help 有關 TCanvas 的 property & method ... 很有用的喔 --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
wzchen
一般會員


發表:6
回覆:9
積分:3
註冊:2002-12-02

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-12-20 10:56:26 IP:210.64.xxx.xxx 未訂閱
RaynorPao , 我後來有查了一下CANVAS的properties and methods 好像只有COPYRECT可以使用來把CANVAS框起來 我想說那用切割複製再拼起來好了 第一個區塊是沒有問題 然而我一設定HorzScrollBar->Position的位置 第二個區塊(在第一區塊的右邊)會發生重疊的問題 座標如下 shift=x2-x1 rect(x1,y1,x2,y2),rect(x1 shift,y1,x2 shift,y2) 這個區塊後面(最右邊)會重複到前面的圖像 可是第二區接續第一區的地方又很完整的接續到了 這是HorzScrollBar的關係嗎 我也試過垂直的shift 也會發生同樣的事情
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-12-20 11:13:51 IP:203.73.xxx.xxx 未訂閱
引言: RaynorPao , 我後來有查了一下CANVAS的properties and methods 好像只有COPYRECT可以使用來把CANVAS框起來 我想說那用切割複製再拼起來好了 第一個區塊是沒有問題 然而我一設定HorzScrollBar->Position的位置 第二個區塊(在第一區塊的右邊)會發生重疊的問題 座標如下 shift=x2-x1 rect(x1,y1,x2,y2),rect(x1 shift,y1,x2 shift,y2) 這個區塊後面(最右邊)會重複到前面的圖像 可是第二區接續第一區的地方又很完整的接續到了 這是HorzScrollBar的關係嗎 我也試過垂直的shift 也會發生同樣的事情
wzchen 你好: 假設你的 Form1 的 ClientWidth 及 Client Height 分別為 (800, 800) (而你要截取的圖形貼滿了這個範圍) 如果分 4 次截取的話~~應該是像這樣吧(你自己要試試看) < class="code"> Graphics::TBitmap *bmpBuf=new Graphics::TBitmap; bmpBuf->Width=800; bmpBuf->Height=800; bmpBuf->Canvas->CopyMode=cmSrcCopy; bmpBuf->Canvas->CopyRect(Rect(0, 0, 400, 400), Form1->Canvas, Rect(0, 0, 400, 400)); bmpBuf->Canvas->CopyRect(Rect(401, 0, 800, 400), Form1->Canvas, Rect(401, 0, 800, 400)); bmpBuf->Canvas->CopyRect(Rect(0, 401, 400, 800), Form1->Canvas, Rect(0, 401, 400, 800)); bmpBuf->Canvas->CopyRect(Rect(401, 401, 800, 800), Form1->Canvas, Rect(401, 401, 800, 800)); bmpBuf->SaveToFile("c:\\bmpBuf.bmp"); delete bmpBuf; 備註: 以上的 sample code 我並沒有實際 compile 及 run 過 麻煩你自己驗證一下吧 --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
wzchen
一般會員


發表:6
回覆:9
積分:3
註冊:2002-12-02

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-12-20 15:50:46 IP:210.64.xxx.xxx 未訂閱
hi, 後來我把canvas refresh過就正常啦 多謝~~~~ 不過怎麼好像refresh過之後 還要多等一點點時間才可以capture起來ㄚ 要不然會有殘影 我之前的狀況應該叫殘影吧
系統時間:2024-04-26 13:27:48
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!