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: 4687
Beiträge: 41994
Benutzer: 7.047
Aktive Benutzer: 161
Links: 82
Wir begrüßen unseren neuesten Benutzer: Janosch
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 21:38).
Neue Benutzer:
vor einem Tag
- Janosch
vor 5 Tagen
- mezzler
vor 5 Tagen
- Flogge
vor einer Woche
- XGuard
vor einer Woche
- webthinker

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

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt vor 2 Wochen
Benutzerbild von RalphD
Neues Mitglied
 
Registriert seit: Jul 2019
Beiträge: 23
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 (vor 2 Wochen um 08:57 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt vor 2 Wochen
AVT AVT ist offline
Premium Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 490
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
Mit Zitat antworten
  #3 (permalink)  
Alt vor 2 Wochen
Benutzerbild von RalphD
Neues Mitglied
 
Registriert seit: Jul 2019
Beiträge: 23
RalphD befindet sich auf einem aufstrebenden Ast
Standard

Vielen Dank. Das sieht gut aus. Jetzt habe ich einen Ansatz.
Mit Zitat antworten
Antwort

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 +1. Es ist jetzt 19:12 Uhr.





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