在1024*768的分辨率下,部分界面超出了Windows窗口界面,在对Image控件截图过程中,超过窗口的部分无法截取到,试了很多种方法,一样没有达到想要的效果,请各位大大帮忙,谢谢!

解决方案 »

  1.   

    再说明一下,因为我是有三个Image叠加在一起的,以此来达到我要的某种效果,运行后显示的图片是达到了我的效果,现在就卡在截图问题上。
      

  2.   

    32位的WIndow7操作系统下面调用这个函数会报错
      

  3.   

    我看了一下,功能是很多种,但我的情况是没有滚动的窗口,显示的时候超过了屏幕,试了很多种截图方式,都没有这种效果,因为我是要自动截取多个Image控件叠加的区域
      

  4.   

    在xp下,超过屏幕的部分系统是不会进行绘制的,所以取不到图。
    在vista及win7,win8下,就算超过屏幕,系统仍然绘图,所以取得到。
    我做的一个小程序是这样解决:判断系统版本,如果是xp及以下,则调用api将窗口(如果是最小化先还原大小)移到屏幕能全部显示的地方。
    如果是窗口本身大小就超过屏幕,我也不知道要怎么做。
      

  5.   

    32位的WIndow7操作系统下面调用这个函数会报错
    联函数都告诉你了还搞不定,非要给你写代码.晕啊.
    一个Image,一个Panel
    你把鼠标在Panel1上按下,然后拖到你要截屏的窗口上松开看看.
    function WindowSnap(WndHandle: HWND; Destbmp: TBitmap): Boolean;
    var
      r: TRect;
      user32DLLHandle: THandle;
      PrintWindowAPI: function(sourceHandle: HWND; destinationHandle: HDC;
        nFlags: UINT): BOOL; stdcall;
    begin
      Result := False;
      user32DLLHandle := GetModuleHandle(user32);
      if user32DLLHandle <> 0 then
      begin
        @PrintWindowAPI := GetProcAddress(user32DLLHandle, 'PrintWindow');
        if @PrintWindowAPI <> nil then
        begin
          GetWindowRect(WndHandle, r);
          Destbmp.Width := r.Right - r.Left;
          Destbmp.Height := r.Bottom - r.Top;
          Destbmp.Canvas.Lock;
          try
            Result := PrintWindowAPI(WndHandle, Destbmp.Canvas.Handle, 0);
          finally
            Destbmp.Canvas.Unlock;
          end;
        end;
      end;
    end;procedure TForm8.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      h : HWND;
      bmp: TBitmap;
    begin
      h := WindowFromPoint(Mouse.CursorPos);
      bmp := TBitmap.Create;
      WindowSnap(h, bmp);
      Image1.Picture.Graphic := bmp;
      bmp.Free;
    end;
      

  6.   

    楼主,别听他们的。我可以告诉你方法,代码就几行,保证给你截到自己程序中的image,不管尺寸有多大!不知道你是否愿意给贴子加分?我是个比较在乎分的人。
      

  7.   


    别说是超出屏幕,就算被别的窗口挡住,都可以截图!因为你的程序只要能被人看到,实际就已经被paint绘出来了,都绘出来了,存一下就OK