Einzelnen Beitrag anzeigen
  #4 (permalink)  
Alt 12.03.17
Trader6666 Trader6666 ist offline
Mitglied
 
Registriert seit: Apr 2014
Beiträge: 118
Trader6666 befindet sich auf einem aufstrebenden Ast
Standard

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