Panel的大小比当前屏幕大,部分panel看不到的。

解决方案 »

  1.   

    panel no canvas.  sorry
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
        aCanvas: TCanvas;
        rect: TRect;
        bmP: TBitmap;
        dc: HDC;
    begin
        rect := Panel1.ClientRect;
        aCanvas := TCanvas.Create;
        try
            dc := GetWindowDC(Panel1.Handle);
            aCanvas.Handle := dc;        bmp := TBitmap.Create;
            try
                bmp.Width := rect.Right - rect.Left;
                bmp.Height := rect.Bottom - rect.Top;
                bmp.Canvas.CopyRect(rect, aCanvas, rect);            Image1.Picture.Bitmap.Assign(bmp);
            finally
                bmp.Free;
            end;
        finally
            aCanvas.Free;
        end;
    end;
      

  3.   

    上面是把panel上的东西存入bmp中,再将其在Image1中显示出来,
    你可在用bmp.savetofile将其存为*.bmp文件。
      

  4.   

    取得panel的rect,然后截图就ok了
      

  5.   

    读了上面的代码,太罗唆了吧。其实Panel属WinControl控件,本就有Canvas属性,直接SaveToFile不就得了。或者copyCanvas. 闷!ing
      

  6.   

    我怎么发现用rect := Panel1.ClientRect
    每次系统都是从(0,0)坐标开始取得图象,搞不懂 我是用image1来显示已经有的图片,然后想用copyRect把image1的信息复制到image2procedure TForm1.Button2Click(Sender: TObject);
    var
        rect: TRect;
        bmP: TBitmap;
    begin
        rect := Image1.BoundsRect;
        try
            bmp := TBitmap.Create;
            try
                bmp.Width := rect.Right - rect.Left;
                bmp.Height := rect.Bottom - rect.Top;
                bmp.Canvas.CopyRect(rect, Canvas, rect);
                Image1.Picture.Bitmap.Assign(bmp);
                bmp.SaveToFile('D:\AI.bmp');
            finally
                bmp.Free;
            end;
        finally
        end;
    end;
      

  7.   

    Image1.Picture.Bitmap.Assign(bmp);---->
    应该是
      Image2.Picture.Bitmap.Assign(bmp);