OBJ_TEXTオブジェクトでテキストを複数行に出力することは可能ですか? - ページ 5

 
Nikolai Semko:

ここでもうひとつ問題がある。
カンヴァスを生成したコードにアクセスできない場合、そのカンヴァスのリソースにもアクセスできません。ビットマップオブジェクトの一覧は表示されますが、リソースの一覧は表示されません。リソース名がわからなければ、マッチングやブルートフォースで調べるしかなく、実用に耐えない。
認識のためのポイントの配列はどのようにするのですか?スクリーンショットを通してであれば、それもナンセンスです。
それとも私が間違っているのでしょうか?

コードはもちろん私のもので、つまりはオープンソースです。ただ、画面に日付が表示されているのなら、それをどこかに保存しておけば良いのにと思ったのですが.ただし、手に入ることが条件です。 はははは、「美しく」と。

まあなんというか、テキストフィールドから 文字列を取得して、そこから文字列の一部を引っ張ってくるようなものですね。しかし、残念なことに、そうではありません。

 
Andrey Barinov:

ビットマッププロパティには、リソースへのパスが設定されている。プログラム的に取得できるかどうかはわかりません。


その通りです。結局、画像からではなく、リソースから取得することが問題だったのです。そして、私自身、探していたものを失くしてしまったのです。どんな特性が得られるか、実験してみます。


うまくいかないんです...。

  string resource = "\\Scripts\\Test\\Canvas\\00.ex5::aaa";     // получили путь к ресурсу созданному другим скриптом

//  if(ObjectGetString(0, "aaa", OBJPROP_BMPFILE, 0, resource))
  if(ObjectSetString(0, "aaa", OBJPROP_BMPFILE, 0, resource))   // работает любая строка, хоть эта, хоть закомментированная выше
   {
    Print(ObjectGetString(0, "aaa", OBJPROP_NAME));             // имя есть
    Print(ObjectGetString(0, "aaa", OBJPROP_BMPFILE));          // путь к ресурсу есть
    Print(ObjectGetString(0, "aaa", OBJPROP_TEXT));             // текста нету.....
    Print(ObjectGetInteger(0, "aaa", OBJPROP_XDISTANCE));       // это значение тоже есть
   }

そして、見つからない配列の取得方法。そんなことが可能なのか?

 
Alexey Viktorov:

その通りです。結局、写真から得るのではなく、資料から得ることが問題だったのです。そして、自分自身が求めていたものを失ってしまったのです。どんな特性が得られるか、実験してみます。


うまくいかないんです...。

そして、配列を取得する方法が見つかりません。そんなことが可能なのか?

ResourceReadImage()とかでいいんじゃないでしょうか?

 
Alexey Viktorov:

コードはもちろん私のものですから、オープンです。ただ、画面に日付が表示されているのなら、どこかに保存しておけばいいのではと思ったのですが、それは ...ただし、手に入れられることが条件です。 ははは、いいねぇ。

まあなんというか、テキストボックスから文字列を取得して、その文字列の一部を抜き出すようなものですね。しかし、残念ながら、そんなことはない。

君は本当にすごいよ :))
科学時計にスーツケース一杯の電池を入れるというのは、クリエイティブではありますが、実はベストな解決策ではありません。
 
Andrey Barinov:
ResourceReadImage()とかでいいんじゃないでしょうか?

見つけたけど、何も効果がなかった。配列を文字列に変換しようとしましたが、配列の型が合いません。どうひねっても、うまくいかないんです。何か間違っているのかもしれないが、新しいアイデアはまだない。

 
Alexey Viktorov:

見つけたけど、何も効果がなかった。配列を文字列に変換しようとしましたが、配列の型が合いません。どう転んでも、うまくいかない。何か間違っているのかもしれないが、新しいアイデアはまだない。

画素の色データを文字列に変換するには?そして最も重要なのは、なぜか?
ビットマップイメージを取得して、それを認識しようとするのですが、それは別の科学です :)
 
Nikolai Semko:
君は本当にすごいよ :)))
サイエンスクロックのためにスーツケースいっぱいの電池を使うというのは、クリエイティブではありますが、本当はベストなソリューションではありません。

