请教: 事件和消息的联系?

位大虾,
     这个问题在VCL中是怎样处理的呀?
  例如:Tedit中有一个事件是onkeypress,应用如下:

   procedure tform1.edit1keypress(sender:tobject;var key:char); 
   begin 
   end; 

   那么这个事件是怎么样和WIN32中的WM-CHAR联系上的呢?
   VCL是怎么做的?


TWinControl 
   procedure WMChar(var Message: TWMChar); message WM_CHAR; 
... 

procedure TWinControl.WMChar(var Message: TWMChar); 
begin 
 if not DoKeyPress(Message) then inherited; //这里开始消息响应 
end; 

function TWinControl.DoKeyPress(var Message: TWMKey): Boolean; 
var 
 Form: TCustomForm; 
 Ch: Char; 
begin 
  Result := True;
  Form := GetParentForm(Self);
  if (Form <> nil) and (Form <> Self) and Form.KeyPreview and
    TWinControl(Form).DoKeyPress(Message) then Exit;
  if not (csNoStdEvents in ControlStyle) then
    with Message do
    begin
      Ch := Char(CharCode);
      KeyPress(Ch); //再看这里
      CharCode := Word(Ch);
      if Char(CharCode) = #0 then Exit;
    end;
  Result := False;
end; 

procedure TWinControl.KeyPress(var Key: Char); 
begin 
 if Assigned(FOnKeyPress) then FOnKeyPress(Self, Key); 
end; 

你可以在程序的开头(在Uses后面)先将你的消息赋值为一个常量,如:

const MyMessage = WM_User+1;

然后你要自己定义这个消息的结构,如:

TMyMSG=packed record
  MSG:Cardinal;
  param1:integer;
  param2:integer;
  .. //这里既然是自定义的消息结构,要多少个参数你自己定
  end;

调用的时候Var MSG1:TMyMSG;说明这个消息是MyMSG消息的结构形式的。
这样你只要将常量中定义的MyMessage作为MSG1的域MSG的值就可以发送了。
再说说发送吧,你如果是向窗口过程发送的话(处理后返回),用SendMessge,向消息队列
中发送消息(立即返回)用PostMessege();如果是在程序内部发送消息给程序特定的消息过
程处理,你可以用Tobject的Dispatch()这种方式最简单。
如何确定消息处理过程?
将你的特定过程定义在类的Private部分,并且标明Message MyMessage说明这是一个消息过
程。然后在实现部分将这个过程实现过程写好(注意这里不要Message MyMessage)。这样
你就可以处理自定义的消息了。
这里简单写一下代码,你自己再看看

const MyMessage = WM_User+1;
 
  TMyMSG  record
    MSG:Cardinal;
    param1:integer;
    param2:integer;
  end;
  TForm1=(TForm)
  ..
  
     Mychuli(var msg: TMyMSG);Message MyMessage;
  ..
  
   TForm1.Mychuli(var msg:TMyMSG);
  begin
    MessageBeep(0);
  end;
   TForm1.Button1Click(Sender:Tobject);//单击Button1发送消息
   MSG1: TMyMSG;
  begin
    MSG1.MSG:=MyMessage;
    Dispatch(MSG1);//这是由TForm1负责发送的
 
  ..
 
还有几个方法可以在不同的层次上截获消息。这个就要你自己看看了。

转载于:https://www.cnblogs.com/railgunman/archive/2010/12/10/1902537.html

在 SAP S/4HANA 的 BP 事务里做保存前校验:BDT 事件、BUPA_FURTHER_CHECKS 与 CVI 扩展 BAdI 一次讲透 SAP BP事务保存前校验机制解析 摘要:本文系统梳理了SAP BP事务保存前的校验机制,揭示了三种关键校验点的差异与适用场景: BDT框架DCHCK事件:最靠近UI层,适合屏幕字段级校验,但API调用时可能失效 Classic BAdI BUPA_FURTHER_CHECKS:全局拦截点,可阻断整个BP保存,适合核心业务规则 CVI扩展校验:仅管控供应商/客户段落,需注意可能产生"BP已保存但段落未保存"的情况 文章通过真实案例(如黑名单校验、付款冻结等)展示了各校验点的最佳实践,并特 阅读详情

相关推荐

零基础微信理财通基金实操指南(2026版)

