Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4978
Beiträge: 43265
Benutzer: 7.222
Aktive Benutzer: 72
Links: 84
Wir begrüßen unseren neuesten Benutzer: Mane
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- Mane
vor 2 Wochen
- AlbertZiz
vor 2 Wochen
- michak
vor 2 Wochen
- Amateur
vor 2 Wochen
- infos1982

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 161
Gesamt: 161
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 21.04.21
Benutzerbild von RalphD
Neues Mitglied
 
Registriert seit: Jul 2019
Beiträge: 24
RalphD befindet sich auf einem aufstrebenden Ast
Standard 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

Geändert von RalphD (21.04.21 um 09:57 Uhr)
  #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
  #3 (permalink)  
Alt 21.04.21
Benutzerbild von RalphD
Neues Mitglied
 
Registriert seit: Jul 2019
Beiträge: 24
RalphD befindet sich auf einem aufstrebenden Ast
Standard

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

Lesezeichen

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +2. Es ist jetzt 20:23 Uhr.





Suchmaschine - Reisen - Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------