电子白板简单实现

将画图存储成一个一个的点,点表示成记录,用文件流的方法存储到文本里,将文本读进文件流,用socket发送,socket接收后再存储成文本,然后再将文本用文件流读出,画到image上

1、在image上画线
image1.Canvas.Pen.Color:=clblue;
在image的mousedown事件中写
image1.Canvas.MoveTo(X,y);
在image的mousemove事件中写
image1.Canvas.lineTo(X,y);
2、在image上实现橡皮功能
     with image1.Canvas do
     begin
       Pen.Mode   := pmCopy;
       Brush.Style:=  bsClear;
       Brush.Color:=clWhite;
       FillRect(rect((x-4),(y-4),(x+4),(y+4)));//橡皮
     end;
3、如果想实现电子白板的简单传送,我用的办法是将画的点按记录的形式
存入文本,记录为
type
  TRec = record     {定义一个记录}
    sign:word;//标记,mousedown画=1,mousemove画=2,mousedown擦=3,mousemove擦=4,
    x: word;  //x轴标点
    y: word;  //y轴标点
  end;

定义记录:
var  rec: TRec;
记录调用:
    rec.sign:=1;
    rec.x:=x;
    rec.y:=y;
    msw.Write(rec, SizeOf(rec));//msw,msr:tmemorystream; //内存流用于读、写画板
    msw.SaveToFile('c:/temp/path.txt');//文件流存储文件
4、存储成文本后用tclientsocket/tserversocket以文件流的形式传送
(1)、发送的时候先发送文件大小
  Msw:=tmemorystream.Create;//文件流
  MyStreamw:=tmemorystream.Create;//文件流
  MyStreamw.LoadFromFile('c:/temp/path.txt');//文件流调用文件
  MyStreamw.Position := 0;{注意:必须添加此句}
  s1 :='size'+inttostr(MyStreamw.size);{流的大小}
  if ServerSocket1.Active then
  begin
    if listbox1.Count<=0 then
    //.ItemIndex=-1 then
    begin
      showmessage('没有发送方');
      exit;
    end;
    for i:=0 to ServerSocket1.Socket.activeconnections-1 do
    begin
      // if ServerSocket1.Socket.Connections[i].RemoteAddress=trim(listbox1.Items[listbox1.itemindex]) then
      ServerSocket1.Socket.Connections[i].SendText(s1);//发送文件流大小
    end;
  end;
(2)、然后接收方获取文件大小并向发送方发送ready,准备好接收,发送方接到ready,
然后发送文件流给接收方
      MyStreamw.Position := 0;
      if ServerSocket1.Socket.Connections[i].SendStream(MyStreamw)=false then
      ServerSocket1.Socket.Connections[i].SendStream(MyStreamw); {将流发送出去}
(3)、接收方接收到数据后根据数据流的大小接收,然后存储到另一个路径的文本里,
ServerSocket每次只能接收8k的数据,如果大于8k,ServerSocket会多次触发read事件,每次接收的
最多只有8k的数据,如果数据小于8k,则直接接收并存储到文本
    MyReceviceLength := socket.ReceiveLength; {读出包长度}
    remainsize:=MySize-MyReceviceLength;
    StatusBar1.SimpleText := '正在接收数据,数据大小为:' + inttostr(MySize);
    Socket.ReceiveBuf(MyBuffer, MyReceviceLength); {接收数据包并读入缓冲区内}//MyBuffer:array[0..100000] of byte;
    MyStreamr.Write(MyBuffer, MyReceviceLength); {将数据写入流中}
      if MyStreamr.Size >= MySize then {如果流长度大于需接收的字节数,则接收完毕}
      begin
        ServerSocket1.Socket.Connections[0].SendText('ok');
        MyStreamr.Position := 0;
        try
          MyStreamr.SaveToFile('d:/path.txt');
        finally {以下为清除工作 }
          MySize := 0;
          //button4.Click;
          paintline.create(image1);//调用线程画图,线程为取D盘文本,然后画出来

end;
      end;
如果大于8k,则接收之前,先用文件流取得D盘文件的数据,然后移动到文件流的末尾,再继续接收数据
        MyStreamr.LoadFromFile('d:/path.txt');
        MyStreamr.Seek(0,sofromend);
        StatusBar1.SimpleText := '正在接收数据,数据大小为:' + inttostr(MySize);
        Socket.ReceiveBuf(MyBuffer, MySize); {接收数据包并读入缓冲区内}
        MyStreamr.Write(MyBuffer, MySize); {将数据写入流中}
