天天看点

delphi mousemove 判断鼠标是否移入控件_基础设施:一套基本控件

delphi mousemove 判断鼠标是否移入控件_基础设施:一套基本控件

类可以把需要重复使用的代码封装到一起多次使用,

但这样的代码仍不能被不同的程序使用。

把自己常用的代码编到一起,打包成库的话,就能制成一套自用工具库作为基础设施。

这里常用的部分,首先就是界面控件。

我希望仿造出一套普通PLC编程软件自带的模拟面板功能中常见的控件:

  • 按钮
  • 文本框
  • 进度条

结构

  • 用类封装一个点。
  • 在点的基础上扩展一个方块。
  • 在方块的基础上扩展一个基本控件。
  • 在元素的基础上扩展出各个控件。
class 
           

点和方块

  • 点和方块的方法只负责改变坐标与尺寸数据,不负责描绘。
  • 方块可以对齐其他方块,可以根据其他方块调整自己的位置与尺寸。
class 
           
class 
           
  • 点和方块也可以有参考其他点和或方块来设定位置和尺寸的方法,更方便于对其。
...
           

方块可以提供一些基本的计算功能,比如告诉外界是否包含某个点,告诉外界自己的中心位置,告诉外界自己的边界位置。

...
           

基本控件

  • 基本控件包含名称,显示字符,识别号等信息。
class 
           
  • 基本控件可以被点亮,有一个布尔值记录它的状态。控件本身只记录是否被点亮时可亮部分显示的不同颜色。
...
           
  • 基本控件可以被描绘。并提供一些基本的现实字符和名称的功能。描绘功能自然需要在窗口的主循环draw() 内调用,为方便起见可以标记为接口。
interface 
           
  • 基本控件可以被点击,可以判断是否被鼠标悬浮,但是不会做出反应,这一部分可以留到需要做出可点击效果的控件里实现。
...
           

按钮和灯控件

  • 基础控件本身就可以被点击和点亮所以仅决定如何描绘这个控件。
  • 控件样式可以简单通过构造方法配置。
class 
           
class 
           

文本框和进度条控件

  • 文本框用一种特别的画法专门显示文本,提示值或者状态。
  • 文本框可以设计成背景颜色随控件本身的被点亮状态变化,另外可以设置文本颜色。
class 
           
  • 进度条保有一个现在值,将这个值用长度表现出来。
  • 为了能简便地使用掩码限制值,进度条的值范围设计为在整形0-127范围内变化。
class 
           
  • 但在设定时可以给出各种方便的设定方法,在设定是做转换。比如浮点 0.0 - 1.0 范围设定,整数0-100设定,给定最大值设定,等等。
...
           
  • 进度条可以设置方向(纵/横)和条颜色及是否带边框。
...    
           

容器

  • 上述控件可以单独在全局建立,挨个在主循环里刷新描绘,但数量增多后会变得混乱难以管理。如果有一个容器容纳控件并负责刷新描绘将会方便很多。
class 
           
  • 容器可以被单独添加控件,也可以被添加一组控件。
...
           
  • 容器知道当前被鼠标悬浮的控件的识别号,并能传达到外界,让其他部分在鼠标点击时决定应该做什么工作。
...
           
  • 容器可以不直接拥有控件的引用,通过在实际使用的窗口程序外部继承后使用。有些需要在之后修改属性读取状态的控件可以保有引用,而不需要的则可以直接添加。
class 
           
  • 继承后创建实例在在实际窗口程序内刷新使用。
...
           

其他

  • 另外控件绘制比例和配色信息可以做成一些常量设置到别处,方便修改。
// pix
           
delphi mousemove 判断鼠标是否移入控件_基础设施:一套基本控件

https://github.com/keyboard2769/nb-kosui/tree/master/src/kosui/ppplocalui​github.com

继续阅读