能!不过BitMap是不是牵扯到VCL的屏幕部分了。如果不是对时间要求很敏感可以试一下在Synchronize中执行相关操作。

解决方案 »

  1.   

    在线程内可以很安全的实用TMemoryStream,你最好能把一段错误的源码贴出来看看,大家才好找错
      

  2.   

    请看下面出错的代码,请给出解决方法:
    procedure ScreenCap(MyRect: TRect; var BmpStream: TMemoryStream);
    var
      RectWidth, RectHeight: Integer;
      SourceDC, DestDC: Integer;
      Bitmap: TBitmap;
    begin
      BmpStream.Clear;
      if MyRect.Right <= MyRect.Left then exit;
      if MyRect.Bottom <= MyRect.Top then exit;  RectWidth := MyRect.Right - MyRect.Left;
      RectHeight := MyRect.Bottom - MyRect.Top;  SourceDC := CreateDC('DISPLAY', '' , '' , nil);
      DestDC := CreateCompatibleDC(SourceDC);
      Bitmap := TBitmap.Create;
      Bitmap.Handle := CreateCompatibleBitmap(SourceDC, RectWidth, RectHeight);
      SelectObject(DestDC, Bitmap.Handle);
      BitBlt(DestDC, 0, 0, RectWidth, RectHeight, SourceDC, MyRect.Left, MyRect.Top, SRCCOPY);
      if BitMap.Empty then
        exit;
      BitMap.SaveToStream(BmpStream);
      BmpStream.Position := 0;
      DeleteDC(DestDC);
      DeleteDC(SourceDC);
      Bitmap.Free;
    end;
      

  3.   

    我的问题是涉及到了屏幕的抓取问题,而且对及时的屏幕状态要求
    很敏感的反应。各位高手,给出个解决方法吧!我重新做了测试,
    问题出在,执行BitBlt 以后的 BitMap 上,在此时它操作数据流
    都是会出现死等状态的 .
      

  4.   

    BmpStream是在哪儿创建的?不会是在主线程中间创建的吧?