記事"グラフィカルインタフェースXI:標準グラフィックライブラリの統合(ビルド16)"についてのディスカッション

 

新しい記事 グラフィカルインタフェースXI:標準グラフィックライブラリの統合(ビルド16) はパブリッシュされました:

グラフィックライブラリの科学的なグラフを作成するための新バージョン(CGraphicクラス)が最近発表されました。今回のアップデートでは、グラフィカルインターフェイス作成のために開発された当ライブラリにグラフを作成するための新しいコントロールを備えたバージョンが導入されます。さまざまな種類のデータを視覚化することがさらに簡単になりました。

最終的には次のようになります。

 図4 テスト用MQLアプリケーションの3番目のタブ(グリッド)のコントロール

図4 テスト用MQLアプリケーションの3番目のタブ(グリッド)のコントロール


作者: Anatoli Kazharski

 
素晴らしい記事だ。
 

素晴らしい図書館だ!

 

おめでとう!よくやった

 

こんにちは。

問題は私が予期していなかったところから現れた...。

メイン・ウィンドウとダイアログ・ウィンドウが1つずつある。すべて順調だった。もう一つダイアログウィンドウを 追加しました。

すると、このようになりました。つのダイアログ・ウィンドウを開く。それを閉じる。つ目のダイアログ・ウィンドウを開くと、その中のエレメントはクリックに反応しない。ウィンドウのタイトルをクリックするまでは、このウィンドウではすべてが正常です。しかし、最初のウィンドウでは、タイトルをクリックするまで同じ問題が発生します。

何が悪いのでしょうか?あるいは、どこを見ればいいのでしょうか?

ファイル:
123123123.gif  504 kb
 

パッケージをダウンロードし、CTableのデモGUIを作成した。

#include <\\EasyAndFastGUI\\WndEvents.mqh>

//+------------------------------------------------------------------+
//| アプリケーションを作成するためのクラス|
//+------------------------------------------------------------------+
class CGUI : public CWndEvents {
  private:
    CWindow           m_window;
    CTable            m_table;

  public:
    bool              CreateGUI(const int x, const int y, const string caption_text);

  private:
    bool              CreateWindow(const int x, const int y, const int x_size, const int y_size, const string text);
    bool              CreateTable(const int x_gap, const int y_gap);
};

bool CGUI::CreateGUI(const int x, const int y, const string caption_text) {
  int x_size = 400,
      y_size = 400;
  
  if (!CreateWindow(x, y, x_size, y_size, caption_text)) {
    return(false);
  }

  if (!CreateTable(1, 20)) {
    return(false);
  }

  m_chart.Redraw();
  return(true);
}

//+------------------------------------------------------------------+
//| コントロール用のフォーム1を作成|
//+------------------------------------------------------------------+
bool CGUI::CreateWindow(const int x, const int y, const int x_size, const int y_size, const string caption_text) {
  CWndContainer::AddWindow(m_window);

  m_window.XSize(x_size);
  m_window.YSize(y_size);
  m_window.Alpha(255);

  m_window.IsMovable(true);
  m_window.ResizeMode(true);
  m_window.CloseButtonIsUsed(true);
  m_window.FullscreenButtonIsUsed(true);
  m_window.CollapseButtonIsUsed(true);
  m_window.TooltipsButtonIsUsed(true);
  m_window.RollUpSubwindowMode(true, true);
  m_window.TransparentOnlyCaption(true);

  //--- ツールチップを設定する
  m_window.GetCloseButtonPointer().Tooltip("Close");
  m_window.GetFullscreenButtonPointer().Tooltip("Fullscreen/Minimize");
  m_window.GetCollapseButtonPointer().Tooltip("Collapse/Expand");
  m_window.GetTooltipButtonPointer().Tooltip("Tooltips");

  m_window.BackColor((color)ChartGetInteger(m_chart_id, CHART_COLOR_BACKGROUND));
  m_window.BorderColor(clrMaroon);

  return(m_window.CreateWindow(m_chart_id, m_subwin, caption_text, x, y));
}

