記事「DoEasy - コントロール(第31部):ScrollBarコントロールのコンテンツのスクロール」についてのディスカッション - ページ 2

 
leonerd CArrayの Sort()メソッドは、オブジェクトをソートするために継承したクラスで別途実装する必要があるのではないでしょうか?

いいえ、CArrayObjの中にSort()メソッドがあります:

//+------------------------------------------------------------------+
//| ソートされた配列の要素の位置を検索する。
//+------------------------------------------------------------------+
int CArrayObj::Search(const CObject *element) const
  {
   int pos;
//--- チェック
   if(m_data_total==0 || !CheckPointer(element) || m_sort_mode==-1)
      return(-1);
//--- 検索
   pos=QuickSearch(element);
   if(m_data[pos].Compare(element,m_sort_mode)==0)
      return(pos);
//--- 見つからない
   return(-1);
  }
//+------------------------------------------------------------------+

メソッドの中にCompare() メソッドが あり、それを継承クラスでオーバーライドする必要があります。

目的のバーを探すリストにオブジェクトが格納されているCBarクラスでは、Compare()メソッドはすでにオーバーライドされています(ライブラリオブジェクトのすべてのクラスでも同様です):

//+------------------------------------------------------------------+
//| CBarオブジェクトを指定されたプロパティで比較する。
//+------------------------------------------------------------------+
int CBar::Compare(const CObject *node,const int mode=0) const
  {
   const CBar *bar_compared=node;
//--- 2つのバーの整数特性の比較
   if(mode<BAR_PROP_INTEGER_TOTAL)
     {
      long value_compared=bar_compared.GetProperty((ENUM_BAR_PROP_INTEGER)mode);
      long value_current=this.GetProperty((ENUM_BAR_PROP_INTEGER)mode);
      return(value_current>value_compared ? 1 : value_current<value_compared ? -1 : 0);
     }
//--- 2本のバーの実特性の比較
   else if(mode<BAR_PROP_DOUBLE_TOTAL+BAR_PROP_INTEGER_TOTAL)
     {
      double value_compared=bar_compared.GetProperty((ENUM_BAR_PROP_DOUBLE)mode);
      double value_current=this.GetProperty((ENUM_BAR_PROP_DOUBLE)mode);
      return(value_current>value_compared ? 1 : value_current<value_compared ? -1 : 0);
     }
//--- 2つのバーの文字列プロパティの比較
   else if(mode<BAR_PROP_DOUBLE_TOTAL+BAR_PROP_INTEGER_TOTAL+BAR_PROP_STRING_TOTAL)
     {
      string value_compared=bar_compared.GetProperty((ENUM_BAR_PROP_STRING)mode);
      string value_current=this.GetProperty((ENUM_BAR_PROP_STRING)mode);
      return(value_current>value_compared ? 1 : value_current<value_compared ? -1 : 0);
     }
   return 0;
  }
//+------------------------------------------------------------------+

ライブラリのオブジェクト検索の構造は正しく構成されています。

なぜ失敗するのでしょうか?それは単に、ライブラリの勉強を最初から始めていないからではないでしょうか?

 
Artyom Trishkin #:


うまくいかないのはなぜ?もしかしたら、最初からライブラリを使っていないせいかもしれませんよ?

こんにちは。もちろん、あなたの記事をすべて読んだわけではありません。なかったと思う。しかし、単純なものが機能せず、どのように機能すべきかすら説明されていない。

ここには標準的なグラフィック要素がある。ところで、多くの基本的な要素(この場合はEdit)については例すらない。

ですから、CreateEditField()は動作しません。CreateNewStdGraphObjectAndGetCtrlObj()メソッドでクラッシュする。これだ:

CChartObjectsControl *ctrl=this.GetChartObjectCtrlObj(chart_id);
                        if(ctrl==NULL)
                           ::Print(DFUN,CMessage::Text(MSG_GRAPH_ELM_COLLECTION_ERR_FAILED_GET_CTRL_OBJ),(string)chart_id);
CChartObjectsControl *CGraphElementsCollection::GetChartObjectCtrlObj(const long chart_id)
  {
//--- リスト内のオブジェクトの総数をループする。
   for(int i=0;i<this.m_list_charts_control.Total();i++)
     {
      //--- 次のオブジェクトへのポインタを取得する。
      CChartObjectsControl *obj=this.m_list_charts_control.At(i);
      //--- ポインタが取得できなかった場合 - 次に進む
      if(obj==NULL)
         continue;
      //--- オブジェクト・チャートの識別子が検索されたものと等しい場合 - リスト内のオブジェクトへのポインタを返す。
      if(obj.ChartID()==chart_id)
         return obj;
     }
//--- オブジェクトが見つかりませんでした。
   return NULL;
  }

m_list_charts_controlが空なので、何も追加されず、メソッドは何も返さない。

一般的に、エラーはたくさんある。このライブラリを実際に使う人はいないような気がする。IOCを充填する唯一のタイプのツールを使ってみよう。さて、それは動作しません。正しく定義されていないからだ。私はたくさんのメソッドを編集しなければなりませんでした......。自分のトレード手法を通すだけ。しかも、初期化のイニシャル・メソッドはフィリングを修正するのだが、トレーディング・メソッドはそれを拾わない。

