紧急求教:BCB屏幕截图编译遇到的问题
请教各位大虾:我用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




