複製TPanel的內容到剪貼簿 |
答題得分者是:RaynorPao
|
nekocat
一般會員 發表:8 回覆:7 積分:3 註冊:2002-03-13 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 請問各位大大: 我在一個TPanel中放了九個TChart, 我想一次把九張圖Copy到剪貼簿, 這要怎麼做比較好呢!? 因為這個TPanel的範圍並不是整個畫面或整個TForm, 那是否應該使用DC然後限定Clip的區域? 還是有其他的方法? TPanel要如何抓絕對座標呢!? 再者,如果這個TPanel的大小超過整個螢幕, 有辦法Copy這個TPanel的影像嗎!? 謝謝大家... nekocat 你好: (1)據小弟我所知,超過螢幕大小的話,是沒有辦法一次抓得到的 (2)曾經有人遇過跟你類似的問題,可以利用位移及 CopyRect 來解決 (3)請參考以下的連結文章(BCB 版),麻煩你自己改成 Delphi 的吧 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=24065 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=24271-- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
|
nekocat
一般會員 發表:8 回覆:7 積分:3 註冊:2002-03-13 發送簡訊給我 |
|
nekocat
一般會員 發表:8 回覆:7 積分:3 註冊:2002-03-13 發送簡訊給我 |
結合RaynorPao和timhuang大大的方法就可以Copy任何大小的TPanel了!
Pool_pnl是我要Copy的Panel,
Base_pnl是Pool_pnl的Parent.
procedure TfrmHome.CopyAll_miClick(Sender: TObject); var Temp_bmp: TBitmap; Temp_img: TImage; Src_HDC, Obj_HDC: HDC; MyFormat : Word; AData: THandle; APalette: HPALETTE; iOrg_Top, i, iHeight: Integer; begin inherited; Src_HDC := GetDC(Pool_pnl.Handle); Temp_bmp := TBitMap.Create; Temp_bmp.Width := Pool_pnl.Width; Temp_bmp.Height := Pool_pnl.Height; Temp_bmp.Canvas.CopyMode := cmSrcCopy; try Temp_img := TImage.Create(Self); Temp_img.Width := Pool_pnl.Width; try iOrg_Top := Pool_pnl.Top; for i := 0 to ((Pool_pnl.Height-1) div Base_pnl.Height) do begin Pool_pnl.Top := -i * Base_pnl.Height; iHeight := Base_pnl.Height; if (Pool_pnl.Height Pool_pnl.Top) < Base_pnl.Height then begin iHeight := Pool_pnl.Height Pool_pnl.Top; end; Temp_img.Height := iHeight; Obj_HDC := Temp_img.Canvas.Handle; BitBlt(Obj_HDC, 0, 0, Temp_img.Width, Temp_img.Height, Src_HDC, 0, 0, SRCCOPY); Temp_bmp.Canvas.CopyRect(Rect(0, -Pool_pnl.Top, Temp_img.Width, Temp_img.Height i*Base_pnl.Height), Temp_img.Canvas, Rect(0, 0, Temp_img.Width, Temp_img.Height)); Temp_bmp.SaveToClipboardFormat(MyFormat, AData, APalette); Clipboard.SetAsHandle(MyFormat, AData); Pool_pnl.Top := iOrg_Top; end; finally Temp_img.Free; end; finally Temp_bmp.Free; end; end; </pre> |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |