Download MetaTrader 5
To add comments, please log in or register
Make profit on MQL5 services. It's easy!
honest_knave
1379
honest_knave 2016.12.18 20:36  
Marco vd Heijden:

I guess so.

It's slightly different tho.

The global versus static is neither here nor there. But your method of reset is good. It prevents the overrun.
honest_knave
1379
honest_knave 2016.12.18 20:38  
honest_knave:
The global versus static is neither here nor there. But your method of reset is good. It prevents the overrun.

I spoke too soon. Yours overruns the other way. It will trigger on a later CTRL press. If you click on the chart, then press CTRL it fires.

Max Enrik
665
Max Enrik 2016.12.19 10:19  

@honest_knave - thanks for your comment. Much appreciate that - but I started try first @Marco vd Heijden comment. ( I read all your comments about that. )

@Marco vd Heijden - Thanks man.

But I think I am doing something wrong, maybe I do not understand more clearly. Anyway I tried, you can find it below code.
Where is my mistake, please?

//+------------------------------------------------------------------+
//|                                                      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;
}
void graphicsObj()
{
    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);
}
honest_knave
1379
honest_knave 2016.12.19 10:38  

Your first problem is that CHARTEVENT_CLICK is not the same as CHARTEVENT_OBJECT_CLICK. You want to catch clicks on an object, not just any click on the chart.

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

//    if( id == CHARTEVENT_CLICK )
    if( id == CHARTEVENT_OBJECT_CLICK )
honest_knave
1379
honest_knave 2016.12.19 11:12  
void OnChartEvent(const int id,
                  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);
}
This may help. You might find that it only goes to 0.1 on the second click of the mouse, depending on how quickly you press the button after CTRL.
Max Enrik
665
Max Enrik 2016.12.19 11:24  
honest_knave:
This may help. You might find that it only goes to 0.1 on the second click of the mouse, depending on how quickly you press the button after CTRL.

#Ctrl + Mouse Button - Closed

Wow, just like it, amazing huge thanks honest!

Special thanks to @honest_knave and @Marco vd Heijden

Max Enrik
665
Max Enrik 2016.12.19 12:06  
#SpreadSheet - Open

Latest Friday 'Spreadsheet' was updates by OnTick function ( which one I need, it was good for me ).

( MT4 platform updated twice. ) After that updates this spreadsheet does not update on the chart, I checked out everything about spreadsheet I do not see any problem.

I need to inform I also use Bid and Ask prices above spreadsheet, Bid and Ask works good, but spreadsheet does not.

So I use Label Function for Label Objects - every Label objects works good without 'Spreadsheet'. Also I need to inform when I create Label object for spreadsheet without function, it works good.
That problem starts after MT4 Platform upgrades, I am not sure where is that problem comes.

If you understand my concern, let me know how can I solve this issue.
Thanks in advance.

Marco vd Heijden
Moderator
4229
Marco vd Heijden 2016.12.19 14:39  

Did you have some code about spreadsheet ?

Max Enrik
665
Max Enrik 2016.12.19 14:58  
Marco vd Heijden:

Did you have some code about spreadsheet ?

I am still researching about that, also I will post some of code from it, which is working which is not, soon.
Max Enrik
665
Max Enrik 2016.12.19 16:01  

Can I write 2 different Label Function?
( e.g: 1 for text, 2 for text and font size. ) 

/ /1...5678910111213141516171819...26
To add comments, please log in or register