文章 "图形界面 VIII: 文件导航器控件 (第三章)" - 页 4

 
Реter Konow:

逻辑告诉我,这两个选项是相互排斥的。如果不是这样,我很乐意这样做。我正在努力完成这个项目。我不能说需要多长时间,但一定会完成的。

我的项目 也远未完成。感兴趣的用户提出了很多有趣的建议,我希望能够实现这些建议。名单在不断扩大。

Retag Konow

也许我们将来还会合作:)

一切皆有可能。)

 
Tol,问题:如何在导航器中选择保存程序文件的文件夹,而不是文件?
 
Artyom Trishkin:
Tol,问题:如何在导航器中选择保存程序文件的文件夹而不是文件?

例如

//---

//+------------------------------------------------------------------+
//| 事件处理程序|
//+------------------------------------------------------------------+
void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
//--- 处理 "更改树形列表中的路径 "事件
   if(id==CHARTEVENT_CUSTOM+ON_CHANGE_TREE_PATH)
     {
      ::Print(__FUNCTION__," > id: ",id,"; file name: ",m_navigator.SelectedFile());
      ::Print(__FUNCTION__," > id: ",id,"; path: ",m_navigator.CurrentPath()+m_navigator.SelectedFile());
      ::Print(__FUNCTION__," > id: ",id,"; full path: ",m_navigator.CurrentFullPath()+m_navigator.SelectedFile());
      //--- 如果选择了文件,则读取该文件(前三行)
      if(m_navigator.SelectedFile()!="")
        {
         //--- 生成文件路径
         string path=m_navigator.CurrentPath()+m_navigator.SelectedFile();
         //--- 获取指定文件的句柄
         int filehandle=::FileOpen(path,FILE_READ|FILE_TXT|FILE_ANSI|m_navigator.DirectoryArea(),'\n');
         //--- 如果收到句柄,则读取前三行
         if(filehandle!=INVALID_HANDLE)
           {
            ::Print(__FUNCTION__," > 文件打开: ",path);
            ::Print(__FUNCTION__," > 第 01 行:",::FileReadString(filehandle));
            ::Print(__FUNCTION__," > 第 02 行:",::FileReadString(filehandle));
            ::Print(__FUNCTION__," > 第 03 行:",::FileReadString(filehandle));
           }
         //--- 关闭文件
         ::FileClose(filehandle);
        }
      ::Print("---");
      return;
     }
  }

//---

CProgram::OnEvent > id: 1024; file name:
CProgram::OnEvent > id: 1024; path: ChartScreenshot\
CProgram::OnEvent > id: 1024; full path: D:\#TradingTerminals\MetaTrader 5 pretest\MQL5\Files\ChartScreenshot\
 
Anatoli Kazharski:

例如

//---

...

//---

CProgram::OnEvent > id: 1024; file name:
CProgram::OnEvent > id: 1024; path: ChartScreenshot\
CProgram::OnEvent > id: 1024; full path: D:\#TradingTerminals\MetaTrader 5 pretest\MQL5\Files\ChartScreenshot\
谢谢。
 
Anatoli Kazharski:
Tol,还有一个问题:从程序中创建新文件后,如何查看导航器显示的目录变化?到目前为止,只有切换时间框架才会导致导航器中的数据更新。CFileNavigator.mqh 中的 Reset() 方法无法实现预期结果。
 
Artyom Trishkin:
Tol,还有一个问题:从程序中创建新文件后,如何查看导航器显示的目录变化?到目前为止,只有切换时间框架才会导致导航器中的数据更新。CFileNavigator.mqh 中的 Reset() 方法无法实现预期结果。
尚未实施,但已列入计划。
 
Anatoli Kazharski:
尚未实施,但已列入计划。

我明白了。让我们拭目以待...

还有一个问题:导航器中的子文件夹是按照字母顺序定位的。这不方便:


会有解决办法吗?

 
Artyom Trishkin:

另一个问题:导航器中的子文件夹是按字母顺序排列的。这并不方便:

...

会有解决办法吗?

我同意这很不方便。会有解决办法的。我现在还不能告诉你具体时间。
 
Anatoli Kazharski:
我同意这很不方便。会有解决办法的。我还不能告诉你具体时间
我明白了。不着急)
 
Artyom Trishkin:
好吧...不着急)
顺便说一下,这是读取文件系统时给出的列表顺序。也就是说,不是按照你在操作系统的文件导航器中 看到的顺序。