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.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3824
Beiträge: 36909
Benutzer: 6.082
Aktive Benutzer: 493
Links: 80
Wir begrüßen unseren neuesten Benutzer: idur
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 8 Stunden
- idur
vor einem Tag
- DarthTrade...
vor einem Tag
- Eren
vor einem Tag
- Rene1504
vor einem Tag
- ibdafx

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

Empfehlungen

Werbung

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 22.02.16
Mitglied
 
Registriert seit: Feb 2016
Beiträge: 103
Lena befindet sich auf einem aufstrebenden Ast
Standard Eingabefeld erstellen

Ich stehe mal wieder auf dem Schlauch und komme nicht weiter.
Ich wollte gerne ein Eingabefeld erstellen worüber ich Variablen ändern wollte.
Dazu dachte ich wäre OBJ_Edit die richtige Wahl. Nur leider hänge ich da bei der Umsetzung fest.
Ich kann noch nicht einmal sagen wo der Fehler, Denkfehler liegt, denn ich habe zwar beim kompilieren kein Fehlermeldung, jedoch beim Ausführen auch keine Reaktion.

Zuerst einmal geht es mir um die Funktion.

Code:
//+------------------------------------------------------------------+
//| Funktion zur Eingabe                                             |
//+------------------------------------------------------------------+
string CreateEdit(string name, int sub_window, int xdist, int ydist, int xsize, int ysize, string font, int font_size, color font_color, ENUM_ALIGN_MODE align, bool read_only, color background_color, color border_color)   { 
   string text;
   ObjectCreate      (0, name, OBJ_EDIT,           0 ,0, 0); 
   ObjectSetInteger  (0, name, OBJPROP_XDISTANCE,     xdist); 
   ObjectSetInteger  (0, name, OBJPROP_YDISTANCE,     ydist); 
   ObjectSetInteger  (0, name, OBJPROP_XSIZE,         xsize); 
   ObjectSetInteger  (0, name, OBJPROP_YSIZE,         ysize); 
   ObjectSetString   (0, name, OBJPROP_TEXT,          text);
   ObjectSetString   (0, name, OBJPROP_FONT,          font); 
   ObjectSetInteger  (0, name, OBJPROP_FONTSIZE,      font_size);
   ObjectSetInteger  (0, name, OBJPROP_COLOR,         font_color); 
   ObjectSetInteger  (0, name, OBJPROP_ALIGN,         align); 
   ObjectSetInteger  (0, name, OBJPROP_READONLY,      read_only); 
   ObjectSetInteger  (0, name, OBJPROP_BGCOLOR,       background_color); 
   ObjectSetInteger  (0, name, OBJPROP_BORDER_COLOR,  border_color);
return(text);    
}
Ich dachte es wird ähnlich wie bei einem Button oder Textelement ein Eingabefeld an den augewählten Koordinaten und in der angebenen Größe erstellt. Darin dachte ich dann blinkt ein Cursor, ich muss nur die Zahl eingeben und den Wert dann übergeben. Leider ist es aber wohl eine ganze Ecke komplizierter. Aus der MQL Hilfe werde ich leider nicht schlauer und im Internet finde ich dazu auch nichts weiterführendes.
Wäre für jeden Tipp dankbar.
  #2 (permalink)  
Alt 22.02.16
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Ja, das ist in der Tat schwieriger, aber nachdem Du nun schon so gut mit Buttons umgehen kannst, sollte Dir die Adaption auf ein Editfeld nicht so schwer fallen.

Beim Button wurde als Ereignis CHARTEVENT_OBJECT_CLICK benutzt.
Beim Edit wird stattdessen CHARTEVENT_OBJECT_ENDEDIT benutzt.

Der Rest ist nahezu identisch zur Vorgehensweise bei Buttons. Nur dass dann wie beim Button kein Code zur Ausführung angesprungen wird, sondern beim Edit muß dann das Eingabefeld ausgelesen werden über ObjectGetString().

Evtl. hilfreich immer mal wieder ins MQL4-Forum zu gehen und die Suchfunktion benutzen, z.B. nach CHARTEVENT_OBJECT_ENDEDIT:

