Zitat:
Zitat von RalphD
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