Здравствуйте! Мне нужно создать прямоугольник через клики мышки по графику. Как определить первую точку, я понимаю. Через использование lparam. Но когда я делаю клик во второй раз, то первый и второй получается одинаковыми. Подскажите, как сделать так, чтобы первый клик был с одной ценой, а второй клик был уже с другой ценой(Т.е они не должны быть равны) Сейчас мой код выглядит примерно следующим образом:
voidOnChartEvent(constint id, // event ID constlong& lparam, // event parameter of the long typeconstdouble& dparam, // event parameter of the double typeconststring& sparam) // event parameter of the string type
{
if(id==CHARTEVENT_CLICK){
l=(int)lparam;
}
if(id==CHARTEVENT_CLICK){
y=(int)lparam;
Print(l + " " + y);
}
}
С точки зрения логики, я понимаю, что это не будет работать так, как мне нужно. Но своих знаний в программирование мне не хватает для решения данной проблемы. И Могли бы вы привести код, как быть в случае, если будет выглядеть код, если будет более двух нажатий на график. К примеру три(Для построения волна Эллиота или треугольника)
Ранее человек уже отвечал на этот вопрос, но я его не понял, поэтому задал его снова
Sergei Gurov #: Здравствуйте! Мне нужно создать прямоугольник через клики мышки по графику. Как определить первую точку, я понимаю. Через использование lparam. Но когда я делаю клик во второй раз, то первый и второй получается одинаковыми. Подскажите, как сделать так, чтобы первый клик был с одной ценой, а второй клик был уже с другой ценой(Т.е они не должны быть равны) Сейчас мой код выглядит примерно следующим образом: С точки зрения логики, я понимаю, что это не будет работать так, как мне нужно. Но своих знаний в программирование мне не хватает для решения данной проблемы. И Могли бы вы привести код, как быть в случае, если будет выглядеть код, если будет более двух нажатий на график. К примеру три(Для построения волна Эллиота или треугольника)
Ранее человек уже отвечал на этот вопрос, но я его не понял, поэтому задал его снова
bool f_click=true;
//+------------------------------------------------------------------+voidOnChartEvent(constint id, // event ID constlong& lparam, // event parameter of the long typeconstdouble& dparam, // event parameter of the double typeconststring& sparam) // event parameter of the string type
{
if(f_click&&id==CHARTEVENT_CLICK){
l=(int)lparam; f_click=false;
}
if(!f_click&&id==CHARTEVENT_CLICK){
y=(int)lparam; f_click=true;
Print(l + " " + y);
}
}
Sergei Gurov #: Здравствуйте! Мне нужно создать прямоугольник через клики мышки по графику. Как определить первую точку, я понимаю. Через использование lparam. Но когда я делаю клик во второй раз, то первый и второй получается одинаковыми. Подскажите, как сделать так, чтобы первый клик был с одной ценой, а второй клик был уже с другой ценой(Т.е они не должны быть равны) Сейчас мой код выглядит примерно следующим образом: С точки зрения логики, я понимаю, что это не будет работать так, как мне нужно. Но своих знаний в программирование мне не хватает для решения данной проблемы. И Могли бы вы привести код, как быть в случае, если будет выглядеть код, если будет более двух нажатий на график. К примеру три(Для построения волна Эллиота или треугольника)
Ранее человек уже отвечал на этот вопрос, но я его не понял, поэтому задал его снова
voidOnChartEvent(constint id, // event ID constlong& lparam, // event parameter of the long typeconstdouble& dparam, // event parameter of the double typeconststring& sparam) // event parameter of the string type
{
if(id==CHARTEVENT_CLICK){
l=(int)lparam;
}
if(id==CHARTEVENT_CLICK && l>0){
y=(int)lparam;
Print(l + " " + y);
}
}
И после рисования переменную l надо обнулить для следующего прямоугольника…
Извиняюсь, не указал это в прошлом сообщение. Я кликаю по разным точкам графика. Кликов будет более 2. Как тогда будет выглядеть код? Один человек подсказал способ для двух точек, но не для трех Для двух код выглядит так:
voidOnChartEvent(constint id, // event ID constlong& lparam, // event parameter of the long typeconstdouble& dparam, // event parameter of the double typeconststring& sparam) // event parameter of the string type
{
staticbool first_click = true;
if(id==CHARTEVENT_CLICK) {
if (first_clik) l = (int)lparam;
else {
y = (int)lparam;
Print(l," ",y);
}
first_click =!first_click;
}
}
int cl_1=0,cl_2=1;
long l=0,y=1;
//+------------------------------------------------------------------+voidOnChartEvent(constint id, // event ID constlong& lparam, // event parameter of the long typeconstdouble& dparam, // event parameter of the double typeconststring& sparam) // event parameter of the string type
{
if(id==CHARTEVENT_CLICK){
if(cl_1==0){l=(int)lparam;cl_1=1;cl_2=1;}
if(cl_2==0){y=(int)lparam;cl_1=0;}
Print(l + " " + y);
cl_2=0;
}
}
Сейчас мой код выглядит примерно следующим образом:
С точки зрения логики, я понимаю, что это не будет работать так, как мне нужно. Но своих знаний в программирование мне не хватает для решения данной проблемы. И Могли бы вы привести код, как быть в случае, если будет выглядеть код, если будет более двух нажатий на график. К примеру три(Для построения волна Эллиота или треугольника)
Ранее человек уже отвечал на этот вопрос, но я его не понял, поэтому задал его снова
Здравствуйте! Мне нужно создать прямоугольник через клики мышки по графику. Как определить первую точку, я понимаю. Через использование lparam. Но когда я делаю клик во второй раз, то первый и второй получается одинаковыми. Подскажите, как сделать так, чтобы первый клик был с одной ценой, а второй клик был уже с другой ценой(Т.е они не должны быть равны)
Сейчас мой код выглядит примерно следующим образом:
С точки зрения логики, я понимаю, что это не будет работать так, как мне нужно. Но своих знаний в программирование мне не хватает для решения данной проблемы. И Могли бы вы привести код, как быть в случае, если будет выглядеть код, если будет более двух нажатий на график. К примеру три(Для построения волна Эллиота или треугольника)
Ранее человек уже отвечал на этот вопрос, но я его не понял, поэтому задал его снова
Здравствуйте! Мне нужно создать прямоугольник через клики мышки по графику. Как определить первую точку, я понимаю. Через использование lparam. Но когда я делаю клик во второй раз, то первый и второй получается одинаковыми. Подскажите, как сделать так, чтобы первый клик был с одной ценой, а второй клик был уже с другой ценой(Т.е они не должны быть равны)
Сейчас мой код выглядит примерно следующим образом:
С точки зрения логики, я понимаю, что это не будет работать так, как мне нужно. Но своих знаний в программирование мне не хватает для решения данной проблемы. И Могли бы вы привести код, как быть в случае, если будет выглядеть код, если будет более двух нажатий на график. К примеру три(Для построения волна Эллиота или треугольника)
Ранее человек уже отвечал на этот вопрос, но я его не понял, поэтому задал его снова
И после рисования переменную l надо обнулить для следующего прямоугольника…
bool f_click=true; //+------------------------------------------------------------------+ void OnChartEvent(const int id, // event ID const long& lparam, // event parameter of the long type const double& dparam, // event parameter of the double type const string& sparam) // event parameter of the string type { if(f_click&&id==CHARTEVENT_CLICK){ l=(int)lparam; f_click=false; } if(!f_click&&id==CHARTEVENT_CLICK){ y=(int)lparam; f_click=true; Print(l + " " + y); } }
Ваш способ к сожалению не работает. Выводит одинаковые данные

Ваш способ к сожалению не работает. Выводит одинаковые данные
Вы кликаете в одной точке, как данные могут быть разными.
Один человек подсказал способ для двух точек, но не для трех
Для двух код выглядит так:
Это с двумя. А если с тремя?
Это с двумя. А если с тремя?
Независимо от количества кликов выдаются значения текущего и предыдущего кликов.
Понял. Огромное спасибо!