帆布很酷! - 页 73 1...666768697071727374757677787980...93 新评论 Maxim Kuznetsov 2022.05.20 16:43 #721 Vitaliy Kuznetsov #:请问是否有将编辑框转换为画布的现成代码。我正在制作一个橡胶面板,需要这样一个元素。当您点击它时,您需要输入和删除数字,并看到一个闪烁的光标。如果没有,我将在点击时进行正常的替换。 有人这样做了,但不是图形问题,而是输入问题 - MetaTrader "拖动/处理 "了常规按钮(Enter/Tab)和一般的按键/重按/释放。 使用 DLL 并嵌入 Windows 控制窗口或记事本.exe 会更容易。 虽然因为信息匮乏(如今低层次的东西很难找到,而且数量很少)而纠结了几天,但最终代码数量会减少两个数量级,而且运行效果会更好。 Anatoli Kazharski 2022.05.20 17:28 #722 Vitaliy Kuznetsov #:请问是否有将编辑框转换为画布的现成代码。...EasyAndFastGUI - 用于创建图形界面的库 >>> 参见TextBox.mqh 文件 EasyAndFastGUI - библиотека для создания графических интерфейсов www.mql5.com Библиотека EasyAndFastGUI дает возможность создавать графические интерфейсы для своих MQL-программ. Vitaliy Kuznetsov 2022.05.20 17:32 #723 谢谢大家,我会尝试不同的方案 Maxim Kuznetsov 2022.05.22 10:48 #724 Maxim Kuznetsov #:有人做了,但不是图形问题,而是输入问题 - MetaTrader "拖动/处理 "了常规按钮(回车/Tab)和一般的按键/重按/释放。使用 DLL 并嵌入 Windows 控制窗口或 Notepad.exe 会更容易。虽然因为信息匮乏(如今低层次的东西很难找到,而且数量很少)而纠结了几天,但最终代码数量会减少两个数量级,而且运行效果会更好。 顺便说一下 "zambed "和记忆不同的实验:窗口是嵌入式的,但在重绘和输入方面存在问题。它根本无法使用,我在 "可能有效的事实 "上停了下来。 但这并不奇怪--EA 在一个轨道上运行,图表的图形用户界面在另一个轨道上运行,而且那里显然也有 不同的东西 。 有必要以某种方式解释 Windows,以便发送所有必要的信息并正确处理渲染。当有一个控件(就 Win 而言,它毕竟是一个窗口)将所有内容都放在另一个轨道上时,这就不是一个典型的图形用户界面设计了。 有必要给专家进程设置一些(什么?)标志(从操作系统的角度看,它并不像看起来那样是一个图形用户界面,它的某些部分并没有飞到它)和/或调用 AttachThreadInput。 如果这个问题得到解决,对于那些不怕 DLL 的人来说,前景将是光明的: - 可以使用 Gtk/Qt/Lazarus,使用它们的设计器和非常好的图形,进行 "图表内部对话"(顶层对话已经完成,但并不总是很方便,用户仍然要与图表一起工作)。 - 可以在 MDI 中制作自己的 "标签",从 "在图表中绘制窗口 "到 "在 MT 中制作标签 "只需半步。各种板块/板块将无需打开新图表 是的,在黑客层面:-) Ilyas 2022.05.23 09:41 #725 Vitaliy Kuznetsov #:请问是否有将编辑框转换为画布的现成代码。我正在制作一个橡胶面板,需要这样一个元素。当您点击它时,您需要输入和删除数字,并看到一个闪烁的光标。如果没有,我将在点击时进行正常的替换。 此类 EditCtrl(基本)的示例代码 //+------------------------------------------------------------------+ //| EditCtrl.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" #include <Canvas/Canvas.mqh> //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class CControl : protected CCanvas { public: bool Create(int x,int y,int w,int h) { if(!CCanvas::CreateBitmapLabel("TEST_EDIT",x,y,w,h,COLOR_FORMAT_ARGB_NORMALIZE)) return(false); if(!OnCreate()) return(false); Update(); return(true); } void TimerSet(uint msec) { if(msec) EventSetMillisecondTimer(msec); else EventKillTimer(); } void Update(void) { OnDraw(this); CCanvas::Update(); } virtual bool OnCreate(void) { return(true); } virtual void OnKeyDown(int key,uint flags) { } virtual void OnTimer(void) { } virtual void OnDraw(CCanvas &canvas) { } }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class CEditCtrl : public CControl { protected: string m_text; uint m_cursor_pos; bool m_cursor_visible; public: virtual bool OnCreate(void) { m_cursor_pos =0; m_cursor_visible=true; m_text =""; TimerSet(500); return(true); } virtual void OnKeyDown(int key,uint flags) { short code; switch(key) { case 35: // END if(m_cursor_pos==m_text.Length()) return; m_cursor_pos=m_text.Length(); break; case 36: // HOME if(m_cursor_pos==0) return; m_cursor_pos=0; break; case 37: // LEFT if(m_cursor_pos==0) return; m_cursor_pos--; break; case 39: // RIGHT if(m_cursor_pos>=m_text.Length()) return; m_cursor_pos++; break; default: if((code=TranslateKey(key))==-1) return; if(code<32) { if(code==8 && m_cursor_pos) { m_text=m_text.Substr(0,m_cursor_pos-1) + m_text.Substr(m_cursor_pos,-1); if(--m_cursor_pos>m_text.Length()) m_cursor_pos=m_text.Length(); break; } return; } if(m_cursor_pos!=m_text.Length()) m_text = m_text.Substr(0,m_cursor_pos) + "\xFFFF" + m_text.Substr(m_cursor_pos,m_text.Length()); m_text.SetChar(m_cursor_pos,code); m_cursor_pos++; break; } Update(); } virtual void OnTimer(void) { m_cursor_visible=!m_cursor_visible; Update(); } virtual void OnDraw(CCanvas &canvas) { CCanvas::Erase(ARGB(255,255,255,255)); if(m_text.Length()) canvas.TextOut(0,0,m_text,ARGB(255,0,0,0)); if(m_cursor_visible) { int x=0,y; if(m_cursor_pos) canvas.TextSize(m_text.Substr(0,m_cursor_pos),x,y); canvas.FillRectangle(x,0,x,canvas.Height(),ARGB(255,0,0,0)); } } }; CEditCtrl ExtEditCtrl; CControl *ExtInputFocus=&ExtEditCtrl; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit(void) { ExtEditCtrl.Create(100,100,200,20); ChartSetInteger(0,CHART_QUICK_NAVIGATION,false); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer(void) { ExtInputFocus.OnTimer(); } //+------------------------------------------------------------------+ //| ChartEvent function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { if(id==CHARTEVENT_KEYDOWN) ExtInputFocus.OnKeyDown((int)lparam,(uint)sparam); } //+------------------------------------------------------------------+ Vitaliy Kuznetsov 2022.05.23 11:14 #726 Ilyas #:此类 EditCtrl(基本)的示例代码 谢谢。我稍后会在 MT5 上试用。 Nikolai Semko 2022.05.23 11:54 #727 Ilyas #:此类 EditCtrl(基本)的示例代码 感谢 Ilyas 提供的高质量代码示例教程 Aleksei Beliakov 2022.05.23 13:39 #728 Ilyas #:此类 EditCtrl(基本)的示例代码 有什么方法可以禁用退格键,从而不删除对象? Ilyas 2022.05.23 15:00 #729 Aleksei Beliakov #:有没有办法禁用退格键,从而不删除对象? int OnInit() { ChartSetInteger(0,CHART_EVENT_OBJECT_CREATE,true); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| ChartEvent function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { if(id==CHARTEVENT_OBJECT_CREATE) { ObjectSetInteger(0,sparam,OBJPROP_HIDDEN,true); ChartRedraw(); Print(sparam); } } Aleksei Beliakov 2022.05.24 00:45 #730 Ilyas #: 即使我设置了这个属性,对象也会被退格删除,也许是因为它被选中了?如果创建时间较短,有没有办法将一个对象放在另一个对象的上面?例如,我创建了一个位图标签对象,然后又创建了其他对象,那么位图标签就会位于在它之后创建的对象之下。问题:除了删除并重新创建之外,有什么方法可以将位图标签放到在它之后创建的对象之上? 1...666768697071727374757677787980...93 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
请问是否有将编辑框转换为画布的现成代码。
我正在制作一个橡胶面板,需要这样一个元素。当您点击它时,您需要输入和删除数字,并看到一个闪烁的光标。
如果没有,我将在点击时进行正常的替换。
有人这样做了,但不是图形问题,而是输入问题 - MetaTrader "拖动/处理 "了常规按钮(Enter/Tab)和一般的按键/重按/释放。
使用 DLL 并嵌入 Windows 控制窗口或记事本.exe 会更容易。
虽然因为信息匮乏(如今低层次的东西很难找到,而且数量很少)而纠结了几天,但最终代码数量会减少两个数量级,而且运行效果会更好。
请问是否有将编辑框转换为画布的现成代码。
...
参见TextBox.mqh 文件
有人做了,但不是图形问题,而是输入问题 - MetaTrader "拖动/处理 "了常规按钮(回车/Tab)和一般的按键/重按/释放。
使用 DLL 并嵌入 Windows 控制窗口或 Notepad.exe 会更容易。
虽然因为信息匮乏(如今低层次的东西很难找到,而且数量很少)而纠结了几天,但最终代码数量会减少两个数量级,而且运行效果会更好。
顺便说一下 "zambed "和记忆不同的实验:窗口是嵌入式的,但在重绘和输入方面存在问题。它根本无法使用,我在 "可能有效的事实 "上停了下来。
但这并不奇怪--EA 在一个轨道上运行,图表的图形用户界面在另一个轨道上运行,而且那里显然也有 不同的东西 。
有必要以某种方式解释 Windows,以便发送所有必要的信息并正确处理渲染。当有一个控件(就 Win 而言,它毕竟是一个窗口)将所有内容都放在另一个轨道上时,这就不是一个典型的图形用户界面设计了。
有必要给专家进程设置一些(什么?)标志(从操作系统的角度看,它并不像看起来那样是一个图形用户界面,它的某些部分并没有飞到它)和/或调用 AttachThreadInput。
如果这个问题得到解决,对于那些不怕 DLL 的人来说,前景将是光明的:
- 可以使用 Gtk/Qt/Lazarus,使用它们的设计器和非常好的图形,进行 "图表内部对话"(顶层对话已经完成,但并不总是很方便,用户仍然要与图表一起工作)。
- 可以在 MDI 中制作自己的 "标签",从 "在图表中绘制窗口 "到 "在 MT 中制作标签 "只需半步。各种板块/板块将无需打开新图表
是的,在黑客层面:-)
请问是否有将编辑框转换为画布的现成代码。
我正在制作一个橡胶面板,需要这样一个元素。当您点击它时,您需要输入和删除数字,并看到一个闪烁的光标。
如果没有,我将在点击时进行正常的替换。
此类 EditCtrl(基本)的示例代码
此类 EditCtrl(基本)的示例代码
谢谢。我稍后会在 MT5 上试用。
此类 EditCtrl(基本)的示例代码
此类 EditCtrl(基本)的示例代码
有什么方法可以禁用退格键,从而不删除对象?
有没有办法禁用退格键,从而不删除对象?