OBJ_EDIT

 

Hallo Leute,


ich hab da ein kleines Problem mit dem OBJ_Edit


ich baue das Objekt eigentlich genauso wie es in der Beschreibung steht

https://www.mql5.com/de/docs/constants/objectconstants/enum_object/obj_edit


jetzt hab ich noch das Problem, das ich ja einen Text in das Feld eingeben kann.

Hier stellt sich die Frage, wie erkenne ich anschliessend den Text?

mit

ObjectGetString(0,"SL"+_Symbol,OBJPROP_TEXT,0));

gehts mal nicht,

er findet zwar das Objekt, aber nachdem ich den Wert ja nirgends gespeichert habe, auch nicht in das Objekt, hab ich da ein Problem

ich könnte zwar sagen

ObjectSetString(0,"SL",OBJPROP_TEXT,0);

nur das geht ja nicht, da ich ihm da den Wert welchen ich gerade eingegeben hab reinschreiben muss. 


Hab ich hier einen Denkfehler oder ist das wirklich ein "Dreck"


danke

Dokumentation zu MQL5: Konstanten, Enumerationen und Strukturen / Objektkonstanten / Objekttypen / OBJ_EDIT
Dokumentation zu MQL5: Konstanten, Enumerationen und Strukturen / Objektkonstanten / Objekttypen / OBJ_EDIT
  • www.mql5.com
//| Erstellt das Objekt "Eingabefeld"                                |              chart_ID=0,                              sub_window=0,                            x=0,                                     y=0,                                     width=50,                                height=18,                ...
 

Hab ich hier einen Denkfehler oder ist das wirklich ein "Dreck"


danke

Also ohne hier groß was zu sagen , das Beispiel https://www.mql5.com/de/docs/constants/objectconstants/enum_object/obj_edit

funktioniert.


Du musst den Text speichern in dem du eine Variable als Referenz übergibts .

Siehe:

//+------------------------------------------------------------------+
//| Gibt den Text des Objektes "Eingabefeld" zurück                  |
//+------------------------------------------------------------------+
bool EditTextGet(string      &text,        // Text
                 const long   chart_ID=0,  // ID des Charts
                 const string name="Edit") // Objektname
  {
//--- Setzen den Wert des Fehlers zurück
   ResetLastError();
//--- erhalten wir den Text des Objektes
   if(!ObjectGetString(chart_ID,name,OBJPROP_TEXT,0,text))
     {
      Print(__FUNCTION__,
            ": Konnte nicht den Text erhalten! Fehlercode = ",GetLastError());
      return(false);
     }
//--- die erfolgreiche Umsetzung
   return(true);
  }


&text

Könnte da dein Fehler liegen ?

Dokumentation zu MQL5: Konstanten, Enumerationen und Strukturen / Objektkonstanten / Objekttypen / OBJ_EDIT
Dokumentation zu MQL5: Konstanten, Enumerationen und Strukturen / Objektkonstanten / Objekttypen / OBJ_EDIT
  • www.mql5.com
//| Erstellt das Objekt "Eingabefeld"                                |              chart_ID=0,                              sub_window=0,                            x=0,                                     y=0,                                     width=50,                                height=18,                ...
 

Mach es uns doch einfach und poste eine Beispiel wo dein Fehler zu sehen ist.


Kurzes Skript .....und der Fehler ist schnell gefunden.

 

das hätte ich soweit verstanden,

aber was geb ich bei der 

&text

ein?


da muss ich ja was übergeben

und generell, bekomme ich dann ja nur ein True oder False zurück, das ist ja eine bool
 
Christian:

Mach es uns doch einfach und poste eine Beispiel wo dein Fehler zu sehen ist.


Kurzes Skript .....und der Fehler ist schnell gefunden.

einfach ist das nicht ;-) muss das erst zusammenkopieren

 

so, jetzt schnell mal das für einen EA zusammenkopiert


also, ich erzeuge das Edit Feld, Schreib einen Wert rein, und am Ende von Edit sollte sich das ganze dann in eine Globale Variable setzen

tuts aber nicht

