针对C++和Delphi的LiveBindings一瞥

绑定表达式(Binding expression)并不是新概念,XAML和Flex开发者主要就依靠这个。但除C++/CX(只用于WinRT编程)之外,原生编程语言中通常见不到这种概念。不过为VCL和FireMonkey设计的LiveBindings却是个例外。

\u0026#xD;\n

我们先来介绍一些背景知识。VCL(Visual Component Library)是Delphi和C++ Builder都支持的老式UI框架。它支持x86和x64模式,但只能运行在Windows操作系统上。FireMonkey在新的应用程序中代替了VCL。它既支持Windows,也支持OS X。FileMonkey和VCL可用于同一应用程序中,不过不能用于同一模块中。

\u0026#xD;\n

据Embarcadero介绍:

\u0026#xD;\n
\u0026#xD;\n

LiveBindings基于称作绑定表达式的关系表达式,既可以是单向的,也可以是双向的。LiveBindings还包括控制对象和源对象。借助绑定表达式,任何对象都可以绑定到其他任何对象,只需要定义包含所要绑定对象的一个或多个属性的绑定表达式。例如,可以把一个Tedit控件绑定到一个Tlabel,这样当编辑框中的文本改变时,标签的标题也会根据绑定表达式计算而得的值自动调整。再举一个例子,把轨迹条控件绑定到进度条,拖动轨迹条时进度条也可以相应变化。

\u0026#xD;\n
\u0026#xD;\n

和很多Delphi/C++ Builder工具类似,LiveBindings通常使用GUI工具创建。这里有两种选择:LiveBindings Designer和LiveBindings Wizard。这无疑会让习惯于手工编辑XAML或Flex的绑定表达式的开发者不爽。

\u0026#xD;\n

请注意,以编程方式编辑绑定是可能的,但强烈建议不要这么做。这方面的文档深埋在一个关于控制台应用的教程中。

\u0026#xD;\n

与.NET中要求对象实现某些复杂的设计模式不同,Delphi和C++ Builder中的对象默认就是可绑定的。几乎和所有对象一样,只需要继承TObject,然后像正常情况一样暴露出属性。对C++ Builder而言,这意味着要使用__property扩展关键字。

\u0026#xD;\n

实际应用绑定表达式的代码非常繁琐,不过确实能支持复杂表达式。在下面的例子中,我们可以看到表达式“o1.IntegerValue + o2.IntegerValue”被绑定到了MyResultObject.IntegerValue属性。

\u0026#xD;\n

c685401877bbecc210d2840813157944.png\"

\u0026#xD;\n

在XAML技术中,绑定表达式是基于事件的。为避免内存泄漏,它们在内部使用了一个“弱事件(weak events)”结构来监控需要通过绑定表达式转发(relay) 的PropertyChanged事件。该结构要求所有绑定集中注册,不过事实上大多数开发者并没有意识到这一点。

\u0026#xD;\n

LiveBindings缺乏属性变更事件这一概念,因此要进行类似的抽象就不可能了。 虽然Bindings仍然是集中注册的,但属性变更时需要显式通知绑定引擎。这通过Tbindings.Notify函数完成,该函数接受对象和属性名。

\u0026#xD;\n

理论上,TBindings.Notify函数可由属性setter调用,而无需客户端代码显式调用。虽然文档没有介绍,但这又带来了多线程相关问题,不过确实消除了对弱事件的需求。

\u0026#xD;\n

参考英文原文:A Look at LiveBindings for C++ and Delphi

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/243393.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图像处理的基础

图像处理的基础 图像作为人类感知世界的视觉基础,是人类获取信息、表达信息和传递信息的重要手段。 多数图像传感器的输出是连续的电压波形信号,这些波形的幅度和空间特性都与其所感知的光照有关。为了产生一幅数字图像,我们需要把连续的感知数据转换为数字形式,这个转换…

查询计算机端口号被谁占用了

"到底是谁占用了80端口,该怎么查,怎么终止它?",这里就简单讲解一下,在windows下如何查看80端口占用情况?是被哪个进程占用?如何终止等. 这里主要是用到windows下的DOS工具,点击"开始"--"运行",输入"cmd"后点击确定按钮,进入DOS窗口…

SPI分配传感器的寄存器

SPI分配传感器的寄存器 SPI分配寄存,来驱动传感器。或者将一些指令传出来给UART由PC端来控制。 信号名称方向位宽(bit)说明spi_com_clkI1spi通信模块时钟sys_rst_nI1系统复位,低电平有效wr_enI1写使能,主机给从机发送数据的使能信号,当wr_en为1时主机才能给从机发送数据…

OpenGL样板程序,会转动的正方形

一个OpenGL样板程序,环境为VS2010 // Test_OpenGL.cpp : 定义控制台应用程序的入口点。 ///** 1、OpenGL工具函数库(GLU),GLU函数实用glu前缀** 2、窗口系统,以支持OpenGL渲染,对于X窗口系统是GLX函数&…

Hadoop入门学习笔记——五、在虚拟机中部署Hive

视频课程地址:https://www.bilibili.com/video/BV1WY4y197g7 课程资料链接:https://pan.baidu.com/s/15KpnWeKpvExpKmOC8xjmtQ?pwd5ay8 Hadoop入门学习笔记(汇总) 目录 五、在虚拟机中部署Hive5.1. 在node1虚拟机安装MySQL5.2.…

ECC的代码实现

ECC的代码实现 数据校验介绍:  通俗的说,就是为保证数据的完整性,用一种指定的算法对原始数据计算出的一个校验值。接收方用同样的算法计算一次校验值,如果和随数据提供的校验值一样,就说明数据是完整的。 如果是时序或者电路方…

