我的方法。核心是引擎。 - 页 60

 
Igor Makanu:

...

但是,如果你知道Windows中的事件模型是如何工作的,并且有与编译器和表单设计器一起工作的经验,那么一切在哪里都是一样的。

ZS:这是我第三次看到Sharp,但我对Delphi有很好的经验,我完全看不出有什么不同,一切都以同样的方式工作,不工作的地方,第一次就被Google了。

我不记得Windows的事件模型 是如何工作的。而且对编译器和设计者有很长时间的经验。

我需要将一个创建的表单连接到一个MT应用程序,并解决这个问题。你说这很容易。

 
Georgiy Merts:

通过不展示它,而是相当清楚地描述其原则。这就是他们所反对的,这就是他们所说的:"道路是错误的"。

此外,"错 "的不是作者,而是那些反对者。他们有像鸡一样的大脑,不能记住他们在哪里创造了什么物体,在哪里和谁提到了它们,阵列中的每个单元意味着什么,它们可以从哪里被改变,在哪里不能被改变......。反对者感到愤慨是可以理解的。愚蠢的人没有训练他们的记忆力,使他们能够轻松地记住程序中的几千个对象和引用,而是削减自己的访问权限,定义一些区别,一些接口,一些多态函数......。他们自己折磨自己,就像在沙皇政权下一样,嗯......。

甩掉那些关于记忆的冷静的废话。有时会发现,这个论坛对话的主题没有追踪到两页的深度。此外,有太多的否认,记忆的作用如此美妙,正如他们试图告诉我们的那样。

 
Dmitry Fedoseev:

帮我解决一个问题。

  1. 我们需要将按下按钮和复选框的事件发送到MT5。
  2. 我们需要以编程方式改变表单中的复选框或按钮的状态。
如何做到这一点?
 

Windows表格就在那里。它启动并工作。按钮和复选框是可以点击的。

现在需要一个DLL来连接到MT5。谁知道如何做到这一点?

 
Реter Konow:

帮我解决一个问题。

  1. 我们需要将按下按钮和复选框的事件发送到MT5。
  2. 我们需要以编程方式改变表单中的复选框或按钮的状态。
如何做到这一点?

2.昨天伊戈尔展示了一个例子。它显示了在Expert Advisor中你如何调用导入的dll中的一个类的方法。也就是说,你需要在c#中写一个改变复选框状态的函数(方法)。如何改变复选框的属性,我不记得方法的名称,很容易通过下拉列表导航,你必须输入复选框的名称,按下一个点...

1.我不知道。可能不会。你必须从定时器中调用一个dll函数,并查看复选框的状态。至于像按下按钮这样的事件,我建议做一个数组,把事件堆在里面。但这并不难,考虑到在视觉上使用控制的优势。

 
Реter Konow:

安装了C#。打开了一个项目。制作了一个表单,并在其中添加了两个按钮和三个复选框。

下面是编辑器中的代码。

问题:为什么一个按钮有一个函数,第二个按钮和复选框的函数在哪里?

发现这个代码。

如何使用它来与MT5对接?

你需要证明第二个按钮是需要的--在上面做双击,然后代码会打开,功能会被添加。如果随后将按钮从表单中删除,项目 编译时会出现错误,代码应该从某个文件中手动删除,但不是你写的那个。

 
Dmitry Fedoseev:

2.昨天,伊戈尔展示了一个例子。该例子显示了专家顾问如何调用导入的dll中的一个类的方法。也就是说,你需要用c#写一个函数(方法)来改变复选框的状态。如何改变复选框的属性,我不记得方法的名称,很容易通过下拉列表导航,你必须输入复选框的名称,按下一个点...

1.我不知道。可能不会。你必须从定时器中调用一个dll函数,观察复选框的状态。至于像按下按钮这样的事件,我们也许可以创建一个数组,并在其中存储事件。但考虑到视觉处理控制的优势,这并不难。

好的。