#property copyright "Copyright 2018, amando"
#property link      "https://www.amando.eu"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+





  
void OnInit() 
  { 

   string SLValue;
   
   if(!GlobalVariableCheck("GlobalSL"+_Symbol)) GlobalVariableSet("GlobalSL"+_Symbol,0);   
   SLValue   = DoubleToString(GlobalVariableGet("GlobalSL"+_Symbol),0);
   EditCreate(0,"SL"        ,0, 20 ,20, 300, 150, SLValue,"Arial",10,ALIGN_CENTER,false,CORNER_LEFT_UPPER,clrBlack, clrWhite,clrNONE,false,false,false,0);
 
//--- 
  }

void OnDeinit(const int reason)
  {

   ObjectDelete(0,"SL");

  }
//+--


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

   if(CHARTEVENT_OBJECT_ENDEDIT)
     {

      Print(GlobalVariableCheck("GlobalSL"+_Symbol));
          
      Print(ObjectGetString(0,"SL"+_Symbol,OBJPROP_TEXT,0));
     
      GlobalVariableSet("GlobalSL"+_Symbol,StringToDouble(ObjectGetString(0,"SL"+_Symbol,OBJPROP_TEXT,0)));

      Print(_Symbol," ",StringToDouble(ObjectGetString(0,"SL"+_Symbol,OBJPROP_TEXT,0)));

      Print(GetLastError());
     }



   if(id==CHARTEVENT_OBJECT_CLICK)
     {

      }
  }


  
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); 
  } 
  
 

Hab den Fehler:


Dein Edit hat den Namen "SL" mehr nicht . Kein Symbol hinten dran


Hier der richtige code.

//+------------------------------------------------------------------+
//|                                           amando_problem_234.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, amando"
#property link      "https://www.amando.eu"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+

void OnInit() 
  { 

   string SLValue;
   
   if(!GlobalVariableCheck("GlobalSL"+_Symbol)) GlobalVariableSet("GlobalSL"+_Symbol,0);   
   SLValue   = DoubleToString(GlobalVariableGet("GlobalSL"+_Symbol),0);
   EditCreate(0,"SL"        ,0, 20 ,20, 300, 150, SLValue,"Arial",10,ALIGN_CENTER,false,CORNER_LEFT_UPPER,clrBlack, clrWhite,clrNONE,false,false,false,0);
 
//--- 
  }

void OnDeinit(const int reason)
  {

   ObjectDelete(0,"SL");

  }
//+--


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

   if(CHARTEVENT_OBJECT_ENDEDIT)
     {

      Print(GlobalVariableCheck("GlobalSL"+_Symbol));
      string gettedtext = ObjectGetString(0,"SL",OBJPROP_TEXT,0);   
      Print(ObjectGetString(0,"SL"+_Symbol,OBJPROP_TEXT,0));
     
      GlobalVariableSet("GlobalSL"+_Symbol,StringToDouble(ObjectGetString(0,"SL"+_Symbol,OBJPROP_TEXT,0)));

      Print(_Symbol," ",StringToDouble(ObjectGetString(0,"SL"+_Symbol,OBJPROP_TEXT,0)));

      Print(GetLastError());
     }



   if(id==CHARTEVENT_OBJECT_CLICK)
     {

      }
  }


  
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); 
  } 
  


Sowas wie Print(sdkfsnskdnksd) lässt sich nicht debuggen !!!


Schau wie es richtig geht.

Gruß

 

Bevor du fragst.

gettedtext ist 0 weil dein SLvalue auch 0 ist :-)

 
amando:

das hätte ich soweit verstanden,

aber was geb ich bei der 

ein?


da muss ich ja was übergeben

und generell, bekomme ich dann ja nur ein True oder False zurück, das ist ja eine bool

Ja wenn du die Variante Rückgabewert = Bool nimmst ist in der text Variable nachher dein Wert drin.

Die andere gibt den Text direkt zurück.


Such mal nach Pointer und Referenzen im Netz ...etwas lesen...ist aber immer schwer zu verstehen am Anfang.

 

@Christian,

das eingabefeld sollte auch nur SL heissen, das tat es schon immer :)

die erweiterung mit dem Symbol hab ich nir für die globale variablen damit ich diese zuordnen kann beim laden

das mit dem Print ist mir klar, da geht nix zum debuggen, hab die zeile nur fürs testen eingefügt da alles immer 0 war

 
Problem ist aber gelöst?
Grund der Beschwerde: