![]() |
|
|||||||
| Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
| Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
![]() |
|
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
|
Ich habe ein Problem in OnChartEvent mit dem CHARTEVENT_OBJECT_CLICK.
Es gibt (im Subwindow) insgesamt 13 Symbol Buttons, deren Namen setzt sich so zusammen: indName="xRSI"; PFX=indName+"_"+IntegerToString(SubWin); 1. Button z.B. PFX+"but.dax" 2. Button z.B. PFX+"but.ibx" Aufgelöst ergibt das xRSI_1but.dax xRSI_1but.ibx Alle Button Namen sind in einem Array gespeichert string sNamButt[13]; Diese kann ich mir in einem Loop auch alle korrekt anzeigen lassen. Im OnChartEvent sollen die Linien der Symbole auf Knopfdruck versteckt werden. Dummerweise erkennt der Indikator den Knopfdruck bei den Symbol Buttons nicht. Ich habe zuerst einen Loop versucht - negativ. Danach habe ich den 1. Button direkt benannt (also den Dax Knopf) - negativ. Jetzt bin ich ratlos, woran das liegen könnte. Wenn jemand mal drüber schauen könnte, wäre ich ich für Ideen dankbar. Als Beispiel die Show Funktion (Hide umgedreht): Code:
// ====================================
// === Indexnummern sind dieselben wie in den Arrays
bool ShowIndexLine(int ArrNumber=-1)
{
bSymVis[ArrNumber]=true;
SetIndexStyle(ArrNumber,DRAW_LINE,STYLEDIS,WIDTHDIS, cSymCol[ArrNumber]);
return(true);
}
Code:
void OnChartEvent(const int id, const long &lparam,
const double &dparam, const string &sparam )
{
// ============================== letter
if(id==CHARTEVENT_KEYDOWN)
{
// ==> funktioniert
if(lparam==StringGetCharacter(LETTERSHOW,0)) { DoHiding=-1; } //NoHiding
if(lparam==StringGetCharacter(LETTERHIDE,0)) { DoHiding= 1; } //DoHide
Print(__FUNCTION__," letter ",lparam," was pressed. DoHiding=",(int)DoHiding);
}
// ============================== buttons
if(id==CHARTEVENT_OBJECT_CLICK)
{
// ==> funktioniert NICHT
for(int n=0; n<iNoOfSym; n++) //iNoOfSym=13
{
if( sparam==sNamButt[n] )
{
Print(__FUNCTION__," Button ",sparam," was pressed"); //<== kein Print
if(DoHiding==-1) //NoHiding
{
if(ShowIndexLine(n))
{
ObjectSetInteger(0,sparam,OBJPROP_STATE,false);
Print(__FUNCTION__," Sym vis=",(bool)bSymVis[n]); //SetIn ShowIndexLine
break;
}
}//NoHiding
else if(DoHiding== 1) //HideIndex
{
if(HideIndexLine(n))
{
ObjectSetInteger(0,sparam,OBJPROP_STATE,true);
Print(__FUNCTION__," Sym vis=",(bool)bSymVis[n]); //SetIn HideIndexLine
break;
}
}//HideIndex
}//AnIndexButton
}
// ==> funktioniert
if(sparam==ButtonName) // Save button
{
Print(__FUNCTION__," Button ",sparam," was pressed");
if( SaveConfigToFile() )
{
ChangeButton(0); //->ToUnpressed
ReInit();
}
else ChangeButton(1); //SomeError->ToPressed
}
// ======================================================================
// ==> funktioniert NICHT
else if( sparam==PFX+"but.dax" )
{
Print(__FUNCTION__," Button ",sparam," was pressed"); //<== kein Print
if(DoHiding==-1) //NoHiding
{
if(ShowIndexLine(0))
{
ChangeIndexButton(sparam,0); //Unpressed
Print(__FUNCTION__," Sym vis=",(bool)bSymVis[0]); //SetIn ShowIndexLine
}
}//NoHiding
else if(DoHiding== 1) //HideIndex
{
if(HideIndexLine(0))
{
ChangeIndexButton(sparam,1); //Pressed
Print(__FUNCTION__," Sym vis=",(bool)bSymVis[0]); //SetIn HideIndexLine
}
}//HideIndex
}//AnIndexButton
}
|
|
|||
|
Nur um es mal festzuhalten. Als vorläufige Lösung habe ich jedem einzelnen Button mit einem #define einen Namen zugewiesen, z.B.
Code:
#define nameButDax PFX+"but.dax" Code:
// ============================== buttons
if(id==CHARTEVENT_OBJECT_CLICK)
{
// ==================
if(sparam==nameButDax)
{
//Print(__FUNCTION__," Button ",sparam," was pressed");
if(DoHiding==-1) //NoHiding
{
if(ShowIndexLine(0)) ChangeIndexButton(sparam,0); //Unpressed
}
else if(DoHiding== 1) //HideIndex
{
if(HideIndexLine(0)) ChangeIndexButton(sparam,1); //Pressed
}
}
}
AVT
|
![]() |
| Lesezeichen |
| Themen-Optionen | Thema durchsuchen |
| Ansicht | |
|
|