ニコライ でも、必ずしも当てはまる解決策ではありません。結局、あなたの漫画は同じシリーズのもので、美しいが、取引に応用できる可能性はない。

 
Andrey Barinov:
画素の色データを文字列に変換するには?そして最も重要なのは、なぜか?
ビットマップイメージを取得して、それを認識しようとするのですが、それは別の科学です :)

あ、あの、それは...。どうなんだろう))

一般的には、たぶんあきらめますね。おそらく、本当に球場の外に出ているのでしょう。

 

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

mql5言語の特徴、微妙なニュアンスとコツ

fxsaber さん 2017.10.31 08:11

// Сохранение Bitmap-объекта в bmp/gif/png-файле (прозрачность не учитывается)
bool BitmapObjectToFile( const long chartID, const string ObjName, const string FileName, const bool FullImage = false )
{  
  const ENUM_OBJECT Type = (ENUM_OBJECT)ObjectGetInteger(chartID, ObjName, OBJPROP_TYPE);  
  bool Res = (Type == OBJ_BITMAP_LABEL) || (Type == OBJ_BITMAP);
             
  if (Res)
  {
    const string Name = __FUNCTION__ + (string)MathRand();

    ObjectCreate(chartID, Name, OBJ_CHART, 0, 0, 0);
    ObjectSetInteger(chartID, Name, OBJPROP_XDISTANCE, -1 e3);
    
    const long chart = ObjectGetInteger(chartID, Name, OBJPROP_CHART_ID);
        
    Res = ChartSetInteger(chart, CHART_SHOW, false) && ObjectCreate(chart, Name, OBJ_BITMAP_LABEL, 0, 0, 0) &&
          ObjectSetString(chart, Name, OBJPROP_BMPFILE, ObjectGetString(chartID, ObjName, OBJPROP_BMPFILE)) &&
          (FullImage || (ObjectSetInteger(chart, Name, OBJPROP_XSIZE, ObjectGetInteger(chartID, ObjName, OBJPROP_XSIZE)) &&
                         ObjectSetInteger(chart, Name, OBJPROP_YSIZE, ObjectGetInteger(chartID, ObjName, OBJPROP_YSIZE)) &&
                         ObjectSetInteger(chart, Name, OBJPROP_XOFFSET, ObjectGetInteger(chartID, ObjName, OBJPROP_XOFFSET)) &&
                         ObjectSetInteger(chart, Name, OBJPROP_YOFFSET, ObjectGetInteger(chartID, ObjName, OBJPROP_YOFFSET)))) &&
                         ChartScreenShot(chart, FileName, (int)ObjectGetInteger(chart, Name, OBJPROP_XSIZE),
                                                          (int)ObjectGetInteger(chart, Name, OBJPROP_YSIZE));
    ObjectDelete(chartID, Name);
  }                    

  return(Res);
}


アプリケーション

// Сохраняет в png-файлах все Bitmap-объекты текущего чарта
void OnStart()
{  
  for (int i = ObjectsTotal(0) - 1; i >= 0; i--)
  {
    const string Name = ObjectName(0, i);
    
    BitmapObjectToFile(0, Name, (string)ChartID() + "\\" + Name + ".png");    
  }      
}


SZY BMP->GIF/PNGファイル変換も実装されました。

 
Alexey Viktorov:

新しい質問:キャンバスにあるリソースからテキストを読み取ることはできますか?

例えばこのようなセリフ、あるいはそのいずれかを。

目的:キャンバスで、日付を含む行があります。読みたいのはこの日です。

または、GV、ファイル、グラフィックなど、昔から試されてきた方法のいずれかを使用します。

ResourceReadImageを使ってリソースからデータを読み取ることができますが、これを行うにはResourceCreateを使ってそこにデータを書き込む必要があります。ResourceCreate関数はuintデータの配列しか受け付けないため、他のデータ型の配列を書きたい場合はunionを使用する必要があります。その中に型の異なる複数の配列を宣言する。その後、文字列を含む任意のデータをリソースに格納することができる。文字列をchar型に変換するにはStringToCharArrayを、その逆はCharArrayToStringを使用します。つまり、カンヴァスのことではなく、ユニオンの助けを借りてあらゆるデータを書き込むことができるリソースのことなのです。