Einzelnen Beitrag anzeigen
  #5 (permalink)  
Alt 08.01.18
mocwoc mocwoc ist offline
Neues Mitglied
 
Registriert seit: Dec 2017
Beiträge: 6
mocwoc befindet sich auf einem aufstrebenden Ast
Standard Versuchs - EA mit Indikator - wer kann mir helfen?

Hi Angel,

also - falls Dich das motiviert - "durchbeißen" lohnt sich nach meiner Erfahrung auf jeden Fall.

Hier mal meine Gedanken zu Deinem Problem:

1. Ich würde Dir empfehlen, das Zeichnen von Chart-Objekten zumindest in eine Include-Datei auszulagern und in den Pre-Compiler-Zeilen Deines EAs auf diese Datei zu referenzieren, z.B. über:

#include <Z_MyIncludes\GUI\IN_AH_ChartObjects.mqh>

Die .mph-Datei muss natürlich im include-Verzeichnis oder in einem entsprechenden Unterverzeichnis wie im obigen Beispiel abgespeichert sein. Alternativ könnte man auch eine Klasse CRechteck definieren, aber das muss nicht unbedingt sein.

2. Wenn Du in der Include-Datei eine Funktion schreibst, die ein Standard-Rechteck malt, dann hast Du die Funktion einmal definiert und kannst sie von jedem beliebigen EA mit den ensprechenden Parametern aufrufen, ohne jedesmal den Code für das Zeichnen neu in jedem EA zu schreiben. Macht den Code in der EA-Datei einfacher und vermeidet, dass Dir die Code-Versionen bei Änderungen "auseinanderlaufen".

3. Hier mal ein Beispiel-Code für einen Button mit allen möglichen Parametern, die auch "disabled" werden können, wenn man sie nicht benötigt. Kann natürlich auch eine horizontale Linie, ein Label oder eben ein Rechteck sein.

Code:
void ButtonCreate (long              ButtonChart_ID,                               // Button Chart ID 
                   string            ButtonName,                                   // Button Name 
                   int               ButtonSubWindow,                              // Button Subwindow Index 
                   int               ButtonX,                                      // Button X-Coordinate 
                   int               ButtonY,                                      // Button Y-Coordinate 
                   int               ButtonWidth,                                  // Button Width 
                   int               ButtonHeight,                                 // Button Height 
                   //int               ButtonCorner,                                 // Button Anchoring Chart Corner 
                   string            ButtonText,                                   // Button Text 
                   string            ButtonFont,                                   // Button Font 
                   int               ButtonFontSize,                               // Button Font Size 
                   color             ButtonTextColor,                              // Button Text Color 
                   color             ButtonBackgroundColor,                        // Button Background Color 
                   color             ButtonBorderColor)                              // Button Border Color 
                   //bool              ButtonState,                                  // Button State pressed/released 
                   //bool              ButtonBack,                                   // Button in the Background 
                   //bool              ButtonSelectable,                             // Button highlight to move 
                   //bool              ButtonSelected,                               // Button highlight to move
                   //bool              ButtonHidden,                                 // Button hidden in the Object List 
                   //long              ButtonZ_Order)                                // Button Priority for Mouse Click 
   {
   if(ObjectFind(ButtonName)==-1)
      {
      ObjectCreate(ButtonChart_ID,ButtonName,OBJ_BUTTON,ButtonSubWindow,0,0);

      ObjectSetInteger(ButtonChart_ID,ButtonName,OBJPROP_XDISTANCE,ButtonX);
      ObjectSetInteger(ButtonChart_ID,ButtonName,OBJPROP_YDISTANCE,ButtonY);
      ObjectSetInteger(ButtonChart_ID,ButtonName,OBJPROP_XSIZE,ButtonWidth);
      ObjectSetInteger(ButtonChart_ID,ButtonName,OBJPROP_YSIZE,ButtonHeight);
      ObjectSetInteger(ButtonChart_ID,ButtonName,OBJPROP_CORNER,CORNER_RIGHT_UPPER);
      ObjectSetString(ButtonChart_ID,ButtonName,OBJPROP_TEXT,ButtonText);
      ObjectSetString(ButtonChart_ID,ButtonName,OBJPROP_FONT,ButtonFont);
      ObjectSetInteger(ButtonChart_ID,ButtonName,OBJPROP_FONTSIZE,ButtonFontSize);
      ObjectSetInteger(ButtonChart_ID,ButtonName,OBJPROP_COLOR,ButtonTextColor);
      ObjectSetInteger(ButtonChart_ID,ButtonName,OBJPROP_BGCOLOR,ButtonBackgroundColor);
      ObjectSetInteger(ButtonChart_ID,ButtonName,OBJPROP_BORDER_COLOR,ButtonBorderColor);
      ObjectSetInteger(ButtonChart_ID,ButtonName,OBJPROP_STATE,false);
      ObjectSetInteger(ButtonChart_ID,ButtonName,OBJPROP_BACK,false);
      ObjectSetInteger(ButtonChart_ID,ButtonName,OBJPROP_SELECTABLE,false);
      ObjectSetInteger(ButtonChart_ID,ButtonName,OBJPROP_SELECTED,false);
      ObjectSetInteger(ButtonChart_ID,ButtonName,OBJPROP_HIDDEN,true);
      ObjectSetInteger(ButtonChart_ID,ButtonName,OBJPROP_ZORDER,0);
      }
   ObjectSetText(ButtonName,ButtonText,ButtonFontSize,ButtonFont,ButtonTextColor);

   return; }
4. Aufruf der ObjectCreate()-Funktion dann im EA selbst mit den ensprechenden Parametern. Hier im Beispiel:

Code:
   ButtonCreate(0,"B_CloseAll",0,50,33,45,20,"C-ALL",ft,fs,clrNeutral,clrClose,clrClose);
5. In der OnTick()-Funktion musst Du das creierte Objekt zunächst mal löschen mit ObjectDelete(0,"ObjectName"), dann mit der ausgelagerten ObjectCreate-Funktion neu zeichnen. Auf diese Weise aktualisiert sich das Objekt bei jedem Tick mit den ensprechenden Parameter. Löschen in der OnDeinit() empfiehlt sich natürlich auch.

Hier im Beispiel:

Code:
OnTick() {

ObjectDelete(0,"B_CloseAll");

if(MySignal) {

ButtonCreate(0,"B_CloseAll",0,50,33,45,20,"C-ALL",ft,fs,clrNeutral,clrClose,clrClose);
}
}
6. Nur so am Rande: In einer Deiner Code-Zeilen ist ein Leerzeichen (COLOR,LimeG reen)

Just my 2 cents.

Cheers, mocwoc