Edit Feld editieren

 

Hallo,


ich hab da eine Frage zur OnChart Event,

da gibts ja das Ereignis 

CHARTEVENT_OBJECT_ENDEDIT

das würde ich verstehen, wenn das Editieren beendet ist, das dann was passiert,

aber warum bekomme ich dann nie ein Ergebnis raus?


Hab dazu einen kleinen Test EA geschrieben, hab ich da nur einen Fehler drin oder ist das ein Bug?

//+------------------------------------------------------------------+
//|                                                         test.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   EditCreate(0, "Grid_Point", 0, 200 + 200,100, 200, 200,"200", "Arial", 18, ALIGN_CENTER, false, CORNER_LEFT_UPPER, clrBlack, clrWhite, clrNONE, false, false, false, 0);

   return(INIT_SUCCEEDED);
  }

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   if(id == CHARTEVENT_OBJECT_ENDEDIT)
     {
      if(sparam == "Grid_Point")
         EditGridPoint();

     }
  }

void EditGridPoint()
  {


   if(ObjectFind(0,"Grid_Point"))

     {
      string Test;
      Test = ObjectGetString(0,"Grid_Point",OBJPROP_TEXT);
      MessageBox(Test);
      Print(Test);
     }
   else
      MessageBox("Objekt nicht gefunden ",ObjectGetString(0,"Grid_Point",OBJPROP_TEXT));

  }

bool EditCreate(const long             chart_ID=0,// ID des Charts
                const string           name="",// Objektname
                const int              sub_window=0,             // Nummer des Unterfensters
                const int              x=0,                      // X-Koordinate
                const int              y=0,                      // Y-Koordinate
                const int              width=0,                 // Breite
                const int              height=0,                // Höhe
                const string           text="",// Text
                const string           font="",// Schrift
                const int              font_size=0,// Schriftgröße
                const ENUM_ALIGN_MODE  align=ALIGN_CENTER,       // Textausrichtung
                const bool             read_only=false,          // Bearbeitung
                const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // Winkel des Charts um Objekt zu binden
                const color            clr=clrBlack,             // Textfarbe
                const color            back_clr=clrWhite,        // Hintergrundfarbe
                const color            border_clr=clrNONE,       // Rahmenfarbe
                const bool             back=false,               // Im Hintergrund
                const bool             selection=false,          // Wählen um zu bewegen
                const bool             hidden=true,              // Ausgeblendet in der Objektliste
                const long             z_order=0)                // Priorität auf Mausklick
  {
//--- Setzen den Wert des Fehlers zurück
   ResetLastError();
//--- Eingabefeld erstellen
   if(!ObjectCreate(chart_ID,name,OBJ_EDIT,sub_window,0,0))
     {
      Print(__FUNCTION__,
            ": Objekt \"Eingabefeld\" konnte nicht erstellt werden! Fehlercode = ",GetLastError());
      return(false);
     }
//--- Objektkoordinaten angeben
   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- Objektgröße setzen
   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
//--- den Text setzen
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- Textschrift setzen
   ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
//--- Schriftgröße setzen
   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
//--- Modus von Textausrichtung im Objekt setzen
   ObjectSetInteger(chart_ID,name,OBJPROP_ALIGN,align);
//--- aktivieren (true) oder deaktivieren (false) den schreibgeschützten Modus
   ObjectSetInteger(chart_ID,name,OBJPROP_READONLY,read_only);
//--- setzen die Ecke des Diagramms, in Bezug auf die die Koordinaten des Objekts bestimmt werden
   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- Textfarbe setzen
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- Hintergrundfarbe setzen
   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
//--- Rahmenfarbe setzen
   ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr);
//--- Im Vordergrund (false) oder Hintergrund (true) anzeigen
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- Aktivieren (true) oder deaktivieren (false) Mausbewegung Modus
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- Verbergen (true) oder Anzeigen (false) den Namen des graphischen Objektes in der Objektliste
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- setzen die Priorität für eine Mausklick-Ereignisse auf dem Chart
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- die erfolgreiche Umsetzung
   return(true);
  }
 

Ich hab mir jetzt nur mal die Referenz von angeschaut (F1):

Ereignis der Beendung des Texteditierens im Eingabefeld des graphischen Objektes "Eingabefeld"

CHARTEVENT_OBJECT_ENDEDIT

Name des graphischen Objektes "Eingabefeld", in dem Editieren des Textes beendet wurde


Wenn als das Ereignis auftritt (meist wohl die Entertaste) sind lparm und dparm leer (oder undefiniert) und sparm entählt den Text des Editierfeldes.

Probier doch mal:

if(id == CHARTEVENT_OBJECT_ENDEDIT) Print(sparm);

Also man muss das Feld aufrufen, etwas eintragen und Enter drücken, dann sollte das eingegebene im Expert-Journal ausgedruckt werden