不明白什么意思!
是不是要将panel上的label, shape, image所显示的东西保存到一个bmp中?

解决方案 »

  1.   

    搞了半天,坐标转换还没搞定,你自己看看,能不能把坐标转换一下。搞定了告诉我一下。procedure TForm1.Button1Click(Sender: TObject);
    var
      dc: hdc;
      Mycan: Tcanvas;
      R: TRect;
      Mybmp:TBitmap;
      p, CP:TPoint ;
    begin
      Mybmp := Tbitmap.Create; {建立BMPMAP }
      Mycan := TCanvas.Create; {屏幕截取}
      dc := GetWindowDC(0);   try
       p.x:= panel1.left;
       p.y:=panel1.top;
       CP:= ClientToScreen(p);    Mycan.Handle := dc;
        R := Rect(cp.x ,cp.y, panel1.Width, panel1.Height);
        Mybmp.Width := R.Right;
        Mybmp.Height := R.Bottom;
        Mybmp.Canvas.CopyRect(R, Mycan, R);
        mybmp.SaveToFile('c:\test.bmp');
      finally
        releaseDC(0, DC);
        mycan.Free;
        mybmp.Free;
      end;
    end;
      

  2.   

    : kevin_gao(困了!累了!睡觉了!) :
    抓下的是张空白图片,什么都没有的,这是什么原因?
      

  3.   

    稍微修改一下~~呵呵~~procedure TForm1.Button3Click(Sender: TObject);
    var
      dc: hdc;
      Mycan: Tcanvas;
      R: TRect;
      Mybmp:TBitmap;
      p, CP:TPoint ;
    begin
      Mybmp := Tbitmap.Create; {建立BMPMAP }
      Mycan := TCanvas.Create; {屏幕截取}
      dc := GetWindowDC(0);  try
        p.x:= Panel1.Left;
        p.y:= Panel1.Top;
        CP:= ClientToScreen(p);    Mycan.Handle := dc;
        R := Rect(CP.x,CP.y,CP.x+Panel1.Width,CP.y+Panel1.Height);
        Mybmp.Width := Panel1.Width;
        Mybmp.Height := Panel1.Height;
        Mybmp.Canvas.CopyRect(Mybmp.Canvas.ClipRect,Mycan,R);
        mybmp.SaveToFile('E:\test.bmp');
      finally
        releaseDC(0, DC);
        mycan.Free;
        mybmp.Free;
      end;
    end;
      

  4.   

    kevin_gao(困了!累了!睡觉了!),tikkypeng(一两狂死郎之天衣有缝):
     太谢谢你了。。我试以下,要是可以了马上给分:)
      

  5.   

    是啊~~~sos_zqx(踏破铁鞋)你是不是看错了啊??
      

  6.   

    我的真的是空白图呀
    procedure Tfrm_dkkb.BitBtn1Click(Sender: TObject);
    var
      dc: hdc;
      Mycan: Tcanvas;
      R : TRect;
      Mybmp:TBitmap;
      p, CP:TPoint ;
    begin
      Mybmp := Tbitmap.Create; {建立BMPMAP }
      Mycan := TCanvas.Create; {屏幕截取}
      dc := GetWindowDC(0);  try
        p.x:= panel2.left;
        p.y:=panel2.top;
        CP:= ClientToScreen(p);
        Mycan.Handle:= dc;
        R:= Rect(cp.x ,cp.y, panel2.Width, panel2.Height);
        Mybmp.Width:= R.Right;
        Mybmp.Height:= R.Bottom;
        Mybmp.Canvas.CopyRect(R, Mycan, R);
        mybmp.SaveToFile('d:\test.bmp');
      finally
        releaseDC(0, DC);
        mycan.Free;
        mybmp.Free;
      end;
    end;
    代码基本没有改变呀。。为什么我的不行??我的penel上有文字和图形的呀
      

  7.   

    老大~~~~你看看我的话啊~~~~~要修改一下的~~~
    老大~~~~你看看我的话啊~~~~~要修改一下的~~~
    老大~~~~你看看我的话啊~~~~~要修改一下的~~~
    老大~~~~你看看我的话啊~~~~~要修改一下的~~~稍微修改一下~~呵呵~~procedure TForm1.Button3Click(Sender: TObject);
    var
      dc: hdc;
      Mycan: Tcanvas;
      R: TRect;
      Mybmp:TBitmap;
      p, CP:TPoint ;
    begin
      Mybmp := Tbitmap.Create; {建立BMPMAP }
      Mycan := TCanvas.Create; {屏幕截取}
      dc := GetWindowDC(0);  try
        p.x:= Panel1.Left;
        p.y:= Panel1.Top;
        CP:= ClientToScreen(p);    Mycan.Handle := dc;
        R := Rect(CP.x,CP.y,CP.x+Panel1.Width,CP.y+Panel1.Height);
        Mybmp.Width := Panel1.Width;
        Mybmp.Height := Panel1.Height;
        Mybmp.Canvas.CopyRect(Mybmp.Canvas.ClipRect,Mycan,R);
        mybmp.SaveToFile('E:\test.bmp');
      finally
        releaseDC(0, DC);
        mycan.Free;
        mybmp.Free;
      end;
    end;
      

  8.   

    是没有问题。你不要在这段代码中设置断点,那样会取得ide窗口的东西。tikkypeng(一两狂死郎之天衣有缝),偶忘了加两个东东了,偶说怎么不对来着,看来还是菜了点。
      

  9.   

    function GetDesktopBitmap(mBitmap: TBitmap): Boolean;
    { 取得当前屏幕背景图案 }
    var
      vDesktopHWnd: THandle;
      vDesktopDC: HDC;
    begin
      Result := True;
      with mBitmap do try
        vDesktopHWnd := GetDesktopWindow;
        vDesktopDC := GetDC(vDesktopHWnd);
        Width := Screen.Width;
        Height := Screen.Height;
        BitBlt(Canvas.Handle, 0, 0, Width, Height, vDesktopDC, 0, 0, SRCCOPY);
        ReleaseDC(vDesktopHWnd, vDesktopDC);
      except
        Result := False;
      end;
    end; { GetDesktopBitmap }
      

  10.   

    tikkypeng(一两狂死郎之天衣有缝)你的分肯定够多了,这个分就少要点吧,偶很可怜的。 :)
      

  11.   

    呵呵~~
    zswang(伴水)(伤心中)师兄啊~~~
    你也让着我一点啊~~~
      

  12.   

    试试这个,先Uses个Grids
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Mem: TBitmap;
      Rect: TRect;
    begin
      Mem := TBitmap.Create;
      Rect := Panel1.ClientRect;
      Mem.Width := Panel1.Width;
      Mem.Height := Panel1.Height;
      Mem.Canvas.CopyRect(Rect, TDrawGrid(Panel1).Canvas, Rect);
      Mem.SaveToFile('c:\g.bmp');
      Mem.Free;
    end;
      

  13.   

    应该好了吧?
    tikkypeng(一两狂死郎之天衣有缝)的代码能用的。
      

  14.   

    //这是需要的?
    //不用给我分!function GetDesktopBitmap(mBitmap: TBitmap; mRect: TRect): Boolean;
    { 取得当前屏幕背景图案 }
    var
      vDesktopHWnd: THandle;
      vDesktopDC: HDC;
    begin
      Result := True;
      with mBitmap do try
        vDesktopHWnd := GetDesktopWindow;
        vDesktopDC := GetDC(vDesktopHWnd);
        Width := mRect.Right - mRect.Left;
        Height := mRect.Bottom - mRect.Top;
        BitBlt(Canvas.Handle, -mRect.Left, -mRect.Top, mRect.Right, mRect.Bottom,
          vDesktopDC, 0, 0, SRCCOPY);
        ReleaseDC(vDesktopHWnd, vDesktopDC);
      except
        Result := False;
      end;
    end; { GetDesktopBitmap }procedure TForm1.Button1Click(Sender: TObject);
    var
      vRect: TRect;
    begin
      GetWindowRect(Panel1.Handle, vRect);
      GetDesktopBitmap(Image1.Picture.Bitmap, vRect);
    end;
      

  15.   

    zswang(伴水)(伤心中):
     ,。。谢谢。。也收我做师弟把呜呜,,分我到底怎么给呢
    不过还有一点问提。好象坐标转换有问题。用PENEL的坐标带进去就抓到空白。。
      

  16.   

    师弟与我的作品
    都可以实现需要
    不同的是我的是取当前屏幕
      如果Panel被其它程序的窗体挡住时就会把它也一起提出来
    他的是取当前Form
      不会被其它程序影响比较合理
      

  17.   

    Panel的坐标时相对于它的容器的
    用GetWindowRect(Panel1.Handle, vRect);可以得到绝对坐标
      

  18.   

    zswang,偶有点疑问,谁是师傅?
      

  19.   

    师傅姓唐名三藏
    zswang偷偷地递一本书给xzgyb
    “这是师傅的绝技是用VC写的,你给我翻译成Delphi”
    xzgyb一看书名<<葵花宝典6.0>>!
      

  20.   

    “师弟”一下太多了
    导演说:“不许!”
    委屈xzgyb 当白马先
    待你翻译完葵花宝典
    我当极力向导演推荐
      

  21.   

    to xzgyb(老达摩):
      误会啊,英雄!
      

  22.   

    只看 xzgyb 头也不会的飞走了
    (忘了用道具,摔了一交,从身上掉了两本书--<<葵花宝典7.0>>和<<葵花宝典7.0补丁>>)
      

  23.   

    to sos_zqx(踏破铁鞋):
      “别多说快挑担子”
      

  24.   

    to Bob7946(X度空间):
      跟我说话吗?不是跟我说话的吧?认错人啦!
      

  25.   

    哈哈,zswang,客气啦
    太抬举我了,英雄,头一次听到有人这么说
    不过据我了解,<<葵花宝典>>早已问世
    江湖人物人手一本,呵呵
    哈哈,老狼,没关系,虽然我是老达摩
    但我们可以是忘年交吗,哈哈
      

  26.   

    to xzgyb(老达摩):老人家今年高龄?听说<<葵花宝典>>很厉害,不知你的少林72艺与之相比如何?