É possível emitir texto em várias linhas em um objeto OBJ_TEXT? - página 5

 
Nikolai Semko:

Há outro problema aqui.
Se você não tem acesso ao código que gerou o Kanvas, então também não tem acesso ao recurso daquele Kanvas. Você pode ver a lista de objetos de bitmap, mas não a lista de recursos. Se você não souber o nome do recurso, você só poderá descobri-lo através de correspondência ou força bruta, o que está além do uso prático.
Como você obtém uma série de pontos para reconhecimento? Se pelo menos através de uma captura de tela, o que também é um absurdo.
Ou eu estou errado?

O código é obviamente meu, o que significa que é de código aberto. Eu só pensei que se há uma data na tela, por que outra razão guardá-la em algum lugar se você pode consegui-la ... Desde que você possa obtê-lo. Ha-ha-ha, "lindamente" disse.

Bem parecido com como você pode obter um cordel de um campo de texto e puxar parte do cordel de lá. Mas, infelizmente, não, não.

 
Andrey Barinov:

A propriedade bitmap tem o caminho para o recurso. Não sei se você pode obtê-lo de forma programática.


Exatamente. Afinal de contas, a questão não era obtê-la de uma imagem, mas de um recurso. E então eu mesmo perdi o que estava procurando. Vou experimentar e ver que propriedades posso obter.


Não está funcionando para mim...

  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));       // это значение тоже есть
   }

E como obter uma matriz que eu não consigo encontrar. É sequer possível??

 
Alexey Viktorov:

Exatamente. Afinal de contas, a questão não era de uma foto, mas de um recurso. E depois perdi o que estava procurando por mim mesmo. Vou experimentar e ver que propriedades posso obter.


Não está funcionando para mim...

E não consigo encontrar como obter uma matriz. É sequer possível??

Acho que ResourceReadImage() ou algo assim deve ajudar

 
Alexey Viktorov:

O código é meu, é claro, por isso está aberto. Só pensei que se há uma data na tela, por que outra razão guardá-la em algum lugar quando você pode ... Desde que você possa obtê-lo. Ha-ha-ha, muito bom.

Bem parecido com como você pode tirar um fio de uma caixa de texto e puxar parte do fio para fora dela. Mas, infelizmente, nada disso.

Você é realmente algo :))
Uma mala de baterias para um relógio científico não é realmente a melhor solução, embora criativa.
 
Andrey Barinov:
Acho que ResourceReadImage() ou algo assim deve ajudar

Encontrei-o, mas nada funcionou para mim. Eu tentei converter um array em um cordel, mas os tipos de array não correspondem. Não importa como eu o torço, não funciona. Talvez eu esteja fazendo algo errado, mas nenhuma idéia nova ainda.

 
Alexey Viktorov:

Encontrei-o, mas nada funcionou para mim. Eu tentei converter um array em um cordel, mas os tipos de array não correspondem. Não importa como eu o virei, simplesmente não vai funcionar. Talvez eu esteja fazendo algo errado, mas nenhuma idéia nova ainda.

Como faço para traduzir os dados de cor dos pixels em um fio? E o mais importante, por quê?
Você obtém uma imagem bitmap e depois pode tentar reconhecê-la, mas essa é uma ciência à parte :)
 
Nikolai Semko:
Você é realmente algo :)))
Uma mala cheia de baterias para um relógio científico não é realmente a melhor solução, embora seja criativa.

Nikolai, mas não é uma solução que seja necessariamente aplicável. Afinal, seus desenhos animados são da mesma série, bonitos, mas sem a possibilidade de aplicação em comércio.

 
Andrey Barinov:
Como você traduz os dados de cor dos pixels em uma corda? E o mais importante, por quê?
Você obtém uma imagem bitmap e depois pode tentar reconhecê-la, mas essa é uma ciência à parte :)

Ah, bem, isso é... Não sei)).

Em geral, eu provavelmente desisto da idéia. Talvez não seja realmente esse tipo de coisa.

 

Fórum sobre comércio, sistemas automatizados de comércio e teste de estratégias comerciais

Características da linguagem mql5, sutilezas e truques

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);
}


Aplicação

// Сохраняет в 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 O conversor de arquivo BMP->GIF/PNG também está implementado.

 
Alexey Viktorov:

Nova pergunta: Posso ler o texto de um recurso em uma tela?

Por exemplo, estas linhas, ou qualquer uma delas.

Objetivo: Com o kanvas, há uma linha que contém uma data. Esta é a data que você quer ler.

Ou usar um dos antigos métodos testados e aprovados, GV, arquivo, gráfico ou algo mais.

Você pode ler os dados de um recurso usando ResourceReadImage, mas para fazer isso, você precisa escrevê-los lá usando ResourceCreate. A função ResourceCreate só aceita um array de dados uint e se quisermos escrever um array de outro tipo de dados, temos que usar o union. Declare várias matrizes de diferentes tipos nele. Depois disso, podemos armazenar quaisquer dados no recurso, inclusive cordas. Para converter a corda em tipo char use StringToCharArray e vice versa use CharArrayToString. Portanto, não se trata de Kanvas, mas do recurso no qual você pode escrever qualquer tipo de dado com a ajuda dos sindicatos.
Razão: