Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Aktion bei Shift+Mouseclick (http://www.expert-advisor.com/forum/showthread.php?t=6974)

RalphD 21.04.21 09:40

Aktion bei Shift+Mouseclick
 
Hallo zusammen,

ich brauche mal eure Hilfe.
In einem EA habe ich Button programmiert. Als Beispiel einen Buy-Button. Wird der betätigt, wird eine Market Buy ausgelöst. Nun möchte ich den gleichen Button noch eine weitere Orderart hinzufügen. Bei gedrückter, z.B., Shift Taste und click auf den Button, soll eine BuyStop über der letzten Kerze liegen.
sieht in etwa so aus:

if(id == CHARTEVENT_OBJECT_CLICK && sparam == "BuyButton ###") { // Buy Button

Wie bekommen ich das Shift+Click hin?

CHARTEVENT_KEYDOWN habe ich schon gefunden. Aber, wie definiere ich die Shift-Taste und wie verbinde ich das mit dem Mouseclick?

Kann da jemand helfen?

Vielen Dank im voraus.
Ralph

AVT 21.04.21 11:08

Zitat:

Zitat von RalphD (Beitrag 45325)
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

RalphD 21.04.21 12:07

Vielen Dank. Das sieht gut aus. Jetzt habe ich einen Ansatz.


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:55 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum