Управление цветом графических построений. - страница 2

 

Аха. А строку "одна тысяча девятьсот семнадцать" приводить к числу 1917 :-)))

 
Ладно. Не знаю алгоритма. Как компилятор слово, допустим, Red принимает за красный цвет. Не буду больше Вас мучать. Воспользуюсь функцией, написанной Integer. За что ему особая благодарность. Но все-таки интересно, каким образом компилятор в переменной типа color соотносит слова, задающие цвет, с определенным цветом. Где-то имеется таблица соответствия слов и цветов. Но нас к этой таблице подпускать боятся... эх...
 
stringo:

Аха. А строку "одна тысяча девятьсот семнадцать" приводить к числу 1917 :-)))

А что, в 1С реализована обратная функция (число в строку). Когда выписываешь счет, там появляется и запись суммы словами. Сам в свое время аналогичный макрос для XL писал... Нет никаких непреодолимых проблем и в кодировании прямой функции (строка в число), так как количество вариантов до определенного числа ограниченно :)
 
nen:
Где-то имеется таблица соответствия слов и цветов. Но нас к этой таблице подпускать боятся... эх...


https://docs.mql4.com/ru/constants/colors

И в МЕ есть.

 
SK. писал (а):
nen:
Где-то имеется таблица соответствия слов и цветов. Но нас к этой таблице подпускать боятся... эх...


https://docs.mql4.com/ru/constants/colors

И в МЕ есть.


Не в этом смысле. Есть таблица соответствия, которой пользуется компилятор.

Не подпускают к таблице, которой пользуется компилятор. Таблицу кодов цветов я знаю. И что с того? Почему приходится так выворачиваться? Прописывать в строковой переменной цвета? Да потому, что в метатрейдере очень много ограничений. Приходится очень хитроумно делать то, что в другие терминалах делается одним щелчком мыши. И щелкает мышью там не программист, а трейдер. Почему есть трейдеры, которые как чуму обходят метатрейдер стороной? Лучше будут покупать Ensign и пользоваться этой программой, чем связываться с метатрейдером. Мы, те кто пытается решить свои проблемы на этом форуме, своими разработками "заставляем" отказываться от покупки того же Ensign. Из-за наших разработок люди вынуждены переходить на метатрейдер. В других терминалах пока нет некоторых наших разработок. ПОКА. Но это ПОКА не вечно.

Почему нельзя сделать, чтобы компилятор делал преобразование строка->цвет?

Понимаю, что это довольно специфическое преобразование.

 

nen, какие проблемы? попробуйте распечатать цвет Print(Red); и Вы получите число, которым пользуется компилятор. Откройте любой справочник по html и найдите таблицу цветов - компилятор обрабатывает те же интернет-цвета.

Если Вы хотите число в формате RGB, то тоже никаких проблем

//+------------------------------------------------------------------+
//|                                                       GetRGB.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        https://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "https://www.metaquotes.net/"
 
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
   color  sample_color=LightGoldenrod;
   string hex_string=IntegerToHexString(sample_color);
//----
   int red_value=sample_color&0x000000FF;
   int green_value=(sample_color>>8)&0x000000FF;
   int blue_value=(sample_color>>16)&0x000000FF;
   Print("R=",red_value,"  G=",green_value,"  B=",blue_value,
         "  RGB(0x",StringSubstr(hex_string,6,2),",0x",StringSubstr(hex_string,4,2),",0x",StringSubstr(hex_string,2,2),")");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| convert integer to string contained input's hexadecimal notation |
//+------------------------------------------------------------------+
string IntegerToHexString(int integer_number)
  {
   string hex_string="00000000";
   int    value, shift=28;
//----
   for(int i=0; i<8; i++)
     {
      value=(integer_number>>shift)&0x0F;
      if(value<10) hex_string=StringSetChar(hex_string, i, value+'0');
      else         hex_string=StringSetChar(hex_string, i, (value-10)+'A');
      shift-=4;
     }
//----
   return(hex_string);
  }
//+------------------------------------------------------------------+
 

Когда-то довно, уже не помню, для чего делал...

Посмотрите скрипт, может пригодится..

color  ColU=0x32FFFF;// желтый 
int    BGRchangeU[3][3]={ -6,  50,   0,
                         -13, 255, 130,
                         -36, 255,   0 };
color  ColD=0xFA8287;// синий 
int    BGRchangeD[3][3]={-25, 250,   0,
                         -13, 130,   0,
                          12, 255, 130 };
int start()
{//######################################################################################
 string sName="sObj";
 if(ObjectFind(sName)<0) {ObjectCreate(sName,OBJ_LABEL,0,0,0);
                          ObjectSet(sName,OBJPROP_CORNER,0);
                          ObjectSet(sName,OBJPROP_XDISTANCE,1);
                          ObjectSet(sName,OBJPROP_YDISTANCE,10);
                          //ObjectSet(sName,OBJPROP_BACK,1);
                         }
 for(int cnt=0; cnt<=10; cnt++)
     {ObjectSetText(sName,"желтый зеленеет "+cnt,12,"Arial Black",ColorModif(ColU,BGRchangeU,cnt));
      WindowRedraw(); Sleep(500);
     }
 for(    cnt=10; cnt>=0; cnt--)
     {ObjectSetText(sName,"зеленый желтеет "+cnt,12,"Arial Black",ColorModif(ColU,BGRchangeU,cnt));
      WindowRedraw(); Sleep(500);
     }
 for(    cnt=0; cnt<=10; cnt++)
     {ObjectSetText(sName,"синий краснеет "+cnt,12,"Arial Black",ColorModif(ColD,BGRchangeD,cnt));
      WindowRedraw(); Sleep(500);
     }
 for(    cnt=10; cnt>=0; cnt--)
     {ObjectSetText(sName,"красный синеет "+cnt,12,"Arial Black",ColorModif(ColD,BGRchangeD,cnt));
      WindowRedraw(); Sleep(500);
     }
 ObjectDelete(sName);
 return(0);
}//######################################################################################
//+------------------------------------------------------------------+
//| пошаговое изменение цвета                                        |
//|   color col - начальный цвет(без изменений)                      |
//|   int& ColPlus[][] - ссылка на масс.смены цветов                 |
//|           {изм.на шаг, начало, конец,    -для синего             |
//|            изм.на шаг, начало, конец,    -для зеленого           |
//|            изм.на шаг, начало, конец}    -для красного           |
//|   int nn - кол-во шагов(глубина изменения цвета)                 |
//+------------------------------------------------------------------+
int ColorModif(color col,int& ColPlus[][],int nn)
{  
   int RR=col&0x000000FF;
   int GG=(col>>8)&0x000000FF;
   int BB=(col>>16)&0x000000FF;
   
   BB+=ColPlus[0][0]*nn; GG+=ColPlus[1][0]*nn; RR+=ColPlus[2][0]*nn;
   
   if(BB>ColPlus[0][1])BB=ColPlus[0][1]; if(BB<ColPlus[0][2])BB=ColPlus[0][2]; 
   if(GG>ColPlus[1][1])RR=ColPlus[1][1]; if(GG<ColPlus[1][2])GG=ColPlus[1][2]; 
   if(RR>ColPlus[2][1])RR=ColPlus[2][1]; if(RR<ColPlus[2][2])RR=ColPlus[2][2]; 
   
   return((BB<<16)^(GG<<8)^(RR));
}
 
Всем спасибо за отзывы. Как сделаю, что хотел,  выложу здесь. Файл здесь нельзя. Дам ссылку.
 

Показать все паттерны Gartley на истории: