Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Button Reaktion bei mehreren Indikatoren (http://www.expert-advisor.com/forum/showthread.php?t=6913)

AVT 15.02.21 21:28

Button Reaktion bei mehreren Indikatoren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe ein Problem mit der Reaktion auf Knopfdruck, wenn ich mehrere Indikatoren (-Knöpfe) auf einem Chart habe. Die Knöpfe der Indikatoren sind alle nebeneinander links unten positioniert (siehe Bild).

vorher festgelegt sind für alle Indikatoren identisch
- string LETTERSHOW="S", LETTERHIDE="H";
- int DoHiding=0;
Jeder einzelne Indikator definiert seinen Knopf fest, so:
Code:

// ======================= Button von Indikator 1
#define  ButtonText    "Vpta"  //TextOnButton
#define  ButtonName    "VALpta" //NameOfButtonObject

// ======================= Button von Indikator 2
#define  ButtonText    "Bdfb"    //TextOnButton
#define  ButtonName    "BNDdfibo" //NameOfButtonObject

Jeder Indikator hat seine Anweisungen, was passieren soll so:
Code:

void OnChartEvent(const int id, const long &lparam,
                  const double &dparam, const string &sparam )
{

  // ==============================  letter
  if(id==CHARTEVENT_KEYDOWN)
  {
      if    (lparam==StringGetCharacter(LETTERSHOW,0)) { DoHiding=-1; } //NoHiding
      else if(lparam==StringGetCharacter(LETTERHIDE,0)) { DoHiding= 1; } //DoHide
      else                                                DoHiding=0;    //Nothing
  }
  // ==============================  button
  if(id==CHARTEVENT_OBJECT_CLICK)
  {
      if(sparam==ButtonName)
      {
        if    (DoHiding==-1)
        {
            ReInit();
            ChangeButton(0);  //IsPressed->ToUnpressed
            DoHiding=0;      //ResetToNeutral
        }
        else if(DoHiding== 1)
        {
            ObjectsDeleteAll(ChartID(), PFX);
            ChangeButton(1);  //IsNotPressed->ToPressed
            DoHiding=0;      //ResetToNeutral
        }
        else if( DoHiding==0 && SaveConfigToFile() )
        {
            ReInit();
        }
      }
  }
}

Die einzelnen Button sind immer 35 Pixel breit und werden mit Abstand 0 nebeneinander gesetzt (also immer +35 für die xPosition).
Meine Terminal -Extras - Optionen - Objekte - Empfindlichkeit habe ich schon auf 2 Pixel runtergesetzt.
Dennoch passiert folgendes: wenn ich auf einen Knopf drücke, um den Indikator z.B. zu verstecken, wird nicht nur dieser Indikator versteckt, sondern willkürlich irgendein weiterer Indikator auch. Im Code kann ich keinen Fehler finden - wenn ich zuerst ein "H" sende, das für alle Indikatoren gleich ist: durch #define sind die Knöpfe eindeutig voneinander zu unterscheiden und es sollte nur derjenige Indikator reagieren, dessen Knopf anschließend gedrückt wird; es gibt auch nirgends irgendeine Fehlermeldung.

Hat jemand eine Idee, woran das liegen könnte?
AVT

AVT 16.02.21 15:29

Fehler gefunden
 
War mal wieder :eek: mein Fehler, hatte beim Kopieren teilweise den
Code:

if(sparam==ButtonName)
versehentlich mit gelöscht - so konnte das nix werden.
AVT

Indikator-Trading 16.02.21 15:32

Ich hatte in meinem aktuellen Projekt auch einige Stolpersteine mit Buttons und co gehabt, welche mich haben fast verzweifeln lassen. Generell ist das Erstellen einem kompliziertes Bedienmenü in MQL4/5 eine ziemliche Qual.

Meine Lösung war das korrekte weiterleiten der des ChartEvents abhängig davon zu machen, was gerade geklickt worden ist:

Code:

if((StringFind(sparam,"PasswordWindow")!=-1) && id==(CHARTEVENT_OBJECT_CLICK))
      PasswordWindow.ChartEvent(id,lparam,dparam,sparam);
  if((StringFind(sparam,"InfoWindow")!=-1) && id==(CHARTEVENT_OBJECT_CLICK))
      InfoWindow.ChartEvent(id,lparam,dparam,sparam);

Ansonsten hatte ich auch viele komische Reaktionen in anderen Bedienelementen, welche eigentlich rein logisch nicht hätten auftreten sollen.

Gruß Timo

AVT 16.02.21 16:17

Zitat:

Zitat von Indikator-Trading (Beitrag 45096)
Ich hatte in meinem aktuellen Projekt auch einige Stolpersteine mit Buttons und co gehabt, welche mich haben fast verzweifeln lassen. Generell ist das Erstellen einem kompliziertes Bedienmenü in MQL4/5 eine ziemliche Qual.
...
Ansonsten hatte ich auch viele komische Reaktionen in anderen Bedienelementen, welche eigentlich rein logisch nicht hätten auftreten sollen.

Solange das alles nur einen Indikator/EA betrifft, geht das. Wenn man aber etliche Indikatoren mit ähnlichem Aufbau hat (und sich dann per c&p die Arbeit verkürzen will), da kann einem schon mal was durch Lappen gehen.
AVT

traderdoc 16.02.21 17:07

Also, ich habe nun schon zahlreiche Dashboards mit unzähligen Buttons, Eingabefeldern etc. programmiert und alles lief wie geschmiert. Keine Beeinflussung gegenseitig, korrekte Ausführungsweisen - funktioniert!

traderdoc


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:23 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum