Code:
//Global----------------------------------------------------------------------------
string Object;
bool shift_pressed = false;
int B_Button_pressed = 0;
//------------------------------------------------------------------------------------
int start()
{
//---
//Button wird oben Links erstellt
Button("Button") ;
return(0);
}
//+------------------------------------------------------------------+
void OnChartEvent(const int id,const long& lparam,const double& dparam,const string& sparam)
{
//Zeitstempel
string stamp = IntegerToString(TimeLocal());
if(id== CHARTEVENT_OBJECT_CLICK && sparam == "Button")
{ // Namen werden dynamisch erstellt, damit es keine Verwechslung bei der Zuordnung gibt
Line (stamp+"Line",Time[10],High[10],Time[0],High[0],clrLime);
Arrow (stamp+"Arrow",Time[10],High[10],clrLime);
}
//Objekt wird ausgelesen und gespeichert
if(id== CHARTEVENT_OBJECT_CLICK)
{
Object = sparam;
}
//Tastenkombination shift+B wírd erfasst, wenn erfolgt
if(id==CHARTEVENT_KEYDOWN)
if(shift_pressed==false && lparam==16)
{shift_pressed= true;}
if(shift_pressed == true &&lparam == 66)// 66 = B
{
B_Button_pressed++; shift_pressed=false;
}
//Paramenter Name/Buttonpressed Wert/Zeitstempel werden an Funktion weitergegeben
MOVE_OBJECT(Object,B_Button_pressed,stamp);
}
void MOVE_OBJECT(string _Object,int _B_Button_pressed,string stamp)
{
//Name des geklickten Objektes wird gekürzt, so das der Zeitstempel
//alleine benutzt werden kann, um den zugehörigen Arrow korrekt zuordnen zu können
string Nummer = StringSubstr( _Object,0,10);
//Tastenkombi wurde ausgelößt
if(_B_Button_pressed == 1)
{//Objekt wird dementsprechend zu dem geklickten Objekt bewegt
ObjectMove(0,Nummer+"Arrow",0,ObjectGetInteger(0,_Object,OBJPROP_TIME1),ObjectGetDouble(0,_Object,OBJPROP_PRICE1) ) ;
}
if(_B_Button_pressed ==2)
{
_B_Button_pressed=0;
}
}
void Line(string name,datetime time1,double price1,datetime time2,double price2,color clr)
{
ObjectCreate(0,name,OBJ_TREND,0,time1,price1,time2,price2);
ObjectSetInteger(0,name,OBJPROP_COLOR,clrYellow);
ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_SOLID);
ObjectSetInteger(0,name,OBJPROP_WIDTH,2);
ObjectSetInteger(0,name,OBJPROP_BACK,true);
ObjectSetInteger(0,name,OBJPROP_SELECTABLE,true);
ObjectSetInteger(0,name,OBJPROP_SELECTED,true);
ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false);
ObjectSetInteger(0,name,OBJPROP_HIDDEN,false);
}
void Arrow(string name,datetime time,double price,color clr)
{
ObjectCreate(0,name,OBJ_ARROW,0,time,price);
ObjectSetInteger(0,name,OBJPROP_ARROWCODE,108);
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,10);
ObjectSetInteger(0,name,OBJPROP_WIDTH,1);
ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
ObjectSetInteger(0,name,OBJPROP_BACK,false);
ObjectSetInteger(0,name,OBJPROP_SELECTABLE,true);
ObjectSetInteger(0,name,OBJPROP_SELECTED,false);
ObjectSetInteger(0,name,OBJPROP_ZORDER,0);
}
void Button(string name)
{
ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,10);
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,10);
ObjectSetInteger(0,name,OBJPROP_XSIZE,70);
ObjectSetInteger(0,name,OBJPROP_YSIZE,30);
ObjectSetInteger(0,name,OBJPROP_CORNER,0);
ObjectSetString(0,name,OBJPROP_TEXT,"Button A");
ObjectSetString(0,name,OBJPROP_FONT,"Arial");
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,10);
ObjectSetInteger(0,name,OBJPROP_COLOR,clrSteelBlue);
ObjectSetInteger(0,name,OBJPROP_BGCOLOR,clrYellow);
ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,clrMagenta);
ObjectSetInteger(0,name,OBJPROP_BACK,true);
ObjectSetInteger(0,name,OBJPROP_STATE,true);
ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);
ObjectSetInteger(0,name,OBJPROP_SELECTED,false);
ObjectSetInteger(0,name,OBJPROP_HIDDEN,false);
ObjectSetInteger(0,name,OBJPROP_ZORDER,0);
}
Ok ich hoffe dieser Text ist verständlicher, grob gesagt erstelle ich eine Trendlinie und einen Arrow, nachdem ich die linie angeklickt habe, soll nach der tastenkombi shift+B , der Arrow dem ersten Punkt der Trendlinie folgen .
Wenn ich ein zweiten Objekt erstelle und der _B_Button_pressed status immer noch 1 ist, bewegt sich der 2ter Arrow umgehend zu der zweiten trendlinie die erstellt wurde und das möchte ich verhindern, so das jede linie ihren eigenen "_B_Button_pressed Status" erhält, wenn ich den status automatisch auf null setze wenn ich das objekt wechsle, wird der status des ersten objektes ja auch auf 0 gesetzt, und ich müsste die tastenkombi ja wiederholen, komm leider ned auf ne Lösung wie ich das matchen kann. hoffe das war ned zu kompliziert erklärt
|