DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: lixuan123
今日帖子: 0
在线用户: 3
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 diaowubin (diaowubin) ★☆☆☆☆ -
普通会员
2004/5/25 9:38:26
标题:
谁纠正一下我的错误,感激不尽!!!! 浏览:1123
加入我的收藏
楼主: 初学Delphi,学着人家写了一个远程屏幕截取程序,编译生成可执行文件很顺利,但运行程序的时候告诉我:''is not a void Integer value .我都要死掉了,恳请高手指教一下,不胜感激!!下边是我写的蹩脚的程序:
被截取屏幕的计算机端:
procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var
  m1:tmemorystream;
  shale,s:String;
  desk:tcanvas;
  bitmap:tbitmap;
  jpg:tjpegimage;
begin
  shale:=Socket.ReceiveText;
  if shale[1]='1' then//当收到另一端发来的信号后开始截图
    begin
      try
        m1:=tmemorystream.Create;
        bitmap:=tbitmap.Create;
        jpg:=tjpegimage.Create;
        desk:=tcanvas.Create; //以下代码为取得当前屏幕图象
        desk.Handle:=getdc(hwnd_desktop);
        with bitmap do
          begin
            width:=screen.Width;
            height:=screen.Height;
            canvas.CopyRect(canvas.cliprect,desk,desk.cliprect);
          end;
        jpg.Assign(bitmap); //file ://将图象转成JPG格式
        jpg.CompressionQuality:=10;//文件压缩大小设置
        //m1.clear;
        jpg.SaveToStream(m1); //file ://将JPG图象写入流中
        jpg.free;
        m1.Position:=0;
        s:=inttostr(m1.size);
        Socket.sendtext(s); //file ://发送图象大小
      finally
        bitmap.free;
        desk.free;
      end;
    end
  else if shale='okok' then //file ://客户端已准备好接收图象
    begin
      m1.Position:=0;
      Socket.SendStream(m1); //file ://发送JPG图象
    end;
end;
接收图象端:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  m:tmemorystream;
  buffer:array [0..50000] of byte; //设置接收缓冲区
  len:integer;
  ll:string;
  j:tjpegimage;
begin
  if c=0 then //C为截图端发送的字节数,全局变量,如果为0表示为尚未开始接收
    begin
      m:=TMemorystream.Create; //建立内存流
      ll:=socket.ReceiveText;
      c:=strtoint(ll); //设置需接收的字节数
      Serversocket1.Socket.SendText('okok'); //通知服务端开始发送图象
    end
    else
      begin //以下为图象数据接收部分
        len:=socket.ReceiveLength; //读出包长度
        socket.ReceiveBuf(buffer,len); //接收数据包并读入缓冲区内
        m.Write(buffer,len); //追加入流M中
        if m.Size>=c then //如果流长度大于需接收的字节数,则接收完毕
          begin
            m.Position:=0;
            j:=tjpegimage.Create;
            try
              j.LoadFromStream(m); //将流M中的数据读至JPG图像对象J中
              j.SaveToFile('d:\yuan.jpg');
            finally //以下为清除工作
              j.free;
              m.Free;
              c:=0;
            end;
          end;
      end;
end;

望高人指点迷津!!!!!!!!!
----------------------------------------------
wubiao
作者:
男 sephil (NAILY Soft) ★☆☆☆☆ -
盒子中级会员
2004/5/25 10:01:18
1楼: 把StrToInt改成StrToIntDef(..., 0);
----------------------------------------------
Copyright 2008 ? NAILY Soft

Click here to redirect to my home
Click here to redirect to my blog
作者:
男 diaowubin (diaowubin) ★☆☆☆☆ -
普通会员
2004/5/25 11:26:30
2楼: 先谢谢你!

但是,我还是没搞定,很菜吧,我也是这么认为的。唉!
错误是:socket 没有连接并用sendto发送的时候没有提供地址…………
不可能,我原来用过那个socket来连接聊天的,然后再在聊天的基础上加上远程屏幕截图功能的,为什么不行呢?是不是应该用serversocket在被截图端发送图象流,而用clientsocket接收图象。我是不是因为弄反了,所以不行?

再麻烦你一下了,我也没办法了。
----------------------------------------------
wubiao
作者:
男 diaowubin (diaowubin) ★☆☆☆☆ -
普通会员
2004/5/25 11:31:21
3楼: 快来救我!~@.@~
----------------------------------------------
wubiao
作者:
男 diaowubin (diaowubin) ★☆☆☆☆ -
普通会员
2004/5/25 11:33:42
4楼: 为这个错误,作为菜鸟的我已经搞了两天了,现在很憔悴!
----------------------------------------------
wubiao
作者:
男 sephil (NAILY Soft) ★☆☆☆☆ -
盒子中级会员
2004/5/25 11:44:27
5楼: 这个错误一般都是因为将string转换成Integer的时候传入的是个空字符串
你单步一下看看错误在哪里
----------------------------------------------
Copyright 2008 ? NAILY Soft

Click here to redirect to my home
Click here to redirect to my blog
作者:
男 diaowubin (diaowubin) ★☆☆☆☆ -
普通会员
2004/5/25 13:07:12
6楼: 谢了!我再看看,还不行的话,就不再麻烦你了,只能说浪费你的时间了。
----------------------------------------------
wubiao
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行80.07813毫秒 RSS