honest_knave: Il globale contro lo statico non è né qui né lì. Ma il tuo metodo di reset è buono. Previene l'overrun.
Ho parlato troppo presto. Il tuo supera l'altro modo. Si innesca su una successiva pressione di CTRL. Se clicchi sul grafico e poi premi CTRL si attiva.
@honest_knave- grazie per il tuo commento. Lo apprezzo molto - ma ho iniziato a provare prima il commento di @Marco vd Heijden. ( Ho letto tutti i vostri commenti su questo. )
Ma penso che sto facendo qualcosa di sbagliato, forse non capisco più chiaramente. Comunque ho provato, puoi trovare il codice qui sotto. Dov'è il mio errore, per favore?
Il tuo primo problema è che CHARTEVENT_CLICK non è la stessa cosa di CHARTEVENT_OBJECT_CLICK. Tu vuoi catturare i clic su un oggetto, non un qualsiasi clic sul grafico.
honest_knave: Questo può aiutare. Potresti scoprire che va a 0,1 solo al secondo clic del mouse, a seconda di quanto velocemente premi il pulsante dopo CTRL.
#Ctrl + pulsante del mouse - Chiuso
Wow, proprio così, incredibile enorme grazie onesto!
L'ultimo Venerdì'Spreadsheet' è stato aggiornato dalla funzione OnTick (di cui ho bisogno, era buona per me).
(La piattaforma MT4 si è aggiornata due volte.) Dopo gli aggiornamenti questo foglio di calcolo non si aggiorna sul grafico, ho controllato tutto ciò che riguarda il foglio di calcolo e non vedo alcun problema.
Devo informare che uso anche i prezzi Bid e Ask sopra il foglio di calcolo, Bid e Ask funzionano bene, ma il foglio di calcolo no.
Quindi uso la funzione Label per gli oggetti Label - ogni oggetto Label funziona bene senza 'Spreadsheet'. Devo anche informare che quando creo l'oggetto Label per il foglio di calcolo senza la funzione, funziona bene.
Questo problema inizia dopo l'aggiornamento della piattaforma MT4, non sono sicuro da dove venga questo problema.
Se capite la mia preoccupazione, fatemi sapere come posso risolvere questo problema. Grazie in anticipo.
Credo di sì.
È leggermente diverso però.
Il globale contro lo statico non è né qui né lì. Ma il tuo metodo di reset è buono. Previene l'overrun.
Ho parlato troppo presto. Il tuo supera l'altro modo. Si innesca su una successiva pressione di CTRL. Se clicchi sul grafico e poi premi CTRL si attiva.
@honest_knave- grazie per il tuo commento. Lo apprezzo molto - ma ho iniziato a provare prima il commento di @Marco vd Heijden. ( Ho letto tutti i vostri commenti su questo. )
@Marco vd Heijden- Grazie amico.
Ma penso che sto facendo qualcosa di sbagliato, forse non capisco più chiaramente. Comunque ho provato, puoi trovare il codice qui sotto.
Dov'è il mio errore, per favore?
//| 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);
}
Il tuo primo problema è che CHARTEVENT_CLICK non è la stessa cosa di CHARTEVENT_OBJECT_CLICK. Tu vuoi catturare i clic su un oggetto, non un qualsiasi clic sul grafico.
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);
}
Questo può aiutare. Potresti scoprire che va a 0,1 solo al secondo clic del mouse, a seconda di quanto velocemente premi il pulsante dopo CTRL.
#Ctrl + pulsante del mouse - Chiuso
Wow, proprio così, incredibile enorme grazie onesto!
Ringraziamenti speciali a@honest_knave e @Marco vd Heijden
(La piattaforma MT4 si è aggiornata due volte.) Dopo gli aggiornamenti questo foglio di calcolo non si aggiorna sul grafico, ho controllato tutto ciò che riguarda il foglio di calcolo e non vedo alcun problema.
Devo informare che uso anche i prezzi Bid e Ask sopra il foglio di calcolo, Bid e Ask funzionano bene, ma il foglio di calcolo no.
Se capite la mia preoccupazione, fatemi sapere come posso risolvere questo problema.
Grazie in anticipo.
Hai del codice sul foglio di calcolo?
Hai del codice sul foglio di calcolo?
Posso scrivere 2 diverse Label Function?
(ad esempio: 1 per il testo, 2 per il testo e la dimensione del carattere).