CTrading::OpenPosition() メソッド

this.m_request.type_filling=(type_filling>WRONG_VALUE ? type_filling : trade_obj.GetTypeFilling());

OK、注文で明示的に指定されていない場合、正しい充填のタイプを見つけました。

しかし、次のメソッドに元の変数を渡します。何が言いたいのでしょうか?それとも何か理解できないのでしょうか?

res=trade_obj.OpenPosition(type,this.m_request.volume,this.m_request.sl,this.m_request.tp,magic,comment,deviation,type_filling);
 
leonerd #:

こんにちは。もちろん、あなたの記事をすべて読んだわけではない。もちろん、あなたの記事をすべて読んだわけではない。でも、単純なことがうまくいかないし、どのように機能すべきなのかも説明されていない。

ここには標準的なグラフィック要素がある。ところで、あなたは多くの基本的な要素(この場合はEdit)の例さえ持っていない。

ですから、CreateEditField()は動作しません。CreateNewStdGraphObjectAndGetCtrlObj()メソッドでクラッシュします。これがそれだ:

m_list_charts_controlは空なので、何も追加されず、メソッドは何も返さない。

一般的に、エラーはたくさんある。このライブラリを実際に使う人はいないような気がする。IOCを充填する唯一のタイプのツールを使ってみよう。さて、それは動作しません。正しく定義されていないからだ。私はたくさんのメソッドを編集しなければなりませんでした......。トレーディング・メソッドを編集する必要がありました。初期設定のメソッドではフィリングが修正されますが、トレード・メソッドでは修正されません。

CTrading::OpenPosition() メソッド

OK、注文で明示的に指定されていない場合、正しい充填のタイプを見つけました。

しかし、次のメソッドに元の変数を渡します。何が言いたいのでしょうか?それとも何か理解できないのだろうか?

この議論はこの記事と関係があるのだろうか?いいえ。
質問はどの記事ですか?
その議論に対処しましょう。
追記 ライブラリ用の入力フィールドクラスを作った覚えはありません。CreateEditField() どこから入手したのですか?
 
Artyom Trishkin #:
この議論はこの記事と関係があるのだろうか?いいえ。
どの記事についての質問ですか?
この議論の中で扱いましょう。
追記 ライブラリ用の入力フィールドクラスを作った覚えはありません。CreateEditField() どこから入手したのですか?

Engine.mqhのCreateEditField()

 
leonerd #:

Engine.mqhのCreateEditField()

私の携帯電話からは見ることができません)
後でコードを見てからお答えします。
 
leonerd #:
CreateEditField()は動作しません。CreateNewStdGraphObjectAndGetCtrlObj()メソッドでクラッシュする。

なぜプライベート・メソッドに干渉するのか?それらはライブラリが動作するためだけに必要なのだ。

ユーザーが必要とするのはパブリック・メソッドだ。エンドユーザーには内部メソッドの働きは必要ない。

もしこのすべての働きを理解したいのであれば、このキッチンのすべてを説明した記事がこの目的のために書かれている。あなたが何をどのようにしたいのか、あまり明確ではありません。あなたは何も言わず、例も挙げず、ただ膨大な数の中から抜粋した一行を指して、それは機能しないと言っている......。

leonerd#:
一般的に、関節は十分にある。このライブラリを実際に使う人はいないような気がします。

説明を読まずに自分で内部メソッドを改造して使おうとするなら、十分なバグがあるのは作者ではなく、改造する方です。

そうそう、このライブラリーはまだ開発中なんだ。

塗りつぶしタイプを見てみるよ。

でも、対応する記事のディスカッションで議論したほうがいいと思います。そうすれば、あることを他のことのディスカッションで話すのではなく、一度に説明を見ることができます。

 
А зачем Вы в приватные методы лезете? Они нужны только для работы библиотеки.
あそこに入りたいとは思わない。すべてがうまくいっているのなら、開けることさえしない。
 
leonerd #:
あそこに入りたいとは思わない。すべてがうまくいっていたら、開くことすらしない。

何がダメなんだ?コードをお願いします。機能していないと言うだけでは生産性がない。

 
Artyom Trishkin #:

何が問題なのですか?コードをお願いします。うまくいかないと言うだけでは生産的ではありません。

生産的でないことは同意する。だからこそ、このコメント(https://www.mql5.com/ru/forum/438481/page2#comment_53551638)で最大限の詳細を提供したのだ。

Обсуждение статьи "DoEasy. Элементы управления (Часть 31): Прокрутка содержимого элемента управления "ScrollBar""
Обсуждение статьи "DoEasy. Элементы управления (Часть 31): Прокрутка содержимого элемента управления "ScrollBar""
  • 2023.06.19
  • Artyom Trishkin
  • www.mql5.com
Опубликована статья DoEasy. Элементы управления (Часть 31): Прокрутка содержимого элемента управления "ScrollBar" : Автор: Artyom Trishkin...
 
leonerd #:
私はこのコメントで最大限の詳細を提供した。

最大限の詳細とは、コンパイルし、実行し、何が機能しないかを確認し、原因を見つけて報告できるコードのことだ。

テストがなければ、記事は公開されない。テストではすべてが機能する。だから3回目もお願いしているのです:そこであなたは何をしていて、何がうまくいかないのか。コードをお願いします。