https://www.mql5.com/en/articles/689
Nicht an dem MQL5 stören lassen!

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #3 (permalink)  
Alt 23.02.16
Mitglied
 
Registriert seit: Feb 2016
Beiträge: 103
Lena befindet sich auf einem aufstrebenden Ast
Standard

Vielen Dank! Denke jetzt werde ich es mit ein wenig ausprobieren hinbekommen. Hoffe nur ich kostruiere keine zu umständliche Lösung.
  #4 (permalink)  
Alt 23.02.16
Mitglied
 
Registriert seit: Feb 2016
Beiträge: 103
Lena befindet sich auf einem aufstrebenden Ast
Standard

Zu früh gefreut. Inzwischen bin ich zwar soweit, dass das Eingabefeld erstellt wird. Ich kann auch einen Wert eintragen, aber dann wird dieser nicht übernommen.
  #5 (permalink)  
Alt 23.02.16
Mitglied
 
Registriert seit: Feb 2016
Beiträge: 103
Lena befindet sich auf einem aufstrebenden Ast
Standard

Im Moment sieht es so aus. Ich habe eine Funktion zum erstellen eines Eingabefeldes.

Code:
void CreateEdit(string name, int xdist, int ydist, int xsize, int ysize, string text, string font, int font_size, color font_color, color background_color, color border_color)   { 
   ObjectCreate      (0, name, OBJ_EDIT,           0 ,0, 0); 
   ObjectSetInteger  (0, name, OBJPROP_XDISTANCE,     xdist); 
   ObjectSetInteger  (0, name, OBJPROP_YDISTANCE,     ydist); 
   ObjectSetInteger  (0, name, OBJPROP_XSIZE,         xsize); 
   ObjectSetInteger  (0, name, OBJPROP_YSIZE,         ysize); 
   ObjectSetString   (0, name, OBJPROP_TEXT,          text);
   ObjectSetString   (0, name, OBJPROP_FONT,          font); 
   ObjectSetInteger  (0, name, OBJPROP_FONTSIZE,      font_size);
   ObjectSetInteger  (0, name, OBJPROP_COLOR,         font_color); 
   ObjectSetInteger  (0, name, OBJPROP_READONLY,      false); 
   ObjectSetInteger  (0, name, OBJPROP_BGCOLOR,       background_color); 
   ObjectSetInteger  (0, name, OBJPROP_BORDER_COLOR,  border_color);
   ObjectSetInteger  (0 ,name, OBJPROP_ALIGN,         ALIGN_CENTER); 
}
Dann habe ich im Hauptprogramm die Stelle, wo das Eingabefeld erstellt werden soll und natürlich auch der neue Werte abgefragt. Und die Abfrage funktioniert leider nicht.

Code:
            CreateEdit("InpLot", XButton14, YButton14, XSize14, YSize14, "Eingabe *klicken*", TextFont, FontSize, FontColor, SelectedColor, SelectedColor); 
            if(id == CHARTEVENT_OBJECT_ENDEDIT)  {
               string Input = ObjectGetString(0, "InpLot", OBJPROP_TEXT,0);
               Volumen = StrToDouble(Input);
               ObjectSetString(0, "Volumen", OBJPROP_TEXT, "Handelsvolumen: " +DoubleToString (Volumen,2));
               ChartRedraw(); 
               MenueReset();
            }
Im Moment passiert folgendes. Es wird ein Eingabefeld erstellt, mit dem Text "Eingabe *klicken*". So, wenn ich darauf klicke kann ich auch einen Wert oder was auch immer eingaben und mit Enter bestätigen. Aber dann passiert nichts.
Ich dachte mit der Zeile "string Input....." würde ich den neu eingegebenen Wert abrufen. Im Anschluss zu einer double Variablen umwandeln und diese Variable dann noch ausgeben.
Habe ich die Abfrage if(id == CHARTEVENT_OBJECT_ENDEDIT) an der falschen Stelle platziert? Oder brauche ich noch eine weitere Abfrage?
  #6 (permalink)  
