Einzelnen Beitrag anzeigen
  #2 (permalink)  
Alt 21.04.21
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von RalphD Beitrag anzeigen
Wie bekommen ich das Shift+Click hin?
Ich würde die ganzen Kontrolltasten lieber nicht für sowas nehmen, da habe ich schon böse Überraschungen erlebt, weil die dann in MT schon für andere Aktionen belegt waren - das nur zur Info voraus.
(Die Tasten Notierung stehen in VirtualKeys.mqh von MT5 oder in der winuser.h von WIN, google hilft da.)

Die Tasten kannst Du auf 2 Weisen festlegen
1. mit #define als long Variable (#define Shift_Key 0x10)
2. mit ner externen Variable

Ich bevorzuge Buchstaben als externe Variable, weil man sich das erstens leichter merken kann und zweitens das dann ändern kann, falls man mal mit irgendwas anderem in Konflikt kommt.
Hier ein Beispiel wie ich für meine Indikatoren einen Button benutze, der 3 Funktionen hat: Indikator anzeigen/verstecken und Einstellungen speichern.

Code:
// ======================= UserInputs
extern string           LetterShow    = "S";           // Letter show (S)
extern string           LetterHide    = "H";           // Letter hide (H)

// ======================= Button
#define  ButtonText    "Sic2"     //TextOnButton
#define  ButtonName    "STRATic2" //NameOfButtonObject
static int  DoHiding  = -1;  // 1=yes -1=no
static bool AllowSave = 0;   // 1=yes 0=no

// ====================================
void OnChartEvent(const int id, const long &lparam,
                  const double &dparam, const string &sparam )
{
   // ==============================  letter was pressed
   if(id==CHARTEVENT_KEYDOWN) 
   {
      if(lparam==StringGetCharacter(LETTERSHOW,0)) { DoHiding=-1; } //NoHiding
      if(lparam==StringGetCharacter(LETTERHIDE,0)) { DoHiding= 1; } //DoHide
   }
   // ==============================  button was pressed
   if(id==CHARTEVENT_OBJECT_CLICK)
   {
      if(sparam==ButtonName)
      {
         if     (DoHiding==-1)   //NoHiding
         {
            if(ShowIndi())       //ExecuteShowActions
            {
               ChangeButton(0);  //IsPressed->ChangeToUnpressed
               DoHiding=-1;      //KeepNoHiding
               AllowSave=true;   //AllowSaving
            }
         }
         else if(DoHiding== 1)   //DoHide
         {
            if(HideIndi())       //ExecuteHideActions
            {
               ChangeButton(1);  //IsNotPressed->ToPressed
               DoHiding= 1;      //KeepHiding
               AllowSave=false;  //NoSavingWhenHiding
            }
         }
         if( AllowSave && SaveConfigToFile() )
         { 
            ReInit();
         }
      }
      else //TheButtonOfAnotherIndiWasPressed
      {
         if( ObjectGetInteger(0,ButtonName,OBJPROP_STATE)==false ) //OurButtonUnpressed
              { DoHiding=-1; AllowSave=true; }                     //AssumeNoHiding
         else { DoHiding= 1; AllowSave=false; }                    //OurButtonPressed
      }
   }
}
// ====================================
Ich hoffe, das hilft Dir Deine eigenen Konstrukte zu entwerfen.
AVT