honest_knave: Der Unterschied zwischen global und statisch ist weder hier noch dort. Aber Ihre Methode zum Zurücksetzen ist gut. Sie verhindert den Überlauf.
Ich habe zu früh gesprochen. Ihrer überläuft in die andere Richtung. Er wird bei einem späteren Drücken von CTRL ausgelöst. Wenn Sie auf das Diagramm klicken und dann CTRL drücken, wird es ausgelöst.
@honest_knave- danke für Ihren Kommentar. Sehr schätzen, dass - aber ich begann versuchen, zuerst @Marco vd Heijden Kommentar. ( Ich habe alle Ihre Kommentare dazu gelesen. )
Aber ich glaube, ich mache etwas falsch, vielleicht verstehe ich nicht mehr klar. Jedenfalls habe ich es versucht, Sie können es unten Code finden. Wo ist mein Fehler, bitte?
Ihr erstes Problem ist, dass CHARTEVENT_CLICK nicht dasselbe ist wie CHARTEVENT_OBJECT_CLICK. Sie wollen Klicks auf ein Objekt abfangen, nicht nur irgendeinen Klick auf das Diagramm.
honest_knave: Dies könnte helfen. Es kann sein, dass es erst beim zweiten Mausklick auf 0,1 geht, je nachdem, wie schnell man die Taste nach CTRL drückt.
#Strg + Maustaste - Geschlossen
Wow, genau wie es, erstaunlich großen Dank ehrlich!
Letzten Freitag wurde'Spreadsheet' durch die OnTick Funktion aktualisiert ( welche ich brauche, es war gut für mich ).
(MT4-Plattform zweimal aktualisiert.) Nach dieser Updates dieses Spreadsheet nicht auf dem Chart zu aktualisieren, habe ich alles über Spreadsheet überprüft ich sehe kein Problem.
Ich muss darauf hinweisen, dass ich auch Bid und Ask Preise über Spreadsheet verwende, Bid und Ask funktionieren gut, aber Spreadsheet nicht.
Also benutze ich die Label-Funktion für Label-Objekte - jedes Label-Objekt funktioniert auch ohne "Spreadsheet". Außerdem muss ich darauf hinweisen, dass, wenn ich ein Label-Objekt für ein Spreadsheet ohne Funktion erstelle, es gut funktioniert.
Das Problem beginnt nach MT4 Plattform-Upgrades, ich bin nicht sicher, woher das Problem kommt.
Wenn Sie mein Anliegen verstehen, lassen Sie mich wissen, wie ich dieses Problem lösen kann. Vielen Dank im Voraus.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
Ich denke schon.
Es ist aber etwas anders.
Der Unterschied zwischen global und statisch ist weder hier noch dort. Aber Ihre Methode zum Zurücksetzen ist gut. Sie verhindert den Überlauf.
Ich habe zu früh gesprochen. Ihrer überläuft in die andere Richtung. Er wird bei einem späteren Drücken von CTRL ausgelöst. Wenn Sie auf das Diagramm klicken und dann CTRL drücken, wird es ausgelöst.
@honest_knave- danke für Ihren Kommentar. Sehr schätzen, dass - aber ich begann versuchen, zuerst @Marco vd Heijden Kommentar. ( Ich habe alle Ihre Kommentare dazu gelesen. )
@Marco vd Heijden- Danke Mann.
Aber ich glaube, ich mache etwas falsch, vielleicht verstehe ich nicht mehr klar. Jedenfalls habe ich es versucht, Sie können es unten Code finden.
Wo ist mein Fehler, bitte?
//| keydown.mq4 |
//| Copyright 2016, Marco vd Heijden, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Marco vd Heijden, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
string prefix = "Custom Expert |";
string lotedit = prefix + "Edit Name";
string lotbtnplus = prefix + "Lot button Plus";
string lotbtnminus = prefix + "Lot button Minus";
double lot = 0.01, lotstep = 0.01 ;
bool ctrl_click;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create timer
EventSetTimer(60);
graphicsObj();
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
ObjectsDeleteAll( 0, prefix );
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
graphicsObj();
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer()
{
//---
}
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
if( id == CHARTEVENT_CLICK )
{
if ( sparam == lotbtnplus )
{
ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
lot = lot + lotstep;
update();
Print( " | lot plus : ", lot );
return;
}
Print( "Click" );
ctrl_click = 1;
}
if( id == CHARTEVENT_KEYDOWN )
{
//Print(lparam);// print to identify keycode
if( lparam == 17 ) // ctrl key
{
if( ctrl_click == 1 )// if mouse click
{
//Do Something when CTRL (keycode 17) is pressed
if ( sparam == lotbtnplus )
{
ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
lot = lot + ( lotstep * 10 );
Print( " | lot plus + Ctrl initial: ", lot );
update();
Print( " | lot plus + Ctrl: ", lot );
return;
}
Print( "Ctrl + Click" );
ctrl_click = 0; // reset
}
}
ctrl_click = 0; // reset if not ctrl
}
}
//|+--------------------------------------------------------------------------------+
//| - Function Update |
//|+--------------------------------------------------------------------------------+
void update()
{
//---
ObjectSetString( 0, lotedit, OBJPROP_TEXT, DoubleToString( lot, 2 ) );
//---
return;
}
{
ObjectCreate(0, lotedit, OBJ_EDIT, 0,0,0);
ObjectSetInteger(0, lotedit, OBJPROP_XDISTANCE, 30);
ObjectSetInteger(0, lotedit, OBJPROP_YDISTANCE, 30);
ObjectSetInteger(0, lotedit, OBJPROP_XSIZE, 60);
ObjectSetInteger(0, lotedit, OBJPROP_YSIZE, 30);
ObjectSetString(0, lotedit, OBJPROP_TEXT, DoubleToString( lot, 2 ));
ObjectCreate( 0, lotbtnplus, OBJ_BUTTON, 0, 0, 0);
ObjectSetString( 0, lotbtnplus, OBJPROP_TEXT, "+");
ObjectSetInteger( 0, lotbtnplus, OBJPROP_XDISTANCE, 100);
ObjectSetInteger( 0, lotbtnplus, OBJPROP_YDISTANCE, 30);
ObjectSetInteger( 0, lotbtnplus, OBJPROP_XSIZE, 70);
ObjectSetInteger( 0, lotbtnplus, OBJPROP_YSIZE, 30);
ObjectSetInteger( 0, lotbtnplus, OBJPROP_BACK, false);
ObjectSetInteger( 0, lotbtnplus, OBJPROP_SELECTABLE, false);
}
Ihr erstes Problem ist, dass CHARTEVENT_CLICK nicht dasselbe ist wie CHARTEVENT_OBJECT_CLICK. Sie wollen Klicks auf ein Objekt abfangen, nicht nur irgendeinen Klick auf das Diagramm.
const long &lparam,
const double &dparam,
const string &sparam)
{
// if( id == CHARTEVENT_CLICK )
if( id == CHARTEVENT_OBJECT_CLICK )
const long &lparam,
const double &dparam,
const string &sparam)
{
static bool wasCTRL=false;
if(id==CHARTEVENT_OBJECT_CLICK && sparam == lotbtnplus)
{
ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
lot+=(wasCTRL)?lotstep*10:lotstep;
update();
Print( " | lot plus : ", lot );
return;
}
wasCTRL=(id==CHARTEVENT_KEYDOWN && lparam==17);
}
Dies könnte helfen. Es kann sein, dass es erst beim zweiten Mausklick auf 0,1 geht, je nachdem, wie schnell man die Taste nach CTRL drückt.
#Strg + Maustaste - Geschlossen
Wow, genau wie es, erstaunlich großen Dank ehrlich!
Besonderen Dank an@honest_knave und @Marco vd Heijden
(MT4-Plattform zweimal aktualisiert.) Nach dieser Updates dieses Spreadsheet nicht auf dem Chart zu aktualisieren, habe ich alles über Spreadsheet überprüft ich sehe kein Problem.
Ich muss darauf hinweisen, dass ich auch Bid und Ask Preise über Spreadsheet verwende, Bid und Ask funktionieren gut, aber Spreadsheet nicht.
Wenn Sie mein Anliegen verstehen, lassen Sie mich wissen, wie ich dieses Problem lösen kann.
Vielen Dank im Voraus.
Hatten Sie einen Code für eine Tabellenkalkulation?
Hatten Sie einen Code für eine Tabellenkalkulation?
Kann ich 2 verschiedene Etikettenfunktionen schreiben?
(z. B.: 1 für Text, 2 für Text und Schriftgröße).