私のアプローチコアはエンジンです。 - ページ 7

 
プロパティ、オブジェクト、エレメントを配置するのに最適な方法は、テーブルを作成 することです。

エレメントの核となるのはテーブルです。

特定の要素の初期オブジェクトパラメータを保存するために設計された、プロトカーネルモデルを作成しました。

次に、メインのKernelを作り、そこに必要なだけの要素を書き込む必要があります。

そして、メインカーネル内の各要素に新しい値を設定する。

その後、エレメントを作成します。

そして、さまざまなイベントで一緒に活動することになります。


 

メインコアを宣言する。

int G_CORE[All_objects][All_properties];

Coreの各列は、1つのObjectを占有することになります。

コアに入るオブジェクトの総数が何個になるかを決めなければなりません。そのためには、作成したいItemの数と、各Itemに含まれるObjectの数を計算する必要があります。

例えば、ボタンが10個あるとします。つまり、10要素×3オブジェクト=30オブジェクト。つまり、30列あるわけです。

#define  All_objects     30
#define  All_properties  10

メインコアのプロパティの数を増やしたのは、基本的なパラメータに加えて、要素やオブジェクトの名前、要素間のリンク、その他のプロパティが必要だからです。


オブジェクトのプロパティを 再宣言します。

#define  NAME        0
#define  TYPE        1
#define  ELEMENT     2

#define  X           3
#define  X_SIZE      4
#define  Y           5
#define  Y_SIZE      6
#define  BG_COLOR    7
#define  TEXT_COLOR  7
#define  TEXT        8
#define  CORNER      9
#define  STATE       10
//-------------------

TEXTプロパティには、ボタンテキストを格納する別の配列への参照が格納されます。

ELEMENTプロパティは、コア内で同じ要素のオブジェクトをリンクするために必要です(どのオブジェクトがどの要素に属しているかの混乱を避けるため)。このプロパティには、要素のシーケンス番号を設定する。

 
Реter Konow: //要素のプロパティへの呼び出しはこのようになります。

ベースとテキストとアイコンを混同しがちです。このインデックスとこのインデックスの中身は、説明で明確になっています。実際のプログラミングでは、すべてを頭の中に入れておかなければならない。ピーターは記憶力の巨人でありながら、忘れる能力が著しく低下していることは知っている。しかし、そんな巨人はあまりいないのではないでしょうか。もう次の日にはどこに何を入れるか忘れそうです。

大体以下のような感じで良いのではないでしょうか(私ならそうします)。

必要な素構造を宣言する。

struct SPosition
{
uint m_uiX;
uint m_uiY;
};

struct SElementSize
{
uint m_uiXSize;
uint m_uiYSize;
};

これで、共通オブジェクトからベース、テキスト、アイコンの各インタフェースを取得できるようになりました。

CBaseI* pbBase = core.GetBase();
CTextI* ptText = core.GetText();
CIconI* pbIcon = core.GetIcon();

そして、これら3つのインターフェースのいずれかが - 関連するプロパティを設定します。まあ、例えばテキストとかね。

ptText.SetPosition(SPosition& rpPos);

位置構造(XとY)を埋めて、コアからテキストインターフェースを呼び出し、このインターフェースから、構造を使って位置設定関数を呼び出す のです。また、それぞれのインターフェースには、サイズやカラーを設定する機能があります。すべての関数がゼロに設定される、共通の純粋な仮想インターフェイスからそれらを継承することは理にかなっています。

ここでは、ミックスすることがより難しくなっています。なぜなら、どんなときでも、あなたは自分の仕事に必要なものしか手に入れることができないからです。そして何か他のもののために、それを呼び出す必要があります。もしそれが許されないのであれば、適切なシステム設計をすれば、この「禁じられた」インターフェースを呼び出すこともできないので、間違いから自分を守ることができます。

 

で、まずプロトタイプカーネルのプロパティの数を変えてみましょう、メインカーネルと同じでしたね。次にG_COREの構築のサイクルをやってみましょう。