剩余大小为每次减去这次发送的大小。
接收完毕后向发送方发送‘ok’

电子白板简单实现delphi相关推荐

  1. [轉]c#简单调用DELPHI DLL封装窗体

    http://www.cnblogs.com/el-net/archive/2008/10/13/1309940.html dllimport Delphi dll dllimport dll Del ...

  2. 一个简单的DELPHI自定义事件的例子(转)

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  3. 最简单的delphi启动画面(转)

    首先做一窗体,然后将BorderStyle的属性设为bsnone,放image控件,align设为alclient 然后将主程序的修改为 uses Windows, Forms, Unit1 in ' ...

  4. winpython使用教程-使用Python开发windows桌面程序【超简单】

    一.开发前期准备 1. boa-constructor-0.6.1.bin.setup.exe #一个wxWidges的集成开发环境,简单如Delphi,可以直接拖拽控件,并且和其他集成环境不一样, ...

  5. delphi打包python_使用Delphi 编写Python Extension

    使用Delphi 编写Python Extension 作者:1000copy 摘要: 在互联网公共可访问领域内,关于Python/C interface的介绍,手册都是比较多的.Py直接支持C编写扩 ...

  6. C# 调用 Delphi Dll链接库方法及示例

    每种编程语言调用DLL的方法都不尽相同,在此只对用C#调用Delphi DLL的方法进行介绍 首先要搞清楚一点的是:什么是托管,什么是非托管? 一般可以认为:非托管代码主要是基于win 32平台开发的 ...

  7. DELPHI线程创建与使用

    这个要看你这个函数是干什么的,如果不涉及界面VCL或数据操作等需要同步的事情,那么多个线程调用同一函数跟平常调用一个函数一样,没什么特别的地方,反之,则需要注意每个线程之间的同步问题 追问 我想调用这 ...

  8. Delphi菜单栏背景色-转载收藏学习

    用Delphi制作个性化的菜单 www.netgocn.com原创 在应用程序编写中,使用个性化的菜单可以美化界面,展示个性风彩.例如3721网站推出的<3721网络特快>应用程序中的菜单 ...

  9. Delphi 7完美经典_PDF 电子书

    中文名:Delphi 7完美经典 原名:PDF 地区:大陆 下载地址:http://pan.baidu.com/share/link?shareid=125019&uk=721744522 出 ...

最新文章

  1. pidstat 命令详解(转载)
  2. void main()是错的!
  3. 内部排序——直接插入排序
  4. java基础系列:集合基础(1)
  5. Linux就业技术指导(一):简历撰写及面试筹备要领
  6. Android-标题状态栏的隐藏
  7. Theano at a Glance
  8. Qt学习之路(60): 创建shared library
  9. Mongodb命令操作增删改查
  10. SqlAlchemy操作(一)
  11. html5音乐播放器在线生成,一款极简的HTML5音乐播放器-skPlayer
  12. 系统管理指南:基本管理 第11 章• x86: 基于GRUB 的引导(任务)
  13. android手机如何查看系统版本号,怎么查看安卓系统版本
  14. 本地连接受限或无连接的解决方法
  15. 热模块替换/热更新 HMR
  16. 阿里云云平台,物联网可视化web界面简单教程
  17. CWnd与HWND的区别与联系(相互转换)完全解析
  18. 一个优秀的UI界面应该是什么样的
  19. vector 通俗易懂描述
  20. 函数栈帧(详细图解)

热门文章

  1. 2018 CCCC天梯赛 L2 04 秀恩爱分得快
  2. 自编R计算MSE(均方误差)
  3. Android NDK 开发环境搭建(二)----来源http://www.cnblogs.com/zdz8207/archive/2012/11/27/android-ndk-install.htm
  4. jupyter安装扩展插件
  5. 服务器上配置iis的步骤和注意事项
  6. SpringKafka文档 KafkaTemplate
  7. JAVA SE 基础复习-IO与序列化(4)
  8. matlab 去除协变量,求助协变量调整
  9. Android引用RN第三方控件,Android和RN互调方式,最近开发心得
  10. spatial transformer