在panel上放了很多的图片控件显示图片,想把panel显示的所有内容抓成一张图显示在一个image里该怎样做,更难点的, 可以选择想要抓的域区保存为图片(选的时候出现一个虚线拉框)分不够可以加.

解决方案 »

  1.   

    应该不难,利用PANEL的句柄,没做过!
      

  2.   

    可以阿,直接用
    1 屏幕拷贝到剪接区,然后读出
    2 或者用DC的bitblt创建一张一样的Bmp
    然后再付给image
      

  3.   

    第一题procedure TForm1.Button1Click(Sender: TObject);
    begin
      Image1.Width := Panel1.Width;
      Image1.Height := Panel1.Height;
      BitBlt(Image1.Canvas.Handle,
             0,
             0,
             Panel1.Width,
             Panel1.Height,
             Form1.Canvas.Handle,
             Panel1.Left,
             Panel1.Top,
             SRCCOPY);
    end;
      

  4.   

    第二题    画虚框的代码我懒得写了,用GetCursorPos函数取鼠标位置(这是屏幕坐标),
        然后用ScreenToClient和ClientToParent转换一下坐标
        改变BitBlt的参数,就行了
      

  5.   

    to ronaldli(木的) 问题难在这里了,画虚框选择怎样做,谢谢
      

  6.   

    试一下吧!
    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);
        if savedialog1.Execute then
        mybmp.SaveToFile(savedialog1.filename+'.bmp');
      finally
        releaseDC(0, DC);
        mycan.Free;
        mybmp.Free;
      end;
    end;