因此,我们需要。

  1. 创建一个DLL。
  2. 用表格将其与寡妇应用程序连接起来。
  3. 编写方法来翻译在dll中按下按钮和检查框的事件。
  4. 编写方法来改变寡妇应用程序中的按钮和复选框的状态。
  5. 在dll中创建共享内存。这样,当从MT5访问时,按钮和复选框的状态变化标志被设置。然后,Windows应用程序访问共享内存,读取标志并使用它们来了解要改变的一个或另一个表格元素的状态。
  6. 从MT5的定时器中写出对DLL的循环引用,用于读取函数调用的标志或将文本输入字段。

    如果有数百个元素呢?

    如何组织共享内存?

    如果不仅需要改变表单中元素的按下/释放状态,而且还需要改变它们的颜色(例如,按钮),该怎么办?

    如果你需要从MT5中以编程方式改变表格中输入字段的文本,该怎么办?


     
    Dmitry Fedoseev:

    至于像按下按钮这样的事件,可能最好是做一个数组,将事件存储在其中。但这并不难,考虑到视觉工作与控制的优势。

    我曾经以更简单的方式来做这件事。

    1.用户按下了表单上的按钮--事件处理程序OnClick()被点击,Button1.Disable被创建。

    我喜欢在OnTick()中询问按钮的点击情况--在没有tick之前你不会做任何事情;你可以在计时器中设置一个大约300ms的中性值--用户不会注意到毛躁,MT5也不会慢下来。


    但我的例子的重点是,MT5中的面板可视化现在可以通过2次点击实现,按钮处理程序在一个.dll中工作,部分界面脚本可以转移到一个表单中,同样的表格,数据处理。一切

    最有价值的是节省了渲染开发的时间,在表单设计师 的帮助下,一切都在几个小时内完成;)


    Rehtag Konow:

    在DLL中创建一个共享内存。因此,当从MT5访问时,按钮和复选框的状态变化标志将被设置。应用程序访问共享内存,读取标志并知道一个或另一个表格元素的状态应该被改变。

    从MT5的定时器中写出对DLL的循环引用,用于读取函数调用的标志或将文本输入字段。

      如果有数百个元素呢?

      如何组织共享内存?

      你又走错了方向,走出蓬头垢面的2000年代!....,尽管不知为何我认为2000年代对你来说不是极限))))。

      没有冒犯的意思,我希望?

       
      Igor Makanu:

      我曾经以更简单的方式来做这件事。

      1.用户按下表单上的按钮--立即进入OnClick()处理程序,使Button1.Disable出现。

      2.然后由MT5决定如何安排交换;我喜欢在OnTick()中询问按钮的点击情况--无论如何,在没有达到tick之前,你可以在定时器中设置一个大约300ms的中性值--用户不会注意到毛躁,MT5也不会放慢。


      但我的例子的重点是,MT5中的面板可视化现在可以通过2次点击实现,按钮处理程序在一个.dll中工作,部分界面脚本可以转移到一个表单中,同样的表格,数据处理。一切

      最好的部分是节省渲染的时间,有了表单设计器,一切都在几个小时内完成;)


      你又走错了方向,走出蓬头垢面的2000年代!....,尽管我认为2000年代不是你的极限,))))。

      我希望不会有什么不愉快?

      无意冒犯,但遗憾的是,它不在点上。

      你在拿最接近的例子来推断,认为复杂性不会增加。这是个错误。

      即使你举的最简单的例子也是错误的。因为除了创建表格,你还需要创建一个DLL。然后在DLL里面创建一个TOTAL内存。

      随着表格元素数量的增加和MT5程序的功能变得更加复杂,这种互动变得非常繁忙和复杂。

      我已经在实践中检验了这一切。

       
      Реter Konow:

      好的。

      所以有必要。

      1. 创建一个DLL。
      2. 用一个表格将DLL连接到Windows应用程序。
      3. 编写方法,将按下按钮和复选框的事件转换为dll。
      4. 编写方法来改变寡妇应用程序中的按钮和复选框的状态。
      5. 在dll中创建共享内存。这样,当从MT5访问时,按钮和复选框的状态变化标志被设置。然后,Windows应用程序访问共享内存,读取标志并使用它们来了解一个或另一个要改变的表格元素的状态。
      6. 从MT5的定时器中写出对DLL的循环引用,用于读取函数调用的标志或将文本输入字段。

        如果有数百个元素呢?

        如何组织共享内存?

        如果不仅需要改变表单中元素的按下/释放状态,而且还需要改变它们的颜色(例如,按钮),该怎么办?

        如果我们需要以编程方式从МТ5改变表单中的输入字段的文本,怎么办?


        如果事件得到正确处理,那么控件的数量就不是问题。在dll中,我们可以创建一个数组或两个数组,一个用于对象名称,第二个用于事件类型。在dll中写一个有两个参数的函数,也是事件名称和类型。从每个所需的事件处理程序中,调用这个函数,使事件被放在数组中。另一种方法--从EA计时器中跟踪事件,因为方便,或者说,事实证明--同样的数组通过引用或什么,也是一个变量--数组中的事件数量。在调用该方法后,数组被清空。

        或者,也许处理一个数组更容易;在c#中有一个对象事件,所以我可以把它们变成一个数组。另外,也许有可能以某种方式摆弄一下,不要从每个事件处理程序本身调用一个函数。但这并不重要;无论如何,与接口能力和c#的所有功能相比,这都是小事一桩。