先活下来:保证不亏大钱,再想赚钱慢慢变富:年化10%,7年翻倍,这已经很好了开始比完美重要:今天先存100元到零钱通,就是最好的开始现在打开微信,进入理财通,完成第一步风险测评吧!有任何问题可以随时问,我会用最通俗的方式解释。

老韩的Linux云计算架构师进阶之路 1683

Delphi的5种方法类型

Delphi的方法类型有:1.静态方法 (Static) 默认类型,可以省略关键字2.虚拟方法 (Virtual)3.动态方法 (Dynamic)4.消息方法 (Message)5.抽象法方 (Abstract)=======================================================1)静态方法[static]静态方法类似于通常的过程和函数,编译器在编译时

木兮小站 7203

python中frida的安装+frida-server(雷电模拟器)保姆级安装教程

frida的安装,安卓逆向,adb

2301_80224944的博客 4578

消息与事件

1.http://topic.youkuaiyun.com/u/20080723/12/32e2f082-6b63-48e6-bdf4-2ebba4cff9e9.html 消息驱动,响应事件,然后完成功能,所以,就要通过消息决定所有逻辑分支操作,添加事件去处理这些问题;event一般用在线程或进程的同步,可以使用WaitSingleObject来等待。 message一般用在窗口,线程,进程之间的数

学习笔记 869

DEXPI与Proteus XML:解锁过程工业P&ID数据互操作性的技术核心

本文深入探讨了DEXPI与Proteus XML在过程工业P&ID数据互操作性中的核心技术。通过解析DEXPI标准的开源特性和Proteus XML的架构设计,揭示了其在跨平台数据交换中的关键作用,并结合CADMATIC和西门子COMOS的实战案例,展示了如何实现高效的数据集成与转换。

weixin_29195615的博客 383

开源实战 | 基于SolidWorks与Matlab的并联索驱机器人轨迹规划全流程

本文详细介绍了基于SolidWorks与Matlab的并联索驱机器人轨迹规划全流程,涵盖从基础概念到实战技巧的各个环节。通过SolidWorks建模、Matlab运动学实现及轨迹优化策略,展示了如何实现高精度轨迹规划,适用于摄影、医疗等领域的机器人应用。

weixin_28331555的博客 403

事件之间的关联关系

关联的类型 1.因果关系(Causality) 事件之间的因果关系,由于某一事件导致了另一事件的发生。常见于“体征-治疗”、“治疗-体征”、“体征-体征”等类型的事件之间。比如使用某种药物缓解了某种症状、等等。 2.先后关系(Sequential) 事件发生的先后,任意两种类型的事件都有可能。 3.先后关系(Sequential) 同时发生的两个事件。多见于“体征-体征”、“检查-检查”、“诊断-诊断”等类型的事件之间。 eg:一周前,患者再次因气候变化出现咳嗽咳痰。昨日在家患者咳痰,导致短暂

小雪同学 8209

多元相关性分析_PAST:最简便易用的统计学分析软件教程目录

