//+------------------------------------------------------------------+ //| TFApp.mqh | //| Thorsten Fischer Copyright 2019 | //| https://www.tfsystem.de | //+------------------------------------------------------------------+ #property copyright "Thorsten Fischer Copyright 2019" #property link "https://www.tfsystem.de" #property version "1.00" //#include "..\..\Include\TF-Class\TF-Funktionen.mqh" //#include #include //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class CTFApp : public CWndContainer { private: string m_program_name; // name of program string m_file_name; // name of file int m_file_flags_read; // flags of file int m_file_flags_write; // flags of file int m_deinit_reason; // deinit reason int m_chart_number; // chart number long m_chart_id_ea; // chart id ea protected: //CChart m_chart; public: CTFApp(); ~CTFApp(); virtual int OnInitEvent(void); virtual bool OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam); virtual void Destroy(const int reason=REASON_PROGRAM1); virtual void OnTimerEvent(void); virtual void DPrint(const string ausgabe="") { if(IS_DEBUG_MODE) Print(ausgabe); } //virtual string getProgramName(void) const { return(m_program_name); } //virtual int getChartNumber(void) const { return(m_chart_number); } virtual void setChartNumber(void); virtual string getDeInitReasonText(int reasonCode); virtual bool IniFileSave(void); // Ini File Save virtual bool IniFileLoad(void); // Ini File Load //virtual bool IniFileNew(void); // Ini File New virtual string IniFileName(void) {return(m_program_name+"_Ini");} // Ini File Name virtual string IniFileExt(void) const { return(".dat"); } // Ini File Extension virtual bool Load(const int file_handle); // Load Data virtual bool Save(const int file_handle); // Save Data void Test(void) {ChartRedraw();Sleep(1000*5);} // test ChartRedraw und Sleep 1000*5 void CAusgabe(color farbe) { DPrint(ColorToString(farbe,true)+" ist = "+ColorToString(farbe));} }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ CTFApp::CTFApp() : m_program_name(MQLInfoString(MQL_PROGRAM_NAME)), m_file_name(IniFileName()+IniFileExt()), m_file_flags_read(FILE_READ|FILE_BIN|FILE_ANSI|FILE_COMMON), m_file_flags_write(FILE_WRITE|FILE_BIN|FILE_ANSI|FILE_COMMON), m_deinit_reason(WRONG_VALUE), m_chart_id_ea(ChartID()) { setChartNumber(); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ CTFApp::~CTFApp() { } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int CTFApp::OnInitEvent(void) { //--- if(!IniFileLoad()) { DPrint(__FUNCTION__+" > Fehler bei dem Laden des Ini Files"); return(INIT_FAILED); } DPrint(" > ChartOpen = "+(string)ChartOpen(ChartSymbol(),0)); DPrint("> m_deinit_reason = "+(string)m_deinit_reason+" / m_chart_id_ea = "+(string)m_chart_id_ea+" / m_chart_number = "+(string)m_chart_number); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool CTFApp::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam) { //--- //DPrint(__FUNCTION__+" aufgerufen mit | "+IntegerToString(id)+" | "+DoubleToString(lparam)+" | "+DoubleToString(dparam)+" | "+sparam); //--- // apptrademanager.OnEvent(id,lparam,dparam,sparam); //--- //DPrint(__FUNCTION__+" durchlaufen"); return(true); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void CTFApp::Destroy(const int reason) { //--- if(m_deinit_reason==WRONG_VALUE) return; //--- m_deinit_reason=reason; //--- if(!IniFileSave()) DPrint(__FUNCTION__+" > Fehler bei dem Speichern des Ini Files"); //--- //m_hauptfenster.Destroy(reason); //--- if((reason==REASON_PROGRAM) && ((ENUM_PROGRAM_TYPE)MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_EXPERT)) DPrint("reason und Progam_expert (reason==REASON_PROGRAM) && ((ENUM_PROGRAM_TYPE)MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_EXPERT)"); //--- DPrint(__FUNCTION__+" durchlaufen | "+getDeInitReasonText(reason)); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void CTFApp::OnTimerEvent(void) { //--- // //CTFApp.OnTimerEvent(); //--- DPrint(__FUNCTION__+" durchlaufen"); } //+------------------------------------------------------------------+ //| Die Funktion gibt die Anzahl der Charts im Terminal zurück | //+------------------------------------------------------------------+ void CTFApp::setChartNumber(void) { long currChart=ChartFirst(); int i=0; while(currChart>=0) { currChart=ChartNext(currChart); i++; } m_chart_number=i; } //+------------------------------------------------------------------+ //|gibt Reason Code als Text zurück | //+------------------------------------------------------------------+ string CTFApp::getDeInitReasonText(int reasonCode) { //--- switch(reasonCode) { case REASON_PROGRAM: return("0 = Das Progamm wurde durch ExpertRemove() beendet."); case REASON_REMOVE: return("1 = Das Programm wurde vom Chart entfernt."); case REASON_RECOMPILE: return("2 = Das Programm wurde neu compiliert."); case REASON_CHARTCHANGE: return("3 = Ein Chartsymbol oder die Chartperiode wurde geändert."); case REASON_CHARTCLOSE: return("4 = Das Chartfenster wurde geschlossen."); case REASON_PARAMETERS: return("5 = Ein Programm Eingabeparameter wurde geändert."); case REASON_ACCOUNT: return("6 = Eine Handelskontoeinstellung wurde geändert."); case REASON_TEMPLATE: return("7 = Ein Charttemplate wurde angewendet."); case REASON_INITFAILED: return("8 = Ein Fehler in OnInit()"); case REASON_CLOSE: return("9 = Das Terminal wurde geschlossen."); default: return("Der Fehlercode ist noch unbekannt."); } return(""); } //+------------------------------------------------------------------+ //| Save the current state of the program | //+------------------------------------------------------------------+ bool CTFApp::IniFileSave(void) { //--- int handle=FileOpen(m_file_name,m_file_flags_write); //--- if(handle==INVALID_HANDLE) return(false); //--- if(!Save(handle)) { FileClose(handle); return(false); } //--- FileClose(handle); //--- return(true); } //+------------------------------------------------------------------+ //| Read the previous state of the program | //+------------------------------------------------------------------+ bool CTFApp::IniFileLoad(void) { //--- int handle=FileOpen(m_file_name,m_file_flags_read); //--- if(handle==INVALID_HANDLE) { DPrint(__FUNCTION__+" > kein Ini File vorhanden, Standard Ini File wird erzeugt"); if(!IniFileSave()) { DPrint(__FUNCTION__+" > Standard Ini File konnte nicht richtig erzeugt werden"); return(false); } handle=FileOpen(m_file_name,m_file_flags_read); if(handle==INVALID_HANDLE) return(false); } //--- if(!Load(handle)) { FileClose(handle); return(false); } //--- FileClose(handle); //--- return(true); } //+------------------------------------------------------------------+ //| Save a new state of the program | //+------------------------------------------------------------------+ //bool CTFApp::IniFileNew(void) // { //--- // if(!IniFileSave()) // return(false); //--- // return(true); // } //+------------------------------------------------------------------+ //| Load Data | //+------------------------------------------------------------------+ bool CTFApp::Load(const int file_handle) { //--- int stringlen=0; //--- check if(file_handle==INVALID_HANDLE) return(false); //--- m_deinit_reason=FileReadInteger(file_handle); //stringlen=FileReadInteger(file_handle); //m_program_name=FileReadString(file_handle,stringlen); //--- return(true); } //+------------------------------------------------------------------+ //| Save Data | //+------------------------------------------------------------------+ bool CTFApp::Save(const int file_handle) { //--- int stringlen=0; //--- check if(file_handle==INVALID_HANDLE) return(false); //--- save if(FileWriteInteger(file_handle,m_deinit_reason)!=sizeof(int)) return(false); //stringlen=StringLen(m_program_name); //if(FileWriteInteger(file_handle,stringlen)==sizeof(int)) // if(FileWriteString(file_handle,m_program_name,stringlen)!=stringlen) // return(false); //DPrint(__FUNCTION__+" n/"+(string)m_deinit_reason+"/"+(string)sizeof(int)+"/"+m_program_name+"/"+(string)file_handle+"/FileTell = "+(string)FileTell(file_handle)); //--- return(true); } //+------------------------------------------------------------------+