CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  网络及通讯开发

紧急求教:BCB屏幕截图编译遇到的问题

楼主key2001(兰色心雨)2003-06-01 15:42:13 在 C++ Builder / 网络及通讯开发 提问

请教各位大虾:我用BCB编写了屏幕截图的程序,编译全部通过,可是运行时出现问题。在5.0上提示“Access   violation   at   address   400291AB   in   module   'VCL50.BPL'.Read   of   address   00000000”;  
   
  在BCB6.0上提示“Access   violation   at   address   400291DECF   in   module   'rtl60.BPL'.Read   of   address   00000000”;  
  是否缺少某个头文件? 问题点数:0、回复次数:14Top

1 楼matq2008(叶子.net)回复于 2003-06-01 18:30:41 得分 0

应该是内存的使用上有错,如指针,重复删除变量等,查查错Top

2 楼xpyilin(香蕉)回复于 2003-06-01 22:52:44 得分 0

单步跟踪,或贴代码。。。Top

3 楼shanewest1(炉子)回复于 2003-06-02 09:53:20 得分 0

支持Top

4 楼jbz(虚心求教)回复于 2003-07-08 17:58:28 得分 0

如何截图?Top

5 楼yingyys(鹰)回复于 2003-07-08 17:59:06 得分 0

调试调试吧Top

6 楼COKING(天晴)回复于 2003-07-08 21:38:52 得分 0

贴代码!Top

7 楼jishiping(JSP 季世平)回复于 2003-07-08 21:41:32 得分 0

指针为NULL,访问NULL指针的错误。贴代码。Top

8 楼mme(dog)回复于 2003-07-22 12:19:47 得分 0

多半是你用了没有分配内存的指针Top

9 楼yezio(江南岸)回复于 2003-08-07 14:16:15 得分 0

我前一阵也遇到这样的问题,也发了一个贴,我来去再看看别人怎么回的。  
  Top

10 楼yezio(江南岸)回复于 2003-08-07 14:22:57 得分 0

居然你还在问,上次上你问的,你还在问,问好了也不结分,呆子,都毕业了。  
  Top

11 楼zwell(Friends)回复于 2003-08-07 21:39:54 得分 0

我用的代码,绝对没错  
  屏幕截图  
  void   __fastcall   TmainForm::N31Click(TObject   *Sender)  
  {  
    Graphics::TBitmap   *scrBitmap=new   Graphics::TBitmap();  
    scrBitmap->Width=Screen->Width;  
    scrBitmap->Height=Screen->Height;  
    HDC   hdc=GetWindowDC(0);  
    BitBlt(scrBitmap->Canvas->Handle,0,0,scrBitmap->Width,scrBitmap->Height,hdc,0,0,SRCCOPY);  
    scrBitmap->SaveToFile(".\\screen\\screen.bmp");  
    delete   scrBitmap;  
  }  
  //---------------------------------------------------------------------------  
   
  工作区截图  
  void   __fastcall   TmainForm::N32Click(TObject   *Sender)  
  {  
    Graphics::TBitmap   *scrBitmap=new   Graphics::TBitmap();  
    scrBitmap->Width=mainForm->Width;  
    scrBitmap->Height=mainForm->Height;  
    HDC   hdc=GetWindowDC(0);  
    BitBlt(scrBitmap->Canvas->Handle,0,0,scrBitmap->Width,scrBitmap->Height,hdc,mainForm->Left,mainForm->Top,SRCCOPY);  
    scrBitmap->SaveToFile(".\\screen\\screen1.bmp");  
    delete   scrBitmap;  
  }Top

12 楼zihan(子寒)回复于 2003-08-07 22:43:12 得分 0

我给你远程截取和发送的代码,如果你只是本地的,你可以直接用savetofile就可以了.  
  if(CanCapture)  
  {  
                  CanCapture=false;  
                  HDC   SourceDC,DestDC,Bhandle;  
                  Bitmap->Width=Screen->Width;  
                  Bitmap->Height=Screen->Height;  
                  SourceDC=CreateDC("DISPLAY",NULL,NULL,NULL);  
                  StretchBlt(Bitmap->Canvas->Handle,0,0,Bitmap->Width,Bitmap->Height,SourceDC,0,0,Screen->Width,Screen->Height,SRCCOPY);  
                  //changetojpg-------------------------------------------  
                  jpeg->PixelFormat=jf24Bit;                           //或jf8Bit  
                  jpeg->CompressionQuality=Pix;               //1-100  
                  jpeg->Assign((TPersistent*)Bitmap);  
                  jpeg->Compress();  
                  Stream->Clear();  
                  jpeg->SaveToStream(Stream);  
                  //send   picture----------------------------------------  
                  const   int   ThreshHold=2048;  
                  Stream->Position=0;  
                  char   *Buffer=new   char[ThreshHold];  
                  int   BuffSize=Stream->Size;  
                  int   Buffers=BuffSize/ThreshHold;  
                  for(int   i=0;i<=Buffers;i++)  
                  {  
                    if(BuffSize>=ThreshHold)  
                                  {  
                                    Stream->Read(Buffer,ThreshHold);  
                                    NMUDP1->SendBuffer(Buffer,ThreshHold,ThreshHold);  
                                  }  
                    else  
                                  {  
                                  if(BuffSize<=0)  
                                                  break;  
                                  else  
                                                  {  
                                                  Stream->Read(Buffer,BuffSize);  
                                                  NMUDP1->SendBuffer(Buffer,BuffSize,BuffSize);  
                                                  }  
                                  }  
                  BuffSize-=ThreshHold;  
                  }  
                  NMUDP1->SendBuffer("E",1,1);  
                  delete   Buffer;  
                  CanCapture=true;  
  }Top

13 楼GeoPhoenix(天鸽)回复于 2003-08-10 12:03:37 得分 0

没问题,楼上的代码俺都测试了cb5,没问题,是不是你的设置有问题?  
  Top

14 楼zjqyb(风清扬*任它溺水三千,我只取一瓢饮*)回复于 2003-08-10 12:29:55 得分 0

少了ReleaseDc(hdc);  
  但是我想也无妨  
  Top

相关问题

  • 全屏幕截图
  • 请问,怎样屏幕截图?
  • 屏幕截图做FLASH。该怎么办?
  • 用C#怎样实现屏幕截图
  • 大屏幕电脑上的奇怪编译问题
  • 屏幕截图的时候如何捕获光标的形状?
  • 怎样把屏幕上任意大小截图下来?
  • 屏幕截图怎么能够连鼠标一起截下来?
  • java怎么屏幕截图并转换成图片??????
  • 求一款"键盘记录"及屏幕截图的软件

关键词

  • 截图
  • bcb
  • 屏幕
  • 代码
  • 指针
  • scrbitmap
  • threshhold
  • buffsize
  • 屏幕截图
  • tbitmap

得分解答快速导航

  • 帖主:key2001

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo