記事"グラフィカルインタフェースX: Timeコントロール、チェックボックスコントロールのリストとテーブルのソート(ビルド6)"についてのディスカッション - ページ 3

 
Artyom Trishkin:

多分、そこで古いものがアップデートに追加されたのだろう。私は、記事の一番下にあるzipからサイトからダウンロードした最新のアップデートからファイルを取り出した。

ここで、上に書いたように修正した:

素晴らしい。あるいは、何度もあったように、そこに何か釘を刺しているかもしれない。)しかし、何かあれば、私は心に留めておきます。
 
Anatoli Kazharski:
ああ、よかった。そうしないと、何度もあったように、何か釘を刺されてしまうかもしれない。)でも、肝に銘じておくよ。

バカなことを強要している。


小さいけど、わかるでしょ。

それに、自分で積んで中を見ればいいんだ。簡単なことだよ、特に教えてもらったんだから。

 
Artyom Trishkin:

私にバカなことをさせようとしている。

小さいけど、見ることはできる。

自分でダウンロードして中を見ることだってできたはずだ。

証拠を出せとは言ってない。ただ、覚えておくと言っただけだ。でも、まだ再現していない。覚えておくよ。

もし問題があるとすれば、あなたの修正はすべてのケースで機能するとは限らない。あなたのケースでは機能しますが、そこではすべてのモードをテストする必要があります。問題が見つかれば自分でやるつもりだ。

本当に、無意味なことはするな。)

 
Anatoli Kazharski:

証拠を出せとは言っていない。覚えておくと言っただけだ。でも、まだ再現していない。覚えておくよ。

問題がある場合、あなたの修正はすべてのケースで機能するとは限りません。あなたのケースではうまくいくが、そこではすべてのモードをテストする必要がある。問題が見つかれば自分でやるつもりだ。

本当に、無意味なことはするな。)

わかったよ。)

Tol、質問:テーブルはカラムでソートされています。しかし......、テーブルに空の行があり、それがたくさんある場合、ソートには空の行も含まれます。例えば、1000行(1001-ヘッダーはゼロ)のテーブルがあるとしよう。しかし現在、市場概要には10文字しかない。それらはすべてテーブルの最初の10行、つまり1行目から10行目までに入っている。残りの行は空です(表は動的ではなく、記号は表に追加/削除できます)。このようなテーブルをソートしようとすると、ソートされたリストはテーブルの一番最後、990行目から1000行目(ゼロ、ヘッダー)まで行ってしまい、一番上には空の行が表示される。これは良くないことであり、私が思うに、省略である。

 
Artyom Trishkin:

...テーブルは動的ではなく、キャラクターはテーブルに追加/削除することができます...

もうすぐダイナミックになります。私は今それに取り組んでいます。
 
Anatoli Kazharski:
もうすぐダイナミックになる。今、その真っ最中なんだ。
それは素晴らしい!ソートされたリストに完全に空の行が含まれる問題は?それについては?
 
Artyom Trishkin:
...そして、ソートされたリストに完全に空の行が含まれる問題は?それについてはどうですか?
今のところはこのまま。すぐにはソートには戻らないよ。
 
Anatoli Kazharski:
今のところはこのままだ。すぐに仕分けに戻るつもりはない。
そうだね。そして、いつかそれを微調整することができる。
 
Anatoli Kazharski:
...

ContextMenu.mqhのコンテキストメニューの 区切り線も同じで、メニュー項目間の区切りバーが座標上にありません。

メソッドの中で

//+------------------------------------------------------------------+
//| 区切り線を作る|
//+------------------------------------------------------------------+
bool CContextMenu::CreateSeparateLine(const int line_number,const int x,const int y)
  {
//--- フォーム・ポインタを保存する
   m_sep_line[line_number].WindowPointer(m_wnd);
//--- プロパティを設定する
   m_sep_line[line_number].TypeSepLine(H_SEP_LINE);
   m_sep_line[line_number].DarkColor(m_sepline_dark_color);
   m_sep_line[line_number].LightColor(m_sepline_light_color);
   m_sep_line[line_number].AnchorRightWindowSide(m_anchor_right_window_side);
   m_sep_line[line_number].AnchorBottomWindowSide(m_anchor_bottom_window_side);
//--- 仕切り線を作る
   if(!m_sep_line[line_number].CreateSeparateLine(m_chart_id,m_subwin,line_number,x,y,m_x_size-10,2))
      return(false);
//--- オブジェクト・ポインタを保存する
   CElement::AddToArray(m_sep_line[line_number].Object(0));
   return(true);
  }
//+------------------------------------------------------------------+

でハイライトされた部分を

//+------------------------------------------------------------------+
//| 区切り線を作る|
//+------------------------------------------------------------------+
bool CContextMenu::CreateSeparateLine(const int line_number,const int x,const int y)
  {
//--- フォーム・ポインタを保存する
   m_sep_line[line_number].WindowPointer(m_wnd);
//--- プロパティを設定する
   m_sep_line[line_number].TypeSepLine(H_SEP_LINE);
   m_sep_line[line_number].DarkColor(m_sepline_dark_color);
   m_sep_line[line_number].LightColor(m_sepline_light_color);
   m_sep_line[line_number].AnchorRightWindowSide(m_anchor_right_window_side);
   m_sep_line[line_number].AnchorBottomWindowSide(m_anchor_bottom_window_side);
//--- 仕切り線を作る
   if(!m_sep_line[line_number].CreateSeparateLine(m_chart_id,m_subwin,line_number,x-m_wnd.X(),y-m_wnd.Y(),m_x_size-10,2))
      return(false);
//--- オブジェクト・ポインタを保存する
   CElement::AddToArray(m_sep_line[line_number].Object(0));
   return(true);
  }
//+------------------------------------------------------------------+

で置き換えたところ、セパレーターバーがその場所に表示されるようになりました。

 
Artyom Trishkin:

ContextMenu.mqhのコンテキストメニューの区切り線も同様で、メニュー項目間の区切り線が座標上にありません。

このようなケースはすべて再現しました。これは、他のアイテムのコンポーネントとして使用されるすべてのアイテムに当てはまります。GUI作成 時のフォームの初期絶対座標が(1,1)より大きい場合に検出されます。

次のビルドで修正される予定です。一時的な応急処置として、(1)あなたの例、または(2)フォームの初期座標を(1,1)に設定する、のいずれかが有効です。他の要素位置決めモードが散見される可能性があるので、2番目の方がよいでしょう。