int P_CORE[3][10] = {
//Основание кнопки.-----------------------------
//
//NAME     TYPE   ELEMENT     X    Y     X_SIZE  Y_SIZE       COLOR 
//----------------------------------------------
{ 100001,  base,  button,    100, 100,    200,    50,    C'245,245,245'},
//---------------------------------------------- 
//Текст кнопки.---------------------------------
//
//NAME    TYPE   ELEMENT   X    Y     X_SIZE  Y_SIZE       COLOR 
//----------------------------------------------
{100002,  text,  button,  120, 120,     0,      0,       C'245,0,0'},
//---------------------------------------------- 
//Иконка кнопки.-------------------------------- 
//
//NAME    TYPE     ELEMENT   X    Y     X_SIZE  Y_SIZE       COLOR 
{100003,  icon,    button,  140, 140,     16,     16,           0},
//---------------------------------------------- 
};
//Далее, строим G_CORE:
//--------------------------------------
int q = 0;
//--------------
for(int a1 = 0; a1 < All_objects; a1++)
  {
   for(int a2 = 0; a2 < All_properties; a2++)
    {
     G_CORE[a1][a2] = P_CORE[q][a2];
    }
     q++;
     if(q == 3)q = 0;    
  }


この後、G_COREコアは10個のボタンのプロトタイプで埋め尽くされることになります。次に、Elementにユニークな名前をつけ、オブジェクトを そのElementにバインド し、各Elementにユニークなインデックスを与えることである。

 
Реter Konow:

で、まずプロトタイプカーネルのプロパティの数を変えてみましょう、メインカーネルと同じでしたね。では、G_COREを構築するループを作ってみましょう。

このコードから完璧にわかりますね。

a1が何の略で、a2が何の略なのか、もう忘れてしまったよ。

でも、面倒なのは半分で、忘れていたら上を見なければならなくなる。でも、忘れていないことは確かだし、要素が混ざっても大丈夫。 そのうえで、すぐに判明すればしめたものです。そうでなければ、まったく事実ではなく、エラーはずっと後になって、不運の法則によって、最も弱い場所で、最も都合の悪い瞬間に影響することになります。

ピーターさんのやり方は、暗記の巨人のようなもので、これもごく普通のことです。しかし、そのような巨漢の参加者はどれくらいいるのだろうか。

 

一方、一部でも ある小さな会社が、お粗末なGUIのコードを公開した。 :-)

彼らは本当に曲がり角に来ている...彼らは競争を恐れている!

ジョーク、ジョークですが、興味のある方はWindowsのGUIがどのように作られているのかを内部から見ることができます。

WPFは、Windowsデスクトップアプリケーションを構築するための.NET Core UIフレームワークです。: https://github.com/dotnet/wpf

Windows Formsは、Windowsデスクトップアプリケーションを構築するための.NET Core UIフレームワークです: https://github.com/dotnet/winforms

UWP XAML コントロールを含む Windows UI 機能の後方互換バージョン、および Fluent スタイルとマテリアル: https://github.com/Microsoft/microsoft-ui-xaml


 
Maxim Kuznetsov:

一方、一部でも ある小さな会社が、その安っぽいGUIのコードを公開した。 :-

ここではGUIが問題なのではありません。私のアプローチは、あらゆる目的に外挿し、応用することが可能です。AIを含む。

次に、それがどのようにできるかを紹介します。

 
ジョージ 続けさせてください。あなたはOOPが好きで、その方が快適なのは知っています。しかし、あなたの判断は、プログラマーの資格で計算されています。私は今、自分が最大限に成長できるようなアプローチ方法を探しています。利便性は二の次です。
 
Реter Konow:

コアの中にいくつのオブジェクトを入れるかを決めなければなりません。そのためには、作成したいItemの数と、各Itemに含まれるObjectの数を計算する必要があります。

#define  All_objects     30
#define  All_properties  10

会場からの質問

ここでは、取引Expert Advisorの取引表を作成するとします。各行 - エントリー、出口価格、ボリュームなどを含む1つのトランザクションです。表の行数を正しく決定するために、Expert Advisorが実行する取引 回数をコンパイル前に事前に知るにはどうすればよいでしょうか。

 
Vasiliy Sokolov:

会場からの質問

例えば、あるExpert Advisorのトレードのテーブルを作成するとします。各行には、エントリー、エグジット価格、ボリュームなどの1つのトレードがあります。テーブルの行数を正しく決定するために、エキスパートアドバイザーが実行する取引 数をコンパイル前に事前に知るにはどうすればよいですか?

各取引でArrayResizeを使用して配列に数値を追加し、取引のプロパティをそれに記録します。

同時に、プロパティをあらかじめセルに分配しておく。

その後、全データを取り寄せます。