Nikolai Semko: 是的,很明显,你可以随心所欲地画。在这种情况下,我没有设定一个目标来实现一个杰作。但我想改进的第一件事,是生成按钮图像的所有数组(在这种情况下是两个数组),然后只通过ArrayCopy复制它们,这样我们就不必每次都创建一个图像。这将大大减少工作,但代价是额外消耗内存,但由于现在16GB内存的电脑上已经很普遍了,如果甚至有很多按钮,额外的内存消耗不可能超过1-2MB,特别是如果相同的按钮会使用相同的阵列。所以,我不认为这是一个问题。最主要的是速度。
Nikolai Semko: 我不理解你,彼得。你说的是肉,我说的是骨架。如果你有骨头,你可以添加肉。我的例子中不是有 "Pressed"、"Pressed "这些州吗?你甚至看过GButton类的内部吗?彼得,我的建议是:放下一切,紧急研究OOP。你刚刚在你的项目中遇到了一个天花板,这就是所谓的臃肿的代码,在OOP的帮助下,它很容易被克服。
几乎完成了GButton类的例子,但要跑路了。我明天会完成它,并提出它。
很好。非常有趣。)
以下是你得到的东西。
该按钮可以显示在背景或前台,有或没有锁存功能。
在示例文件CanvasButton.mq5中,可以用鼠标拖动按钮。要做到这一点,只需按住Ctrl键来移动蓝色按钮,按住Shift键来移动红色按钮。
因为GButton类是CCanvas类 的后裔,这个例子演示了在CircleWu例子上使用CCanvas类的功能的能力(这在OnInit中实现)。因此,可以使用CCanvas类的函数在按钮上写文字。
当然,这门课并不假装是干净的。画面并不完美,3D也很传统;阴影没有实现,执行速度也没有优化。而且很可能有很多粗糙的边缘,缺乏各种检查。因此,不要严厉地评判。
如果你多花一点时间,当然可以做到。
![](https://c.mql5.com/3/128/push.png)
我只是想...你可以说--确定方向。
Canvas.mqh文件与原文件的不同之处在于,m_pixels数组被定义为public。
下面是我们得到的情况。
该按钮可以显示在后台或前台,可以点击或不锁定。
在示例文件CanvasButton.mq5中,可以用鼠标拖动按钮。要做到这一点,只需按下Ctrl键来移动蓝色按钮,按Shift键来移动红色按钮。
因为GButton类是CCanvas类的后裔,这个例子演示了在CircleWu例子上使用CCanvas类的功能的能力(这在OnInit中实现)。因此,可以使用CCanvas类的函数在按钮上写文字。
当然,这门课并不假装是干净的。画面并不完美,3D也很传统;阴影没有实现,执行速度也没有优化。而且很可能有很多粗糙的边缘,缺乏各种检查。因此,不要过于严厉地评判。
当然,如果你多花一点时间,你可以做到这一点。
我只是想...你可以说--确定方向。
Canvas.mqh文件与原文件的不同之处在于,m_pixels数组被定义为public。
尼古拉,在我看来,它的结果很好。我们已经有了一个良好的开端,可以走得更远。我将这种类型的按钮称为钥匙。如果你有4条清晰的框架线:-顶部,左边的光和右边的,底部-深色的为按下的状态,反之亦然,那就更好了(只需要添加一个浅色的背景,否则黑色背景的图表上的暗线将不可见)。然后你可以设置文字和图片。
总之,不错的尝试。)
.如果你将框架的4条清晰的线沿边缘划分:--顶部、左侧亮,右侧、底部暗,用于压制状态,反之用于压制状态,效果会更好(你只需要添加一个浅色背景,否则在黑色图形的衬托下,暗线将不可见)。
是的,很明显,你可以随心所欲地画。在这种情况下,我没有设定一个目标来实现一个杰作。但我想改进的第一件事,是生成按钮图像的所有数组(在这种情况下是两个数组),然后只通过ArrayCopy复制它们,这样我们就不必每次都创建一个图像。这将大大减少工作,但代价是额外消耗内存,但由于现在16GB内存的电脑上已经很普遍了,如果甚至有很多按钮,额外的内存消耗不可能超过1-2MB,特别是如果相同的按钮会使用相同的阵列。所以,我不认为这是一个问题。最主要的是速度。
我明白了,当我提出关于按钮的问题时,我想知道是否有可能用画布来做这个。
已按下。
已按下。
在这个例子中,框架的每一面都由几条线组成。框架的每一面共有4条渐变线。每条线都有不同的阴影,取决于按钮的状态 和框架的给定形状。如果CCanvas有能力将颜色设置为框架的特定渐变线,那么制作上述例子就很容易了。这正是我想了解的情况。
我明白了,当我提出关于按钮的问题时,我想知道是否有可能用画布来做这个。
已按下。
已按下。
在这个例子中,框架的每一面都由几条线组成。框架的每一面共有4条渐变线。每条线都有不同的阴影,这取决于按钮的状态 和框架的给定形状。如果CCanvas有能力将颜色设置为框架的特定渐变线,那么制作上述例子就很容易了。这正是我想了解的情况。
我不理解你,彼得。你说的是肉,我说的是骨架。如果你有骨头,你可以添加肉。我的例子中不是有 "Pressed"、"Pressed "这些州吗?你甚至看过GButton类的内部吗?彼得,我的建议是:放下一切,紧急研究OOP。你刚刚在你的项目中遇到了一个天花板,这就是所谓的臃肿的代码,在OOP的帮助下,它很容易被克服。
)))那么,我为什么要发起这个话题呢?) 我现在要学习OOP。
你的例子有按钮、点击事件和这些按钮的状态。一切都很好。但是尼古拉,我还是不明白我在问什么--CCcanvas类中是否有一个选项可以为框架的渐变线设置特定的颜色?看了你的例子,你可能认为有...如果是这样,你能画出与我的例子类似的东西吗?我感兴趣的是使用这个类的功能进行绘画的便利性和可能性,而你说的是速度和对这个类的功能的改进。这是一个稍微不同的话题。
)))那么,我为什么要发起这个话题呢?)我现在要去学习OOP。
最好从比Canvas更简单的东西开始学习OOP。
你甚至看过GButton类的内部吗?