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

複製TPanel的內容到剪貼簿

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


發表:8
回覆:7
積分:3
註冊:2002-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-14 17:41:02 IP:203.66.xxx.xxx 未訂閱
請問各位大大: 我在一個TPanel中放了九個TChart, 我想一次把九張圖Copy到剪貼簿, 這要怎麼做比較好呢!? 因為這個TPanel的範圍並不是整個畫面或整個TForm, 那是否應該使用DC然後限定Clip的區域? 還是有其他的方法? TPanel要如何抓絕對座標呢!? 再者,如果這個TPanel的大小超過整個螢幕, 有辦法Copy這個TPanel的影像嗎!? 謝謝大家...
RaynorPao
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-14 23:33:45 IP:61.221.xxx.xxx 未訂閱
引言: 請問各位大大: 我在一個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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-15 00:57:43 IP:192.72.xxx.xxx 未訂閱
Hi, 你好. 請參考這個小範例: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=32388 但是超出畫面的部分仍舊無法擷取. 待高明者續. 但若就單一某元件的畫面擷取應可以解決大多問題了!!
nekocat
一般會員


發表:8
回覆:7
積分:3
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-15 12:26:48 IP:61.56.xxx.xxx 未訂閱
謝謝RaynorPao和timhuang大大喔! 立刻來試試看! 謝謝您!
nekocat
一般會員


發表:8
回覆:7
積分:3
註冊:2002-03-13

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