記事"グラフィカルインタフェースX: Easy And Fast (簡単で手早い)ライブラリの更新(ビルド2)"についてのディスカッション - ページ 2 12345 新しいコメント Anatoli Kazharski 2016.08.07 19:20 #11 Alexey Oreshkin:多分、私のコードは削除されてしまったのだろう。... グラフィカル・インターフェース I:ライブラリ構造の準備 (第1章)上のコードリストで、関数の前にダブルコロンがあることに注目してほしい。実際には、これを省略してもすべてが正しく動作します。しかし、プログラミングの世界では、ある言語の システム関数の前にダブルコロンを付けるのは良い習慣とされている。これにより、その関数がシステム関数であることが明確になります。アレクセイ・オレシキンこのエラーは、インジケーターが作成したウィンドウを十字で閉じたときに発生します。ここにある例からMainWindow.mqhファイルを少し変更しました。追加チェックでエラーを除外します。次回のアップデートで修正します。リプレイに失敗しました。MainWindow.mqh ファイルにどのような変更を加えましたか?アレクセイ・オレシキンまた、作成されたテーブルの行を削除する方法がわかりません。今のところ方法はありません。ライブラリーの次のバージョンになります。テーブルやリストの行を追加したり削除したりできるようになります。 Alexey Oreshkin 2016.08.07 19:43 #12 不要なものを削除してしまったようだ。ファイルを添付します。p.s. テーブルの各列に異なる幅を設定できますか? ファイル: MainWindow.mqh 8 kb Program.mqh 6 kb SeparateWindow.mq5 3 kb Anatoli Kazharski 2016.08.07 20:19 #13 Alexey Oreshkin:不要なものを削除してしまったようだ。ファイルを添付します。p.s. テーブルの各列に異なる幅を設定できますか?同じテーブルのオブジェクトを要素ベースに2回追加したのが原因です。まず、CProgram::CreateTable()テーブル作成 メソッドでそれを行い、次にCProgram::ModifyTable()メソッドでそれを行います。以下のコード・リストで赤く ハイライトされている行を削除してください。//+------------------------------------------------------------------+ //|| シンボル・テーブルの作成| //+------------------------------------------------------------------+ bool CProgram::ModifyTable(int id) { int r=1; switch(id){ case 0: for(int c=0;c<COLUMNS2_TOTAL;c++) for(r=1;r<ROWS2_TOTAL;r++) m_table.SetValue(c,r,"rb1 "+(string)c+" "+(string)r); break; case 1: for(int c=0;c<COLUMNS2_TOTAL;c++) for(r=1;r<ROWS2_TOTAL-5;r++) m_table.SetValue(c,r,"rb2 "+(string)c+" "+(string)r); break; case 3: for(int c=0;c<COLUMNS2_TOTAL;c++) for(r=1;r<ROWS2_TOTAL-10;r++) m_table.SetValue(c,r,"rb3 "+(string)c+" "+(string)r); break; } for(int c=0;c<COLUMNS2_TOTAL;c++) for(int rr=r;rr<ROWS2_TOTAL;rr++) m_table.SetValue(c,rr,""); //--- 変更を示すためにテーブルを更新する m_table.UpdateTable(); //--- オブジェクト・グループの共通配列にオブジェクトを追加する。 CWndContainer::AddToElementsArray(0,m_table); return(true); } //---タイムフレームやシンボルを変更する場合など、チャートからプログラムを削除したり、再読み込みしたりするときに、以前にすでに削除された項目を削除しようとする2回目の試みが行われました。テーブル・オブジェクトを削除すると、配列が解放され、項目を削除するメソッドを再度呼び出すとエラーが発生しました。アレクセイ・オレシキンp.s. テーブルの各列に異なる幅を設定できますか?このタイプのテーブル(CTable)ではできません。列の幅を設定できるのはCCanvasTable タイプのテーブルだけです。しかし、このタイプのテーブルでは、今のところ、他にも多くの制限があります。CCanvasTable タイプのテーブルの可能性は拡張される予定です。 Alexey Oreshkin 2016.08.07 21:25 #14 Anatoli Kazharski:その理由は、同じテーブル・オブジェクトを要素ベースに 2 回追加したためです。まずCProgram::CreateTable()メソッドで行い、次にCProgram::ModifyTable()メソッドで行います。下のコード・リストで赤く ハイライトされている行を削除してください。CCanvasTableを試して みます。うまくいくかもしれません。 ありがとうございます!p.s:テーブルの行を削除できない場合、テーブル全体を削除して、必要なテーブルを再度作成することができます。削除方法も見つかりませんでした。テーブルの削除はまだできないのですか?p.s2: テーブルの列の幅を変えることができないので、2つのテーブルを隣り合わせに配置するのが論理的ですが、私の理解では、テーブルが自動的に右の境界線まで拡大されるため、それはできません。AutoXResizeModeという メソッドがあるのですが、まだ機能していないのでしょうか? falseに設定すると、何も変化が起こりません。 Anatoli Kazharski 2016.08.08 09:02 #15 Alexey Oreshkin:...p.s.:テーブルの行を削除できない場合、テーブル全体を削除して、必要なテーブルを再度作成することができます。削除メソッドも見つかりませんでした。まだテーブルを削除できないのですか?現在は、すべてのGUI 要素が一度に作成され、Show()メソッドとHide()メソッドを使用してそれらの可視性を制御できます。アレクセイ・オレシキンp.s2:異なる幅のテーブル列を作成できないので、2つのテーブルを隣り合わせに配置するのが論理的ですが、テーブルが自動的に右の境界線まで拡大されるため、それができないことに気づきました。AutoXResizeModeという メソッドがありますが、まだ動作していないのでしょうか? これがfalseに設定されている場合、変更は発生しません。テーブルの幅を設定するには、XSize() メソッドを使用します。例m_table.XSize(300); Alexey Oreshkin 2016.08.08 13:54 #16 ご回答ありがとうございました。 あといくつか質問があります:1.データが表のセルに収まらない場合、将来このセルにツールチップかティッカーを表示する予定はありますか?2.いくつかのテーブルで水平スクロールを無効にすることは可能ですか?p.s: 5列のテーブルを作成し、さらに表示しようとするとエラーが発生します。このオプションは馬鹿げているとは思いますが、必要です。特に、テーブルが将来的にダイナミックになる可能性がある場合は。p.s2:表示と非表示のメソッドは完璧に機能し、その場でテーブルを変更するのではなく、必要なテーブルを表示することができます。各タブに必要なテーブルを作成し、それをラジオボタンにバインドし、それらがアクティブになると必要なものが表示され、そうでないものは非表示になります。ここではすべて機能しています。しかし、なぜか作成直後に無関係なテーブルを非表示にすることができません。このため、スクロール・バーが 正しく機能しないのだと思いますが、ラジオ・ボタンを一度クリックし、不要なものがすべて非表示になると、すべてがうまく機能し始めます。 Anatoli Kazharski 2016.08.08 20:23 #17 Alexey Oreshkin:1.データが表のセルに収まらない場合、将来的にこのセルにツールチップかティッカーを表示する予定はありますか?今後のアップデートリストに追加しました。テーブル内にツールチップを表示するモードを作る予定です。アレクセイ・オレシキン2.いくつかのテーブルで水平スクロールを無効にすることは可能ですか?テーブルの可視部分が全体の部分より小さい場合にスクロールバーが 表示されます。Alexey Oreshkin:5列のテーブルを作成し、さらに表示しようとするとエラーが発生します。このオプションは馬鹿げていると思いますが、チェックは必要です。特に、将来的にテーブルがダイナミックになる可能性があるのであれば。修正しました。次のアップデートで利用できるようになります。アレクセイ・オレシキンp.s2:表示と非表示の方法は完璧に機能し、その場でテーブルを変更するのではなく、必要なものを表示することができます。各タブに必要なテーブルを作り、ラジオボタンにバインドしました。ここではすべてうまくいく。しかし、なぜか作成直後に無関係なテーブルを非表示にすることができません。このため、スクロール・バーが正しく機能しないのだと思いますが、ラジオ・ボタンを一度クリックし、不要なものがすべて非表示になると、すべてがうまく機能し始めます。タブエレメントが更新された後に非表示にしてください://--- アクティブなタブの項目を表示する m_tabs.ShowTabElements(); //--- テーブルを隠す ...うまくいかない場合は、コードを送ってください。 Alexey Oreshkin 2016.08.08 22:49 #18 起動時はほとんど動かないのですが、ラジオボタンを使って更新すると、すべてが正常に動き始めます。新しいタブに切り替えても、ラジオボタンをクリックするまでは同じ問題です。 アーカイブをPMに送りました。 Anatoli Kazharski 2016.08.09 10:45 #19 Alexey Oreshkin: 起動時、スクロールバーはほとんど機能しませんが、ラジオボタンを使って更新すると、すべてが正常に機能し始めます。 アーカイブをPMに送りました。あなたのファイルを見ました。問題ははっきりしています。表示されているテーブルの上にあるスクロールバーの 間に矛盾があります。タブを切り替えると、現在選択されているタブに割り当てられているすべての項目が見えるようになります。タブを切り替えると、現在選択されているタブに割り当てられている項目がすべて見えるようになります。下のスクリーンショットをご覧ください。わかりやすくするために、このタブの2つのテーブルの座標を変えてあります://---タブの切り替えがあったことを知らせるイベントが必要だ。そして、カスタムクラスのハンドラでそれを受け取り、必要なアクションを取ることができる。あなたの場合、選択されたラジオボタンのインデックスを取得し、それに関連づけられたテーブルを表示し、他のテーブルを非表示にすることができます。 今のところ、このようなイベントはタブの切り替え時には生成されません。次回のライブラリ更新で利用可能になる予定です。 Alexey Oreshkin 2016.08.09 11:18 #20 いつアップデートを待てばいい? 12345 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
多分、私のコードは削除されてしまったのだろう。
...
グラフィカル・インターフェース I:ライブラリ構造の準備 (第1章)
上のコードリストで、関数の前にダブルコロンがあることに注目してほしい。実際には、これを省略してもすべてが正しく動作します。しかし、プログラミングの世界では、ある言語の システム関数の前にダブルコロンを付けるのは良い習慣とされている。これにより、その関数がシステム関数であることが明確になります。
このエラーは、インジケーターが作成したウィンドウを十字で閉じたときに発生します。ここにある例からMainWindow.mqhファイルを少し変更しました。
追加チェックでエラーを除外します。次回のアップデートで修正します。リプレイに失敗しました。MainWindow.mqh ファイルにどのような変更を加えましたか?
また、作成されたテーブルの行を削除する方法がわかりません。
今のところ方法はありません。ライブラリーの次のバージョンになります。テーブルやリストの行を追加したり削除したりできるようになります。
不要なものを削除してしまったようだ。ファイルを添付します。
p.s. テーブルの各列に異なる幅を設定できますか?
不要なものを削除してしまったようだ。ファイルを添付します。
p.s. テーブルの各列に異なる幅を設定できますか?
同じテーブルのオブジェクトを要素ベースに2回追加したのが原因です。まず、CProgram::CreateTable()テーブル作成 メソッドでそれを行い、次にCProgram::ModifyTable()メソッドでそれを行います。以下のコード・リストで赤く ハイライトされている行を削除してください。
//---
タイムフレームやシンボルを変更する場合など、チャートからプログラムを削除したり、再読み込みしたりするときに、以前にすでに削除された項目を削除しようとする2回目の試みが行われました。テーブル・オブジェクトを削除すると、配列が解放され、項目を削除するメソッドを再度呼び出すとエラーが発生しました。
p.s. テーブルの各列に異なる幅を設定できますか?
このタイプのテーブル(CTable)ではできません。列の幅を設定できるのはCCanvasTable タイプのテーブルだけです。しかし、このタイプのテーブルでは、今のところ、他にも多くの制限があります。CCanvasTable タイプのテーブルの可能性は拡張される予定です。
その理由は、同じテーブル・オブジェクトを要素ベースに 2 回追加したためです。まずCProgram::CreateTable()メソッドで行い、次にCProgram::ModifyTable()メソッドで行います。下のコード・リストで赤く ハイライトされている行を削除してください。
CCanvasTableを試して みます。うまくいくかもしれません。
ありがとうございます!
p.s:テーブルの行を削除できない場合、テーブル全体を削除して、必要なテーブルを再度作成することができます。削除方法も見つかりませんでした。テーブルの削除はまだできないのですか?
p.s2: テーブルの列の幅を変えることができないので、2つのテーブルを隣り合わせに配置するのが論理的ですが、私の理解では、テーブルが自動的に右の境界線まで拡大されるため、それはできません。AutoXResizeModeという メソッドがあるのですが、まだ機能していないのでしょうか? falseに設定すると、何も変化が起こりません。
...
p.s.:テーブルの行を削除できない場合、テーブル全体を削除して、必要なテーブルを再度作成することができます。削除メソッドも見つかりませんでした。まだテーブルを削除できないのですか?
現在は、すべてのGUI 要素が一度に作成され、Show()メソッドとHide()メソッドを使用してそれらの可視性を制御できます。
アレクセイ・オレシキン
p.s2:異なる幅のテーブル列を作成できないので、2つのテーブルを隣り合わせに配置するのが論理的ですが、テーブルが自動的に右の境界線まで拡大されるため、それができないことに気づきました。AutoXResizeModeという メソッドがありますが、まだ動作していないのでしょうか? これがfalseに設定されている場合、変更は発生しません。
テーブルの幅を設定するには、XSize() メソッドを使用します。
例
m_table.XSize(300);ご回答ありがとうございました。
あといくつか質問があります:
1.データが表のセルに収まらない場合、将来このセルにツールチップかティッカーを表示する予定はありますか?
2.いくつかのテーブルで水平スクロールを無効にすることは可能ですか?
p.s:
5列のテーブルを作成し、さらに表示しようとするとエラーが発生します。このオプションは馬鹿げているとは思いますが、必要です。特に、テーブルが将来的にダイナミックになる可能性がある場合は。
p.s2:表示と非表示のメソッドは完璧に機能し、その場でテーブルを変更するのではなく、必要なテーブルを表示することができます。各タブに必要なテーブルを作成し、それをラジオボタンにバインドし、それらがアクティブになると必要なものが表示され、そうでないものは非表示になります。ここではすべて機能しています。しかし、なぜか作成直後に無関係なテーブルを非表示にすることができません。このため、スクロール・バーが 正しく機能しないのだと思いますが、ラジオ・ボタンを一度クリックし、不要なものがすべて非表示になると、すべてがうまく機能し始めます。
1.データが表のセルに収まらない場合、将来的にこのセルにツールチップかティッカーを表示する予定はありますか?
今後のアップデートリストに追加しました。テーブル内にツールチップを表示するモードを作る予定です。
2.いくつかのテーブルで水平スクロールを無効にすることは可能ですか?
テーブルの可視部分が全体の部分より小さい場合にスクロールバーが 表示されます。
5列のテーブルを作成し、さらに表示しようとするとエラーが発生します。このオプションは馬鹿げていると思いますが、チェックは必要です。特に、将来的にテーブルがダイナミックになる可能性があるのであれば。
修正しました。次のアップデートで利用できるようになります。
p.s2:表示と非表示の方法は完璧に機能し、その場でテーブルを変更するのではなく、必要なものを表示することができます。各タブに必要なテーブルを作り、ラジオボタンにバインドしました。ここではすべてうまくいく。しかし、なぜか作成直後に無関係なテーブルを非表示にすることができません。このため、スクロール・バーが正しく機能しないのだと思いますが、ラジオ・ボタンを一度クリックし、不要なものがすべて非表示になると、すべてがうまく機能し始めます。
タブエレメントが更新された後に非表示にしてください:
うまくいかない場合は、コードを送ってください。
アーカイブをPMに送りました。
起動時、スクロールバーはほとんど機能しませんが、ラジオボタンを使って更新すると、すべてが正常に機能し始めます。 アーカイブをPMに送りました。
あなたのファイルを見ました。問題ははっきりしています。表示されているテーブルの上にあるスクロールバーの 間に矛盾があります。タブを切り替えると、現在選択されているタブに割り当てられているすべての項目が見えるようになります。タブを切り替えると、現在選択されているタブに割り当てられている項目がすべて見えるようになります。下のスクリーンショットをご覧ください。わかりやすくするために、このタブの2つのテーブルの座標を変えてあります:
//---
タブの切り替えがあったことを知らせるイベントが必要だ。そして、カスタムクラスのハンドラでそれを受け取り、必要なアクションを取ることができる。あなたの場合、選択されたラジオボタンのインデックスを取得し、それに関連づけられたテーブルを表示し、他のテーブルを非表示にすることができます。
今のところ、このようなイベントはタブの切り替え時には生成されません。次回のライブラリ更新で利用可能になる予定です。