FPGA图像处理的开发流程

FPGA图像处理的开发流程 1、需求分析及问题描述 问题描述应该清楚地描述问题而不是解决方法。它应该包括系统需要做什么、为什么要做,而不包括怎么做。 为了描述更具体,至少需要讨论三个方面。 第一是系统功能,也就是系统需要做什么。在一个图像处理应用中,需要详细说明图…

C/C++实现模糊控制,借助MATLAB辅助设计和fis.c文件

上一篇文章(C /C语言实现模糊控制)介绍了C/C中实现模糊控制该怎么做,开始提到的MATLAB模糊控制的C/C模糊控制接口fis.c库,不过这个文件有点老,在用VS2010编译的时候一大堆错误,在网上找关于C中使用 fis.c 的…

转载:Windows CE内存管理

内存管理如果你在写Windows CE 程序中遇到的最重要的问题,那一定是内存问题。一个WinCE 系统可能只有4MB 的RAM,这相对于个人电脑来说是十分少的,因为个人电脑的标准配置已经到了128MB 甚至更多。事实上,运行WinCE 的机器的内存十…

一些比较使用的技巧

一些比较使用的技巧 1、如何得到一个信号的上升沿 注意:时序逻辑有打一拍的特性,组合逻辑没有。 input vsync; reg vsync_r; reg vsync_r2; wire vsync_r2_n; wire vsync_rise;always@(posedge clk) beginvsync_r <= vsync;vsync_r2 <= vsync_r; endassign vsync_r2_…

2012年我读过的十本好书

1、《世上的光》是俄罗斯导演安德烈塔可夫斯基的拍立得摄影集。从中我们可以感受他在拍电影之余的个人生活&#xff0c;他的妻子&#xff0c;他的爱子以及梦幻般的乡村景色。而他配的文字更是让我们笃信他的确是个电影诗人。“影像&#xff0c;是真理的印记”“影像是谷粒&…

MFC界面编程新思路--模仿MATLAB式的界面

像下面的这个图片一样&#xff0c;做一个图像测量的软件&#xff0c;界面需要模仿MATLAB&#xff0c;以前老是新建一个对话框式的MFC应用程序&#xff0c;或者是一个SDI的应用程序&#xff0c;搞了一年&#xff0c;慢慢的也想到了一种新的思路&#xff0c;而且今天也做了一个De…

敏捷是如何使你跑得更快?

对于为何采用敏捷软件开发这个问题&#xff0c;企业经常提到的原因之一是希望能够更快地交付软件。研究表明敏捷项目能够进行地更快&#xff0c;例如《敏捷项目的成功证据》一文中描述的哥伦布市敏捷工作效率基准项目。\u0026#xD;\n在博文《谁说敏捷项目不能更快一些》中&#…

WinCE电源管理的简单介绍

电源管理的目的是节能,基本的节能方法是使系统适时的进出休眠状态.比如用户按下On/Off按钮,或者监视用户活动的定时器超时,或者应用呼叫api都可以使得系统休眠,用户再次按下On/Off或者其他唤醒中断将使得系统退出休眠.从而可见,电源管理模块和用户活动情况密不可分,电源管理是用…

算法映射技术

算法映射技术 将图像处理的算法转换为FPGA系统设计的过程为算法映射。 映射过程的首要目标便是确定系统设计的结构,在图像处理中常用的两种系统设计结构:流水线结构和并行阵列结构 1、流水线设计 (1)基本概念 流水线处理源自现代工业生产装配线上的流水作业,是指将待处理…

WS_EX_COMPOSITED是个BUG?

新建的SDI应用程序&#xff0c;在删除 文档视图结构以后&#xff0c;突然出现资源文件(*.rc)错误&#xff0c;说是WS_EX_COMPOSITED没有定义&#xff0c;只好删除了事&#xff0c;不知道怎么回事。

《北妹》:中国七零后作家的一次火山喷发(答记者问)

1&#xff0c;您是如何留意到盛可以及其创作的&#xff1f;是她在哪个方面的特质或者特点很突出呢&#xff1f; 答&#xff1a;我很早就知道盛可以&#xff0c;但是真正读她的作品是从《道德颂》开始的&#xff0c;当时我被她对人性尤其是男性的思考和揭示深深地震撼了。她对生…

windowsCE异常和中断服务程序初探

windowsCE异常和中断服务程序初探 ---------by nasiry 转载请说明出处 1。中断/异常相量的装入和执行方式。 中断和异常都是异步发生的事件&#xff0c;当该事件发生&#xff0c;系统将停止目前正在执行的代码转而执行事件响应的服务程序。而事件服务程序的入口点就…

ISERDES Guidelines

ISERDES Guidelines ISERDES模块的作用在于实现高速源同步输入数据的串并转换。 OSERDES模块的作用在于实现高速源同步输出数据的并串转换。 SERDES支持SDR和DDR两个模式。 SDR模式支持2、3、4、5、6、7、8bit位宽; DDR模式支持4、6、8bit位宽,10或14bit位宽需要两个模块级…

VC 2010的MFC函数,CMFCVisualManager::GetInstance()可能导致内存泄露

今天在网上看到一篇文章&#xff0c;关于CMFCVisualManager的内存泄露问题&#xff08; 链接是 http://zhanyonhu.blog.163.com/blog/static/1618604420113208121859/&#xff09;&#xff0c;当然还有其他的关于CMFCButton控件也有内存泄露问题&#xff0c;乱七八糟扯蛋&#…