在Canvas上做一个众包项目 - 页 13

 
Igor Volodin:


对我来说,创建一个产品开发团队更容易,其成员在商定的程度上,将从产品销售中获得利润(也许有人是项目的思想家,有人为股份提供资金,有人是程序员)。

而且,由于每个人都有经济上的动力,所以也要把接口的必要库作为项目的一部分来实现。

同意,但图书馆本身应该是公开的众包 )
 
o_O:
伊戈尔-沃罗金


对我来说,创建一个产品开发团队更容易,其成员在商定的程度上,将从产品销售中获得利润(也许有人是项目的思想家,有人为股份提供资金,有人是程序员)。

而且由于所有的人都有经济上的动机--在项目内实施,并为接口提供必要的库。

我同意,但这个库本身应该是开源的众包的)。
我读了这个主题,不明白有什么必要--在Canvas上从头开始画按钮。你能不带感情地解释吗?
 
Alexey Volchanskiy:
我看了这个主题,还是不明白为什么有必要在Canvas上从头画一个按钮。你能不带感情地解释吗?
我在ObjectCreate和ResourceCreate 之间做了选择。
,因为MT开发者不是万能的,用琐碎的请求来打扰他们是很耗时间的。
 

为什么它可能会派上用场。

1.位图上的界面是快速的。如此之快,以至于它几乎与系统中的那个没有区别。例如,我已经实现了带有梯度的半透明元素,即使它们移动,也能顺利渲染,没有可见的延迟,同时考虑到其他带有半透明梯度的对象上的颜色混合和alpha通道计算。

2.该接口是可扩展的。你可以使应用程序更加复杂,它不会因为删除和创建大量的图对象而变慢。重绘的成本是最低的,它只是在千分之一秒内更换一张图片。

3.可以创建现成的控件,也可以创建新的控件,因为你可以提供自己的事件池,比如说。

OnMouseDown - 按住LKM

OnMouseUp - 按下LKM

OnMouseHoverOn - 将鼠标光标悬停在一个物体上。

OnMouseHoverOut - 将鼠标指针从对象上移开

OnMouseClick - 在对象边界内按下并点击。

OnMouseDblClick - 鼠标在对象的边界内双击。

OnDragStart - 在按下鼠标左键开始移动时发生一次事件。

OnDragMove - 用鼠标左键移动时产生的事件

OnDragEnd - 使用LKM移动后产生的事件

OnPut - 对象被投向另一个对象

OnGet - 对象被转储为另一个对象

OnFocus - 对象获得焦点

OnBlur - 对象失去焦点

OnResize - 对象已经改变了尺寸

OnParentResize - 父对象已经改变了尺寸

OnKeyPress - 一个键被按下

OnChange - 一个字段的值改变了

等。

 
Igor Volodin:

为什么它可能会派上用场。

1.位图上的界面是快速的。速度之快,几乎与系统界面无异。例如,我已经实现了带有梯度的半透明元素,即使它们移动,也能顺利渲染,没有任何可见的延迟,考虑到其他带有半透明梯度的对象上的颜色混合和alpha通道计算。

2.该接口是可扩展的。你可以使应用程序更加复杂,它不会因为删除和创建大量的图对象而变慢。重绘的成本是最低的,它只是在千分之一秒内更换一张图片。

3.可以创建现成的控件,也可以创建新的控件,因为你可以提供自己的事件池,比如说。

OnMouseDown - 按住LKM

OnMouseUp - 按下LKM

OnMouseHoverOn - 将鼠标光标悬停在一个物体上。

OnMouseHoverOut - 将鼠标指针从对象上移开

OnMouseClick - 在对象边界内按下并点击。

OnMouseDblClick - 鼠标在对象的边界内双击。

OnDragStart - 在按下鼠标左键开始移动时发生一次事件。

OnDragMove - 用鼠标左键移动时产生的事件

OnDragEnd - 使用LKM移动后产生的事件

OnPut - 对象被投向另一个对象

OnGet - 对象被转储为另一个对象

