مرحباً جميعاً،
إنني أتساءل عما إذا كان أي معلمي الكود قادرين على مساعدتي في الاتجاه الصحيح في هذا الأمر. أنا عكس محترف البرمجة ، لكنني أمضيت ساعات لا حصر لها على لوحة تداول تأتي بشكل جيد للغاية ، وأواجه بعض الأخطاء التي لا يمكنني معرفة كيفية تجاوزها. هذا المنشور يعالج الخطأ الأول. آسف مقدما للطول.
لقد وجدت واستخدمت كتلة التعليمات البرمجية من هذا الموضوع لتمكينني من إضافة مؤشرات من واجهة المستخدم المخصصة الخاصة بي عند الطلب:
https://www.mql5.com/en/forum/73391/page3(المنشور رقم 27 بواسطة Kray). اضطررت إلى إجراء تعديلات طفيفة فيما يتعلق باستخدام أوامر Sleep و keybd ، وعمومًا ، كان يعمل. (لاحظ كما أعترف أدناه ، أنا مخترق ، لذلك إذا كنت تعتقد أن استخدامي لهذه الأوامر مكرر بطبيعته وغبي ، فأنا متأكد من أنك على صواب - ولكن عندما وجدت مزيجًا نجح ، لم أكن أرغب في ذلك للعبث بها ، لأنها كانت هشة بالنسبة لي.)
منجم أدناه:
تم إدراج رمز #import user32.dll int GetAncestor (int، int) ؛ int RegisterWindowMessageW (سلسلة MessageName) ؛/For Start مؤشر مخصص int PostMessageW (int hwnd، int msg، int wparam، uchar Name # 91؛ # 93؛) ؛/For Start المؤشر المخصص int FindWindowW (سلسلة lpszClass ، سلسلة lpszWindow) ؛/لمؤشر البدء المخصص/int keybd_event (int bVk، int bScan، int dwFlags، int dwExtraInfo) ؛/For Start المؤشر المخصص #import #define VK_RETURN 13/ENTER key # import/For Start المؤشر المخصص باطل StartCustomIndicator (int hWnd ، string IndicatorName ، bool AutomaticallyAcceptDefaults = true)/true = تخطي مربع حوار المؤشر {Sleep ( 100) ؛ uchar name2 # 91 ؛ # 93 ؛ ؛ StringToCharArray (IndicatorName، name2،0، StringLen (IndicatorName)) ؛ طباعة (IndicatorName = IndicatorName) ؛ طباعة (ArraySize (name2) = ArraySize (name2)) ؛ لـ (int i = 0 ؛ i lt ؛ ArraySize (name2) ؛ i ) {Print (name2 # 91 ؛ i # 93 ؛ = name2 # 91 ؛ i # 93 ؛) ؛ } int MessageNumber = RegisterWindowMessageW (MetaTrader4_Internal_Message) ؛ النوم (100) ؛ int r = PostMessageW (hWnd ، MessageNumber ، 15 ، name2) ؛ النوم (200) ؛ إذا (AutomaticallyAcceptDefaults) {keybd_event (13، 0، 0، 0) ؛ int ind_settings = FindWindowW (NULL ، مؤشر مخصص - IndicatorName) ؛ PostMessageW (ind_settings ، 0x100 ، VK_RETURN ، name2) ؛ keybd_event (13 ، 0 ، 0 ، 0) ؛ }}
كانت المشكلة في وقت مبكر أنها كانت تفشل. سأحصل على خطأ ”مسار” لا يمكن فتح الملف. كان هذا مانعًا في وقت مبكر ولكن بعد ذلك اكتشفت أنه إذا قمت بإنشاء اسم ملف المؤشر الخاص بي 15 حرفًا بالضبط ، فسيتم إلغاء حظري. استمر هذا بشكل عام بنجاح لعدة أيام ، وربما حتى أسبوع أو أسبوعين. ولكن بشكل متقطع ، سأواجه مشكلة حيث تم تفسير المؤشر وسلسلة المسار بشكل غير صحيح من خلال ما يمكنني تحديده فقط ليكون وظيفة PostMessageW. عندما فشل ، كان يقوم بالإبلاغ عن أحرف إضافية أو غير منطقية في اسم الملف الذي يحاول فتحه. لذا بدلاً من قول ”لا يمكن فتح ملف” MyIndies \ MyIndicator.ex4 ”، فإنه سيظهر أنه لا يمكن فتح الملف” MyIndies \ MyIndicator؟ L .ex4. ” لذلك لمدة أسبوع أو أسبوعين جيدًا ، عادةً ما يتم تحميل المؤشر بشكل جيد ، ولكن بشكل متقطع سيتم تفسير مسار واسم المؤشر الخاص بي بشكل غير صحيح. في هذه الحالات (ربما بعد تغيير إطارات المخططات ، أو النقر فوق علامات تبويب أخرى ، أو غيابي لبعض الوقت) ، يمكنني عادةً إعادة تحميل القالب أو EA والعودة إلى الحالة الجيدة. من المثير للاهتمام ، في جميع الحالات ، أن بيانات الطباعة الخاصة بي في كتلة التعليمات البرمجية أعلاه تعرض دائمًا نتائج متسقة. إنها متسقة من حيث وقت استدعاء المؤشر بنجاح وكذلك عند تفسير متغيرات متعددة لاسم الملف غير الصحيح. لا يمكنني إلا أن أخمن أن الخطأ حدث في أمر PostMessageW ، على الرغم من أنني لم أتمكن من إجباره على إعادة إنتاج الخطأ عند الطلب ، وبالتأكيد ليس لدي أي فكرة عن السبب.
في اليوم أو اليومين الأخيرين ، فجأة كنت أتلقى رسائل الخطأ دائمًا. اكتشفت من خلال بعض التجارب والخطأ أنه إذا قمت بتقليص طول اسم المؤشر الخاص بي من 15 حرفًا إلى 14 حرفًا ، فسأعود إلى الحالة الجيدة. كان من الواضح جدًا أن الرقم 15 كان الرقم السحري من قبل ، والآن الرقم السحري هو 14. لا أعرف لماذا سيكون أي رقم رقمًا سحريًا ، ناهيك عن سبب تغييره بشكل واضح ونهائي منذ يوم أو يومين. أنا عالق تمامًا في فهم أي من هذا وأعمى عن كيفية عمل عناصر واجهة برمجة تطبيقات Windows هذه ، وأنا مستاء عندما يتعلق الأمر بالعمل مع uchars أيضًا. لقد أمضيت ساعات في البحث على Google ومحاولة حلها ولكن دون جدوى.
إذا كان بإمكان أي شخص شرح ذلك ، أو مساعدتي في حله ، أو حتى توجيهي إلى مورد حيث يمكنني مساعدة نفسي ، سأكون في غاية الامتنان.
إذا كنت قد قرأت هذا الآن ، أشكرك كثيرًا.
قدم