Alt 23.02.16
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 224
pako befindet sich auf einem aufstrebenden Ast
Standard

Code:
#property strict
string text;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
    ObjectCreate(0,"test",OBJ_EDIT,0,0,0);  
   ObjectSetInteger(0,"test",OBJPROP_XDISTANCE,10); 
   ObjectSetInteger(0,"test",OBJPROP_YDISTANCE,10); 
   ObjectSetInteger(0,"test",OBJPROP_XSIZE,300); 
   ObjectSetInteger(0,"test",OBJPROP_YSIZE,150); 
   ObjectSetString(0,"test",OBJPROP_TEXT,"text"); 
   ObjectSetString(0,"test",OBJPROP_FONT,"Arial"); 
   ObjectSetInteger(0,"test",OBJPROP_FONTSIZE,20);  
   ObjectSetInteger(0,"test",OBJPROP_ALIGN,ALIGN_CENTER);  
   ObjectSetInteger(0,"test",OBJPROP_CORNER,CORNER_LEFT_UPPER); 
   ObjectSetInteger(0,"test",OBJPROP_COLOR,clrRed); 
   ObjectSetInteger(0,"test",OBJPROP_BGCOLOR,clrBlue); 
   ObjectSetInteger(0,"test",OBJPROP_BORDER_COLOR,clrLime); 
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   ObjectDelete(0,"test");
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
    if(id==CHARTEVENT_OBJECT_ENDEDIT)
    {
     ObjectGetString(0,"test",OBJPROP_TEXT,0,text);
     MessageBox( text,"TextChange",0);
    }
  }
//+------------------------------------------------------------------+
it is easy

Geändert von pako (23.02.16 um 21:24 Uhr)
  #7 (permalink)  
Alt 23.02.16
GoS GoS ist offline
Mitglied
 
Registriert seit: Nov 2015
Beiträge: 73
GoS befindet sich auf einem aufstrebenden Ast
Standard

Hast du den "if(id = CHARTEVENT_..."-Block unter OnChartEvent(...) stehen ??
Dort werden sämtliche Events verarbeitet...
  #8 (permalink)  
Alt 23.02.16
Mitglied
 
Registriert seit: Feb 2016
Beiträge: 103
Lena befindet sich auf einem aufstrebenden Ast
Standard

@GoS: Ja, das habe ich.
@Pako: Habe den Code mal ausprobiert und bei mir passiert da genauso wenig wie bei meinem eigenen.
  #9 (permalink)  
Alt 23.02.16
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Lena Beitrag anzeigen
@GoS: Ja, das habe ich.
@Pako: Habe den Code mal ausprobiert und bei mir passiert da genauso wenig wie bei meinem eigenen.
Dann hast Du noch irgendwas falsch gemacht.
Vor @pakos Code stand Deiner, in dem tatsächlich das
if(id == CHARTEVENT_OBJECT_ENDEDIT) {
an der falschen Stelle stand.

Der Code von @pako funktioniert schon!

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #10 (permalink)  
Alt 23.02.16
Mitglied
 
Registriert seit: Feb 2016
Beiträge: 103
Lena befindet sich auf einem aufstrebenden Ast
Standard

@Traderdoc: Ich sollte wirklich nicht zuviel parallel erledigen. Ich bin wohl nicht so Multitaskingfähig wie ich gerne hätte.

Die if(id == CHARTEVENT_OBJECT_ENDEDIT) Abfrage muss auf der selben Ebene wie die if(id == ChartEVENT_Object_Click) Abfrage, oder?
Und dann kann ich wie Du es in dem Pulldown-Menü gemacht hast vorgehen.
Als erstes eine string Variable erstellen und dort den Wert "sparam" speichern.
Danach das gewünschte Eingabefeld auswählen und das Textfeld mit "ObjectGetString" auslesen.
Thema geschlossen

Lesezeichen

Stichworte
eingabe, eingabefeld, mql4, programmierung, programmierung metatrader


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 +1. Es ist jetzt 04:29 Uhr.



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