OnFocus - 对象获得焦点

OnBlur - 对象失去焦点

OnResize - 对象的尺寸已经改变

OnParentResize - 父对象已经改变了尺寸

OnKeyPress - 一个键被按下

OnChange - 一个字段的值改变了

等。

详尽无遗,谢谢你!

 
读了这个主题,很有意思。遗憾的是,大约三年前,关于接口的问题没有这样的骚动。

我不认为发布我的代码有什么意义,因为很有可能由于懒惰和参与者之间的沟通困难(他们已经被观察到了),我的代码会被拖到地下室去修改,我(和社区)根本不会从中受益,所以这个倡议会消亡。

但要参与这个项目,我可以,从讨论必要的功能和铸造具体的实施细节开始,因为这样做是有好处的,姑且称之为框架。

这个好处很简单,亚历克斯在前几篇文章中已经说过。社区可以影响终端的开发者,将修改引入MQL平台。

我对改进的希望(直接与编程接口有关)如下。

  1. MQL应用程序 - 作为一个独立的程序类型,不取消其他程序(它没有onTick,也没有可能参考默认的符号 - 这是过去的遗迹,但有可能得到任何符号的交易环境和交易,因为一切是多货币),应用程序不应该在特定符号的图表上启动,而是在自己的窗口中。如果你把这样的程序拖到图表上,就会打开一个新的窗口。而拖放是没有必要的--在导航器中点击2次--也会打开一个新窗口。这类似于一些人要求为另一种语言的开发提供终端的API。开发主题--可以假设这样的程序,经过特殊编译,可以在没有终端的情况下运行(为了安全起见,只允许通过市场进行这种编译)。这听起来可能很疯狂,但如果是这样呢?
  2. 支持第三方矢量字体作为一个单独的文件呈现,并能够作为一种资源进行编译(在文档中说明,但没有实施)。
  3. 鼠标滚动事件捕获
  4. 右键菜单锁定。右边的按钮现在被处理了,但它是无用的。
  5. 处理系统剪贴板,创建自己的文本编辑控件(包括多行编辑器),空格键和回车键已经可以被锁定--不错。
 

@Igor Volodin,@Combinator,@Anatoli Kazharski

我先说说疮疤的问题)。
我最关心的问题是存储渲染参数的某种通用性/抽象性。

----

据我们了解,所有的控件都同样使用字体、背景颜色和文本颜色等。
当所有这些参数对所有的控件都是一样的时候,那么界面就会有一个共同的外观,有一个单一的概念。

但如何存储它们呢?因为控件并不总是使用所有的参数。
+ 这个系统很复杂,因为元素有不同的状态,应该以不同的方式使用字体和背景颜色。它们是激活、禁用、结束或选择等。
+ 有几组控制器--解脱(如Button)和输入字段(如Edit、List),什么时候是渲染它们的背景?

----

在目前的工作思路中,我有一个GAttribBase类的 最小属性元素,它包含5个基本参数(字体/大小,背景/边界颜色,边界大小)。

这些基础元素被用来形成一个数组,用于GAttribut类的 状态(激活/取消/结束/选择,等等)。

然后为不同的元素类型填充GAttribut--浮雕、可编辑等。


因此,我们只需填写一次渲染参数(我们将它们存储在xml中),它们可以被编辑,以创建不同的设计,我们在全局范围内使用它们,而不需要为每个控制器定义它们。

当然,如果某些控制器需要定义自己的渲染参数--只要在控件中创建自己的GAttributribut对象并指定所需的颜色即可。

----

这种模式是有效的,统一的设计很快就实现了,所有的控件都从公共阵列中获取颜色。

但在我看来,这并不普遍。用户不了解基础GAttribBase的哪些参数被用于渲染这个或那个控件。
要让编码员确切地知道要改变什么颜色,他就必须研究控件的渲染功能。 这真的很麻烦。

-----

总之,有什么想法可以让编码者摆脱颜色管理(直接使用预定义的颜色,在一开始就不去管它们)。

另一方面,如果他想给屏幕上的一些控件重新上色,他不必调查在什么情况下使用什么GAttribBase。

 
o_O:

@Igor Volodin,@Combinator,@Anatoli Kazharski

总的来说--你有什么想法,一方面让编码者摆脱色彩工作(这样它就可以直接使用铺设好的颜色,而不需要在一开始就对它们进行处理)。

而另一方面,如果他们想给屏幕上的一些控件重新上色,他们可以不用进入绘图函数的迷宫,搜索什么GAttribBase在什么情况下使用。

好了,主题。

例如,我们应用程序的主对象,让我们称之为App,与ConcreteTheme对象相关联。

什么是主题对象。
颜色(背景、前景、禁用、激活等)、基本尺寸、标准情况下的字体大小:标题大小、普通大小等。为:面板、按钮、复选框等提供精灵。

一个新的主题是一个新的类/结构,其值已经改变。但更好的是,主题可以通过只重写某些参数来继承。


其余的 - 控件的层次结构,其中每个控制器默认使用对象主题的必要值之一。如果它需要覆盖这个,我们就调用一个方法来处理这个属性,指定新的值。

例如,SetBgColor(XRGB(255,0,128))。

CView - 一个提供基本的基于事件的交互的基本类
- CRect - 坐标
- Cpanel有一个bgcolor
- CB按钮有一个状态对象,每个状态都有bg
- CText有一个文本颜色和字体属性
- 循环

以此类推。

如果你想用xml来描述这些元素。

然后对于每个类的控件或基元,我们需要创建一个生成类,我们称之为 "build-container",它将把属性(bgcolor="(255,0,128)")映射到类的相应方法(SetBgColor(attrValue))。这样的构建容器将被XML解析器解析,输出将是一个用所需值初始化的对象,如果没有指定值,则用默认值。

 

这里的Theme 和我的一样--一组GAttributors 用于不同类型的控件及其状态。

但你已经提出了代码员实现透明化的第一步--为特定的控件添加函数以改变其渲染属性(SetBgColor等)。

基本上我同意,它将清楚它有什么颜色,什么可以改变。


那么这样一个问题--Theme是否意味着未使用的参数的冗余?

假设在我的基本GAttribBase中,对于某些控件(例如按钮),我们只使用背景颜色 和尺寸,而其他参数--边框厚度等在这个控件中没有使用。

也就是说--你是否有一个适用于所有控件的基础元素?在那里存储 "适用于所有情况 "的信息,还是所有的控件都只有自己的参数而没有通用性的开销?

 
o_O:

...

总的来说--有什么想法可以让程序员不需要处理颜色(这样它就会使用默认的颜色,在一开始就不需要理会它们)。

另一方面--这样,如果他想给屏幕上的某个控制器重新上色,他就不必潜入渲染函数的荒野,找出GAttribBase是在什么情况下使用的。

为每个项目设置默认值。如果用户需要改变一些东西,对于每个项目属性,应该有一个方法来设置新的值。我现在是这样做的。

我还没有这个东西。

如果你需要在 "两个计数 "中改变所有元素的属性,那么只需在所有界面元素都可以访问的那个类中创建单独的方法(用于设计相关的、适用于所有元素的共同属性)。

原则上,我已经可以看到如何在我的模式中实现这一点。例如,通过活动。但随后在每个元素的事件处理程序中,你需要处理这个事件(代码很臃肿)。第二个选择,在一个处理普通GUI事件的类中创建一个特殊的公共方法,甚至更高,所有指向GUI元素的指针都存储在这里。它们都是自定义MQL-应用类的基类,用户将可以直接访问它们。它可以是类似于MQL中的 重载 ObjectSet 方法(例如ElementSet),其中(1)属性和值或(2)属性、修改器和值必须被指定。

但所有这些都是我关于我的计划的推理。我不排除当我开始过渡时,它仍然会有很大的变化。所以我上面写的一切可能不再与这里讨论的话题有关。)