//+------------------------------------------------------------------+
//| レンダリングされたテーブルの作成|
//+------------------------------------------------------------------+
bool CGUI::CreateTable(const int x_gap,const int y_gap) {
  m_table.MainPointer(m_window);

  int x_size = 300,
      y_size = 300;

  int column_width[] = {100, 200};

  m_table.XSize(x_size);
  m_table.YSize(y_size);

  m_table.TableSize(2, 10);

  m_table.ColumnsWidth(column_width);
  m_table.CellYSize(30);

  ENUM_ALIGN_MODE column_align[];
  ArrayResize(column_align, 2);
  ::ArrayInitialize(column_align, ALIGN_RIGHT);
  m_table.TextAlign(column_align);

  color bg_color = (color)ChartGetInteger(m_chart_id, CHART_COLOR_BACKGROUND);
  m_table.CellColor(bg_color);
  m_table.GridColor(bg_color);
  m_table.BorderColor(bg_color);
  m_table.FontSize(12);

  /*
 CScrollV *scroll_v = m_table.GetScrollVPointer();
 scroll_v.ChangeThumbSize(0, 0);
 scroll_v.Hide();
 scroll_v.IsVisible(false); CScrollH *scroll_h = m_table.GetScrollHPointer(); scroll_h.IsVisible(false);

 CScrollH *scroll_h = m_table.GetScrollHPointer();
 scroll_h.ChangeThumbSize(0, 0);
 scroll_h.Hide();
 scroll_h.IsVisible(false);
 //*/.
   

  //m_table.TextXOffset(5);
  //m_table.TextYOffset(4);
  m_table.ShowHeaders(false);
  m_table.SelectableRow(false);
  m_table.ColumnResizeMode(false);
  //m_table.IsZebraFormatRows(clrWhiteSmoke);
  //m_table.AutoXResizeMode(true);
  //m_table.AutoXResizeRightOffset(1);
  //m_table.AutoYResizeMode(true);
  //m_table.AutoYResizeBottomOffset(25);

  if (!m_table.CreateTable(x_gap, y_gap)) {
    return(false);
  }

  CWndContainer::AddToElementsArray(0, m_table);

  m_table.Update(true);

  m_window.Update(true);

  return(true);
}

//+------------------------------------------------------------------+
//| エキスパート初期化関数|
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   CGUI gui;
   gui.CreateGUI(10, 50, "Test GUI");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
|エキスパート初期化関数|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| エキスパート・ティック機能|
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+

しかし、Hide(), IsVisiable(false)を使用しても、CTableコントロールが常にH/Vスクロールバーのスペースを残していることがわかりました。


回避策を教えてください。

よろしくお願いします、

デビッド

 

この質問はすでに議論されているかもしれませんが、私は見ませんでした。チャートに新しいオブジェクト(例えばライン)を追加した後、パネルを再描画させるには?


パネルを最小化すると、すでにこれらの線の上にあることに気づきました。



 
traderEvgen:

この質問はすでに議論されているかもしれませんが、私は見ませんでした。チャートに新しいオブジェクト(例えば線)を追加した後、パネルを再描画させるには?

  • ライブラリの最新版をダウンロードしてください。
  • CWndEvents::ResetWindow()メソッドを呼び出してみてください。

追伸: ライブラリはもう更新されません。必要な変更、修正、追加は、もしそのような必要性が生じた場合、ユーザが自分で学ぶべきです。

 
Anatoli Kazharski:

  • ライブラリの最新版をダウンロードしてください。
  • CWndEvents::ResetWindow()メソッドを呼び出してみてください。

追伸: ライブラリは今後更新されません。必要な変更、修正、追加は、もしそのような必要性が生じた場合、ユーザーが自分で学ぶべきです。


ありがとう。

 

残念なことに、様々なビルド(リリース)は一緒にはなりません。

つまり、Article01からArticle11までのすべての例は、本当はエラーなしで動くはずなのです。

しかし、コンパイラは前の例で多くの警告とエラーを投げます。


新しいバージョンを'コピーオーバー'することによって、古い例はもはや動作しません。

さらに、翻訳は不十分か存在しません。

素晴らしい!


Metaquotesの多くのことに典型的で残念なことだ。

互換性のない断片的なものだけでなく、完全に機能する完全なリリースをオンラインに載せるべきでしょう

サンプルファイルの目次と、足りないものはどこにあるのか。これは、このシリーズの最後の記事のトピックになるだろう。

もし使えるサンプルがなかったら、せっかくの作業を無駄にしてしまうことになります。

よろしく、オットー・パウザー

そして、本当に欠けているのはダイアログ・エディターだ!

 

私は試してみるつもりだ