Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 5005
Beiträge: 43354
Benutzer: 7.267
Aktive Benutzer: 50
Links: 84
Wir begrüßen unseren neuesten Benutzer: Olid
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 3 Wochen
- Olid
vor 3 Wochen
- traderjens
06.03.25
- albarus_44
03.03.25
- Virus Voom
01.03.25
- weisnicht

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 40
Gesamt: 40
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 01.01.25
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 615
AVT befindet sich auf einem aufstrebenden Ast
Standard CHARTEVENT_OBJECT_CLICK Objekt nicht erkannt

Ich habe ein Problem in OnChartEvent mit dem CHARTEVENT_OBJECT_CLICK.

Es gibt (im Subwindow) insgesamt 13 Symbol Buttons, deren Namen setzt sich so zusammen:
indName="xRSI";
PFX=indName+"_"+IntegerToString(SubWin);
1. Button z.B. PFX+"but.dax"
2. Button z.B. PFX+"but.ibx"
Aufgelöst ergibt das xRSI_1but.dax xRSI_1but.ibx
Alle Button Namen sind in einem Array gespeichert string sNamButt[13];
Diese kann ich mir in einem Loop auch alle korrekt anzeigen lassen.

Im OnChartEvent sollen die Linien der Symbole auf Knopfdruck versteckt werden.
Dummerweise erkennt der Indikator den Knopfdruck bei den Symbol Buttons nicht.
Ich habe zuerst einen Loop versucht - negativ.
Danach habe ich den 1. Button direkt benannt (also den Dax Knopf) - negativ.

Jetzt bin ich ratlos, woran das liegen könnte.
Wenn jemand mal drüber schauen könnte, wäre ich ich für Ideen dankbar.

Als Beispiel die Show Funktion (Hide umgedreht):
Code:
// ====================================
// === Indexnummern sind dieselben wie in den Arrays
bool ShowIndexLine(int ArrNumber=-1)
{
   bSymVis[ArrNumber]=true;
   SetIndexStyle(ArrNumber,DRAW_LINE,STYLEDIS,WIDTHDIS, cSymCol[ArrNumber]);
   return(true);
}
(Ich lasse beide Versuchsteile mal unkommentiert)
Code:
void OnChartEvent(const int id, const long &lparam,
                  const double &dparam, const string &sparam )
{
   // ==============================  letter
   if(id==CHARTEVENT_KEYDOWN)
   {
      // ==> funktioniert
      if(lparam==StringGetCharacter(LETTERSHOW,0)) { DoHiding=-1; } //NoHiding
      if(lparam==StringGetCharacter(LETTERHIDE,0)) { DoHiding= 1; } //DoHide
      Print(__FUNCTION__," letter ",lparam," was pressed. DoHiding=",(int)DoHiding);
   }
   // ==============================  buttons
   if(id==CHARTEVENT_OBJECT_CLICK)
   {
      // ==> funktioniert NICHT
      for(int n=0; n<iNoOfSym; n++)                                  //iNoOfSym=13
      {
         if( sparam==sNamButt[n] )
         {
            Print(__FUNCTION__," Button ",sparam," was pressed");    //<== kein Print
            if(DoHiding==-1)                                         //NoHiding
            {
               if(ShowIndexLine(n))
               {
                  ObjectSetInteger(0,sparam,OBJPROP_STATE,false);
                  Print(__FUNCTION__," Sym vis=",(bool)bSymVis[n]); //SetIn ShowIndexLine
                  break;
               }
            }//NoHiding
            else if(DoHiding== 1)                                    //HideIndex
            {
               if(HideIndexLine(n))
               {
                  ObjectSetInteger(0,sparam,OBJPROP_STATE,true);
                  Print(__FUNCTION__," Sym vis=",(bool)bSymVis[n]); //SetIn HideIndexLine
                  break;
               }
            }//HideIndex
         }//AnIndexButton
      }
      
      // ==> funktioniert
      if(sparam==ButtonName)                                         // Save button
      {
         Print(__FUNCTION__," Button ",sparam," was pressed");
         if( SaveConfigToFile() )
         { 
              ChangeButton(0);                                       //->ToUnpressed
              ReInit();
         }
         else ChangeButton(1);                                       //SomeError->ToPressed
      }
      // ======================================================================
      // ==> funktioniert NICHT
      else if( sparam==PFX+"but.dax" )
      {
         Print(__FUNCTION__," Button ",sparam," was pressed");       //<== kein Print
         if(DoHiding==-1)                                            //NoHiding
         {
            if(ShowIndexLine(0))
            {
               ChangeIndexButton(sparam,0);                          //Unpressed
               Print(__FUNCTION__," Sym vis=",(bool)bSymVis[0]);     //SetIn ShowIndexLine
            }
         }//NoHiding
         else if(DoHiding== 1)                                       //HideIndex
         {
            if(HideIndexLine(0))
            {
               ChangeIndexButton(sparam,1);                          //Pressed
               Print(__FUNCTION__," Sym vis=",(bool)bSymVis[0]);     //SetIn HideIndexLine
            }
         }//HideIndex
      }//AnIndexButton
}
Danke, AVT
Mit Zitat antworten
  #2 (permalink)  
Alt 24.02.25
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 615
AVT befindet sich auf einem aufstrebenden Ast
Standard vorläufige Lösung

Nur um es mal festzuhalten. Als vorläufige Lösung habe ich jedem einzelnen Button mit einem #define einen Namen zugewiesen, z.B.
Code:
#define nameButDax PFX+"but.dax"
In OnChartEvent(...) bekommt unter der Bedingung CHARTEVENT_OBJECT_CLICK jeder definierte Name seine eigene Eventbehandlung, also z.B.
Code:
   // ==============================  buttons
   if(id==CHARTEVENT_OBJECT_CLICK)
   {
      // ==================
      if(sparam==nameButDax)
      {
         //Print(__FUNCTION__," Button ",sparam," was pressed");
         if(DoHiding==-1)                                            //NoHiding
         {
            if(ShowIndexLine(0)) ChangeIndexButton(sparam,0);        //Unpressed
         }
         else if(DoHiding== 1)                                       //HideIndex
         {
            if(HideIndexLine(0)) ChangeIndexButton(sparam,1);        //Pressed
         }
      }
   }
Das macht den Code zwar ellenlang und ist alles andere als das, was ich unter effektiver Programmierung verstehe, aber es funktioniert wenigstens. AVT
Mit Zitat antworten
Antwort

Lesezeichen


Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +2. Es ist jetzt 09:03 Uhr.





Suchmaschine - Reisen - Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2025 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------