[推荐]delphi基础学堂-详细讲解delphi
荐 ★★★★★
delphi基础学堂-详细讲解delphi
第八讲 消息和进程通信
一、基础补充
1 image的使用
把图象存为jpeg格式
2 treeView的简单使用。
treeView可以带来很好的视觉效果,但生成过程较烦琐。如果是简单应用,我们可以使用一种简单的方法。从文件中一次性读入整个树形结构。
treeView1.loadFromFile('c:\tree.txt');
treeView1.selected 返回被选中的节点。
文本和绝对索引号
二、windows消息机制
windows系统是靠消息的传递来工作的,消息无处不在。其核心结构:ID+wParam+lParam(消息号,参数1,参数2)。消息可以在不同的进程间传递。
【例】发送消息和接受消息
我们可以发送系统预先定义的消息,也可以发送自定义的消息。自定义的消息从WM_User开始。
接收消息就是把一个消息号和一个函数连接起来,使得当那个消息发生的时候,相应的函数就被调用了。
◇postmessage和sendMessage是有区别的。postMessage是把消息仍在消息队列后就返回,而sendMessage要一直等到消息被处理才返回。也就是说,用sendMessage实现的是类似与同步处理的操作。
◇如果在祖先类中也映射了同一个消息,则本类中的定义优先。如果希望在本类中调用祖先类曾经映射过的函数,方法是: inherited;
通过消息操作,我们可以模拟鼠标,键盘的动作,用程序来支配一个已知的程序去完成某些动作。比如菜单操作,点击按钮等等。为了监视某一个程序中的消息流,可以使用消息监视工具,如微软公司提供的spy++。
【例】监视扑克游戏的消息流。通过程序“指挥”该游戏发牌,翻牌等等。
◇监视消息时,可以选择消息的输出格式,如果是为了原样照发,可以选择原始格式,否则可以使用解码过的消息格式。
三、delphi的消息处理流程
首先是调用Wndproc虚方法。然后依次调用每一个类中的消息映射。
这两种方法都可以调用inherited来重复调用祖先的方法。
四、WM_copyData方法实现进程通信
进程间的内存空间是独立的,这使得不同的进程可以独立运行,互不干扰。但同时也有一个缺点,就是怎样在不同进程间传递数据信息呢?当然可以使用文件,但怎样把这个文件的名字通知对方呢?进程间的通信有多种方法,比如命名管道,内存映射文件等。但最简单的方法是使用一个windows消息:WM_copyData。
五、TCP/IP实现进程通信
TCP/IP是一个协议族,而不是一个协议。IP是网络层协议,传递的数据单位是包,目的是在两个主机间透明地传递包。IP的下层是链路层。UDP是用户报文协议的简称。它传递的单位是报文。
UDP是不可靠的协议,在传输中可能会丢包,或重包。但UDP协议占用资源少,机制简单。TCP是可靠的报文传输协议。它可以建立在UDP基础上,也可以建立在IP的基础上。
delphi提供了TNMUDP来支持UDP协议。
delphi提供了TClientSocket和TServerSocket来支持TCP协议的使用
六、internet
delphi不是专门开发静态和动态网页的工具,但使用它提供的组件可以完成这些工作。
第九讲 杂项
一、程序构造提示
1。文档-视图结构在构造程序过程中被广泛地使用。
我们应当严格地区分数据和数据的表达这两件事情。在窗台上放花或不放花来充当联络信号是表达,它的文档只有一个比特,是0或是1。在构造程序的时候,首先要实现对文档的操作,只要完成了对内部数据结构的控制,就完成了工程的大部分。至于如何显示这个文档,则是个相对容易的问题。
例子:自定义的表格 菜单,按钮的同步表现
2。构造程序时的常量替换法。
鸡兔问题的启发
二、使用Windows资源
资源就是一个二进制的文件。其中提供了命名的数据。它们可以是字符串或图片或声音等。
delphi中一直在使用资源 {$R *.res}
使用资源的优点是:可以在不重新编译的情况下,只要改写资源后连接就可以更新程序。这在不同语言文字间翻译上很有用。
例如:调用一副扑克牌中某一张的图案。
三、使用delphi全局对象
☆ application
applicatoin 是TApplication类生成的对象,它代表着应用程序本身。其中比较重要的属性
如下:
application.exename 代表当前运行的可执行文件的带路径全名
从中解析出纯文件名的方法是: extractFileName extractFileDir
icon 代表当前应用的图标。 它出现在主窗口的左上角,也出现在
☆screen
☆printer
上一页 [1] [2] [3] [4] [5] [6] [7] [8]