新的MQL4语法 - 页 6 123456 新评论 Rakhman Aries Nugroho 2014.02.24 07:14 #51 SDC: 当我把图标的路径放在terminal_data_directory中时,编译器出错了,错误说不能打开虚拟商店文件夹中的文件,尽管我没有在虚拟商店中指定一个文件夹。我在 terminal_data_directory 中指定了一个文件夹。 我唯一能让它工作的方法是把文件放在与源代码相同的文件夹中,并且完全不指定路径,只是#property icon"MyIcon.ico" 嗨,万一有人对# 属性图标"\\Images\MyIcon.ico "有问题,你应该考虑图标的尺寸为96x96 px或更大。我也遇到过这个错误,但现在可以了。 Ex Ovo Omnia 2014.03.06 19:35 #52 我注意到,编译器执行了我不希望发生的铸造。 我有以下代码。 其中按键 对象的类是MT4String, 而函数 getKey() 返回更通用的类。同样的情况也发生在按钮 对象上。明确的铸造被省略了。 原始代码是这样的。 在JAVA中,有必要进行显式铸造,但MQL4编译器也能正常使用这种语法。 这种隐式铸造是一个特点,在C++中也是有效的吗?还是说这是一个错误? ydrol 2014.03.06 20:57 #53 我不是C++专家,但从基类到子类的转换被称为下转换,根据这个页面,在C++中下转换似乎也必须是显式的。(像Java)? 由于MQL4允许隐式下转换,这要么是一个 "特征",要么是一个错误:) 如果它是一个 "特性",那可能意味着编译器将无法警告编码者潜在的错误,所以它不是一个很好的特性。C++和Java都需要明确的下转换,这是有原因的? 此外,在MQL4中,没有内置的方法来检查对象的类别(例如instanceOf等),所以这意味着除非你实现自己的 "类型 "检查,否则运行时的错误是无法避免的。 Animal a; Dog d; ... if (a instanceOf Dog) { // no built in check like this - we all have to roll our own?? d = a; } Ex Ovo Omnia 2014.03.06 22:32 #54 ydrol: 我不是C++专家,但从基类到子类的转换被称为下转换,根据这个页面,在C++中下转换似乎也必须是显式的。(像Java)? 由于MQL4允许隐式下转换,这要么是一个 "特征",要么是一个错误:) 如果它是一个 "特性",可能意味着编译器将无法警告编码者潜在的错误,所以它不是一个好的特性。C++和Java都需要明确的下转换,这是有原因的? 此外,在MQL4中,没有内置的方法来检查对象的类别(例如instanceOf等),所以这意味着除非你实现自己的 "类型 "检查,否则运行时的错误是无法避免的。 是的,我也希望能有instanceof 或 ".class",但据我所知,即使在C++中也没有这个功能。甚至MQL4的调试器也不知道被监视对象的类型。我不太在意,因为MQL4的OOP功能实现得出奇的好,如果这是唯一的错误,那么我会说万岁。我只是好奇,它是否遵循了一些现有的模式,但似乎它是一个错误。 Bambang Sugianto 2014.03.07 04:55 #55 在旧的MT4中,我使用一个dll文件来创建EA一键式交易。 我可以在这些白色文本框中直接输入 参数...LOT, TP SL 直接在这些白色的文本框中输入。 当我点击买入或卖出时......我的EA会读取输入框中的文本。 在新MT4中,我看到了按钮功能......但我找不到创建和读取这样一个文本框的功能。 Ex Ovo Omnia 2014.03.07 05:03 #56 WDholic: 在旧的MT4中,我使用一个dll文件来创建EA一键式交易。 我可以在这些白色文本框中直接输入 参数...LOT, TP SL 直接在这些白色的文本框中输入。 当我点击买入或卖出时......我的EA会读取输入框中的文本。 在新MT4中,我看到了按钮功能......但我找不到创建和读取这样一个文本框的功能。 对于键盘输入,有一个对象类型OBJ_EDIT。如果你按下回车键,它就会触发CHARTEVENT_OBJECT_ENDEDIT 事件。但似乎回车键是完成编辑的唯一方法,例如,在对象边界外点击鼠标并不能完成编辑。这使我无法将该对象部署为对用户不友好的对象。 此外,如果提供空字符串作为初始值,则自动显示文本 "编辑"(这个词甚至可以被编辑),这真的令人困惑。 fly7680 2017.10.19 19:10 #57 void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam){ if(id==CHARTEVENT_OBJECT_ENDEDIT ){ if(sparam=="pulsanteEdit") Print("The text in the Edit field of the object with name ",sparam," has been changed"); } } void creaPulsanteEdit(const string objNameIns,const string objText,int xDistance,int yDistance,int xSize,int ySize,color clrIns,color clrTextIns){ if(!ObjectCreate(0,objNameIns,OBJ_EDIT,0,0,0)){ stampaErrore("Errore creazione pulsante edit"); return; } ObjectSetInteger(0,objNameIns,OBJPROP_CORNER,CORNER_LEFT_UPPER); ObjectSetInteger(0,objNameIns,OBJPROP_XDISTANCE,xDistance); ObjectSetInteger(0,objNameIns,OBJPROP_YDISTANCE,yDistance); ObjectSetInteger(0,objNameIns,OBJPROP_XSIZE,xSize); ObjectSetInteger(0,objNameIns,OBJPROP_YSIZE,ySize); //--- set the text ObjectSetString(0,objNameIns,OBJPROP_TEXT,objText); ObjectSetString(0,objNameIns,OBJPROP_FONT,"Arial"); ObjectSetInteger(0,objNameIns,OBJPROP_FONTSIZE,10); ObjectSetInteger(0,objNameIns,OBJPROP_READONLY,false); ObjectSetInteger(0,objNameIns,OBJPROP_BGCOLOR,clrIns); ObjectSetInteger(0,objNameIns,OBJPROP_COLOR,clrTextIns); ObjectSetInteger(0,objNameIns,OBJPROP_BORDER_COLOR,LightSeaGreen); //--- display in the foreground (false) or background (true) ObjectSetInteger(0,objNameIns,OBJPROP_BACK,false); ObjectSetInteger(0,objNameIns,OBJPROP_SELECTABLE,false); ObjectSetInteger(0,objNameIns,OBJPROP_SELECTED,false); ObjectSetInteger(0,objNameIns,OBJPROP_HIDDEN,false); } void OnTick(){ creaPulsanteEdit("pulsanteEdit", string1, 10, 275,60,30,Black,LightSeaGreen); Print("string1: "+string1); }我创建了这个按钮来编辑里面的文本,我想读取文本字符串并将其转换为一个双数或整数变量,但它不工作,也不打印 "名称为 "的对象的编辑栏中的文本 已被改变"你能帮助我吗? 123456 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
当我把图标的路径放在terminal_data_directory中时,编译器出错了,错误说不能打开虚拟商店文件夹中的文件,尽管我没有在虚拟商店中指定一个文件夹。我在 terminal_data_directory 中指定了一个文件夹。
我唯一能让它工作的方法是把文件放在与源代码相同的文件夹中,并且完全不指定路径,只是#property icon"MyIcon.ico"
嗨,万一有人对# 属性图标"\\Images\MyIcon.ico "有问题,你应该考虑图标的尺寸为96x96 px或更大。我也遇到过这个错误,但现在可以了。
我注意到,编译器执行了我不希望发生的铸造。
我有以下代码。
其中按键 对象的类是MT4String, 而函数 getKey() 返回更通用的类。同样的情况也发生在按钮 对象上。明确的铸造被省略了。
原始代码是这样的。
在JAVA中,有必要进行显式铸造,但MQL4编译器也能正常使用这种语法。
这种隐式铸造是一个特点,在C++中也是有效的吗?还是说这是一个错误?
我不是C++专家,但从基类到子类的转换被称为下转换,根据这个页面,在C++中下转换似乎也必须是显式的。(像Java)?
由于MQL4允许隐式下转换,这要么是一个 "特征",要么是一个错误:)
如果它是一个 "特性",那可能意味着编译器将无法警告编码者潜在的错误,所以它不是一个很好的特性。C++和Java都需要明确的下转换,这是有原因的?
此外,在MQL4中,没有内置的方法来检查对象的类别(例如instanceOf等),所以这意味着除非你实现自己的 "类型 "检查,否则运行时的错误是无法避免的。
我不是C++专家,但从基类到子类的转换被称为下转换,根据这个页面,在C++中下转换似乎也必须是显式的。(像Java)?
由于MQL4允许隐式下转换,这要么是一个 "特征",要么是一个错误:)
如果它是一个 "特性",可能意味着编译器将无法警告编码者潜在的错误,所以它不是一个好的特性。C++和Java都需要明确的下转换,这是有原因的?
此外,在MQL4中,没有内置的方法来检查对象的类别(例如instanceOf等),所以这意味着除非你实现自己的 "类型 "检查,否则运行时的错误是无法避免的。
是的,我也希望能有instanceof 或 ".class",但据我所知,即使在C++中也没有这个功能。甚至MQL4的调试器也不知道被监视对象的类型。我不太在意,因为MQL4的OOP功能实现得出奇的好,如果这是唯一的错误,那么我会说万岁。我只是好奇,它是否遵循了一些现有的模式,但似乎它是一个错误。
在旧的MT4中,我使用一个dll文件来创建EA一键式交易。
我可以在这些白色文本框中直接输入 参数...LOT, TP SL 直接在这些白色的文本框中输入。
当我点击买入或卖出时......我的EA会读取输入框中的文本。
在新MT4中,我看到了按钮功能......但我找不到创建和读取这样一个文本框的功能。
在旧的MT4中,我使用一个dll文件来创建EA一键式交易。
我可以在这些白色文本框中直接输入 参数...LOT, TP SL 直接在这些白色的文本框中输入。
当我点击买入或卖出时......我的EA会读取输入框中的文本。
在新MT4中,我看到了按钮功能......但我找不到创建和读取这样一个文本框的功能。
对于键盘输入,有一个对象类型OBJ_EDIT。如果你按下回车键,它就会触发CHARTEVENT_OBJECT_ENDEDIT 事件。但似乎回车键是完成编辑的唯一方法,例如,在对象边界外点击鼠标并不能完成编辑。这使我无法将该对象部署为对用户不友好的对象。
此外,如果提供空字符串作为初始值,则自动显示文本 "编辑"(这个词甚至可以被编辑),这真的令人困惑。
我创建了这个按钮来编辑里面的文本,我想读取文本字符串并将其转换为一个双数或整数变量,但它不工作,也不打印 "名称为 "的对象的编辑栏中的文本 已被改变"
你能帮助我吗?