欢迎来到PAST的世界!本教程并不是将PAST的所有功能均进行详细介绍,而只是挑选与生物、医学、微生物研究相关的统计学分析内容进行讲述。根据PAST内各项分析的标签分类,将该教程具体设置如下:PAST软件介绍PAST的基本信息数据的输入和修改数据的转换和标准化图像绘制 (Plot标签)点线图和直方图散点图条形图和箱须图饼图堆叠条形图三元相图气泡图单变量统计学分析 (Univariate标...

weixin_39605706的博客 3155

事件与消息

简单理解 事件(Event)是一个动作——用户触发的动作。 消息(Message)是一个信息——传递给系统的信息。 事件与消息的概念在计算机中较易混淆,但本质不同: 事件由用户(操作电脑的人)触发且只能由用户触发,操作系统能够感觉到由用户触发的事件,并将此事件转换为一个(特定的)消息发送到程序的消息队列中。 这里强调的是: 可以说“用户触发了一个事件”,而不能说“用户触发了一个消息”。 用户只能触发事件,而事件只能由用户触发。 一个事件产生后,将被操作系统转换为一个消息,所以一个消息可能是由一个事件转换而来

我的博客 1011

微信小程序订阅消息实战:如何绕过长期订阅限制实现多次发送(附PHP代码)

本文针对微信小程序开发者无法获取长期订阅消息权限的痛点,提供了一套完整的实战解决方案。通过深入剖析一次性订阅与长期订阅的规则差异,结合巧妙的交互设计、稳健的PHP服务端发送引擎(含高并发处理与失败重试机制)以及授权池管理等高级策略,帮助开发者在合规前提下,构建高可用的消息推送系统,有效提升通知触达率与用户体验。

weixin_29008805的博客 620

重回童年的经典系列☀️| 【坦克大战3D版】游戏制作+解析

带你重回童年的经典系列——坦克大战3D版制作,感兴趣的可以看看呀~

努力前行,总会成为自己心中的那道光 5万+

事件 和 消息

事件是一个动作——用户触发的动作。 消息是一个信息——传递给系统的信息。 事件与消息的概念在计算机中较易混淆,但本质不同: 事件由用户(操作电脑的人)触发且只能由用户触发,操作系统能够感觉到由用户触发的事件,并将此事件转换为一个(特定的)消息发送到程序的消息队列中。 这里强调的是: 可以说“用户触发了一个事件”,而不能说“用户触发了一个消息”。用户只能触发事件,而事件只能由用户触发。 一个事件产生...

zxf347085420的博客 707

Unity零基础到入门 ☀️| 【UI系统学习】轻松学会 Unity 的 UGUI基础控件的使用(包括一个简易血条、蓝条设计)

Unity,UGUI。本篇博客来挑几种Unity中最常用的UI控件如何使用和使用技巧,包括一个简易血条蓝条的小实例

努力前行,总会成为自己心中的那道光 2万+

Qt消息机制:事件分发和事件过滤

目录 图形界面应用程序的消息处理模型 Qt中的事件处理 (1)在Qt中,事件被封装成一个个对象,所有的事件均继承自抽象类QEvent. (2)Qt平台将系统产生的消息转变成Qt事件 (3) event()函数-事件分发 (3)GUI应用程序的事件处理流程 (4)事件(QEvent)和信号(SIGNAL)的不同 图形界面应用程序的消息处理模型 特点: 基于操作系统才能运行 GUI应用程序提供的功能必须由用户触发 用户操作界面时操作系统是第一个感知的 系统内核...

DayDayUp 6889

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

第十一节:Activiti6.0——定时器开始事件、消息开始事件和错误开始事件介绍

一、概述 介绍: 在activiti中,事件按位置分可以有:开始事件、中间事件、边界时间、结束事件;按事件的特性区分有:捕获事件和抛出事件。除了事件,还有各种事件定义,常用的有:定时器事件定义、错误事件定义、信号事件定义、消息事件定义 、取消事件定义、补偿事件定义等。事件和事件定义可以进行组合,成为特定的事件。 此刻: 本文主要讲四种开始事件 无指定开始事件:不为开始事件指定任何的触发条件的事件...

fanrendale的博客 1709

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Webhook、消息队列与业务事件:处理重复、乱序和错误关联Webhook、消息队列与业务事件:处理重复、乱序和错误关联

财务系统在上午九点发出到账回执,合同系统上午九点零八分才发出签署确认。AcmeFlow 可能先收到付款,再收到签署;也可能因为网络重试先收到签署的第二次投递,再收到付款的第一次投递。更麻烦的是,一条来自别的租户的消息可能带着看似相同的业务编号,一个针对旧材料版本的签署结果可能在新材料提交后才迟到。若 Webhook handler 只按 business_key 查一条申请,然后直接写 status=READY,重复、乱序与错配就会变成错误开通。

我是小白呀的博客 844

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

MFC:以消息为基础的事件驱动系统和消息映射机制

MFC:以消息为基础的事件驱动系统、消息映射机制

qq_42279379的博客 1281

fltk-rs事件处理完全指南:回调、消息传递和自定义事件的终极教程

欢迎来到fltk-rs事件处理完全指南!🎯 fltk-rs作为Rust语言中最受欢迎的GUI框架之一,提供了强大而灵活的事件处理机制。无论你是Rust GUI编程的新手,还是希望深入了解fltk-rs事件系统的开发者,这篇文章都将为你提供完整的解决方案。在本文中,我们将深入探讨fltk-rs的三种核心事件处理方式:回调函数、消息传递和自定义事件处理,帮助你构建响应迅速、用户体验优秀的GUI应用程

gitblog_00247的博客 432

微信企业号开发:接收消息和事件

接收到的消息和事件,其实都是微信post到我们配置的URL的消息。接收普通消息就是用户给公众号发送的消息,事件是由于用户的特定操作,微信post给我们的消息。被动响应消息是我们收到微信post过来的普通消息或者是事件时,企业号通过Response.Write这种方式回复的消息。核心代码:把微信post过来的数据先解密,转为能处理的XML,再把XML转为对象 #region 将POST过来的数据转化

xuexiaodong2009的专栏 1万+

egui消息队列:异步消息处理和事件驱动架构

在现代GUI开发中,响应性和流畅性是关键指标。传统的阻塞式处理方式会导致界面卡顿,用户体验下降。egui作为一个即时模式(Immediate Mode)GUI框架,通过巧妙的消息队列和事件驱动架构,实现了高性能的异步处理能力。 你是否遇到过以下痛点? - 图片加载导致界面冻结 - 复杂计算阻塞用户交互 - 网络请求影响界面响应 - 多任务处理难以协调 egui的消息队列机制正是为解决这些问题而...

gitblog_00440的博客 1112

node-midi高级技巧:事件处理、定时消息和系统专属消息过滤

node-midi是一个基于RtMidi的Node.js MIDI I/O封装库,它允许开发者轻松地在Node.js环境中实现MIDI设备的输入输出功能。本文将分享三个高级使用技巧,帮助你更好地处理MIDI事件、发送定时消息以及过滤系统专属消息,提升你的MIDI应用开发效率。 ## 一、高效MIDI事件处理策略 MIDI事件处理是构建响应式MIDI应用的核心。通过合理设置事件监听器,你可以实时

gitblog_01077的博客 301

数据交互的实时性:消息队列和事件驱动架构

1.背景介绍 在当今的大数据时代,数据交互的实时性已经成为企业和组织的关键需求。实时数据处理和分析可以帮助企业更快地响应市场变化,提高业务效率,提升竞争力。为了实现数据交互的实时性,我们需要一种高效、可扩展的架构来处理和传输大量的数据。这就引入了消息队列和事件驱动架构这两种技术。 消息队列是一种异步的通信机制,它允许不同的系统或进程在不同的时间点之间传输数据。消息队列可以帮助我们解耦系统之间的...

AI天才研究院 656

第九章: Vert.x 的消息传递和事件流

**本章涵盖** - 消息传递与AMQP - 使用Apache Kafka的事件流 - 发送邮件 - 消息和事件流中间件的集成测试

白石的专栏 913

15 _ 消息队列和事件循环:页面是怎么“活”起来的?

好了,今天就讲到这里,下面我来总结下今天所讲的内容。如果有一些确定好的任务,可以使用一个单线程来按照顺序处理这些任务,这是第一版线程模型。要在线程执行过程中接收并处理新的任务,就需要引入循环语句和事件系统,这是第二版线程模型。如果要接收其他线程发送过来的任务,就需要引入消息队列,这是第三版线程模型。如果其他进程想要发送任务给页面主线程,那么先通过IPC把任务发送给渲染进程的IO线程,IO线程再把任务发送给页面主线程。消息队列机制并不是太灵活,为了适应效率和实时性,引入了微任务。

所学所思 925

个人微信Webhook回调开发:实时接收消息和进群事件

Webhook 是个人微信API二次开发的中枢。个微收事件稳定了,自动回复、私域、群运营才能实时。

2501_94198205的博客 139

浏览器原理:6.1消息队列和事件循环

消息队列和事件循环为什么需要消息队列和事件循环?消息队列和事件循环的具体流程 消息队列和事件循环是浏览器调度安排各个任务的两大机制,此时可以把浏览器看做一个OS,它需要来调度各个任务,包括确定任务优先级,分配任务的占用资源,以及负责提供与操作系统的接口等等。 为什么需要消息队列和事件循环? 简单来说,因为之前的机制无法满足需求,让我们从OS发展历史的角度来看浏览器中的消息队列和事件循环的必要性。在计算机刚出现的年代,还没有操作系统这一概念,所有的程序都是一个一个靠人工来输入进去,一个一个按顺序执行,不能随意

qq_51005544的博客 492
上一篇: VCL消息处理机制
下一篇: 有谁知道Delphi中"窗口"的创建过程?
aowo7144
博客等级 码龄10年 5粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值