Fazendo um projeto de crowdsourced em Tela - página 16

 
Реter Konow:

Você está exagerando um pouco da seguinte maneira:

...

Entenda, reescrever é reescrever valores em uma matriz, e se você tiver que reescrever 1000000 valores (o número aproximado de pixels na imagem da janela e no bitmap), não serão "milésimos de segundo", mas segundos.

Não estou exagerando e vou entender por quê. Vejam meus exemplos, nesta linha, o FPS em movimento está em torno de 30-40 fps. Molduras, Carl!

E cada moldura difere da outra não por 100 pixels, mas por 70-80% da área de trabalho. Não estou dizendo que, com o tamanho da resolução da tela, este FPS não diminui. E é verdade. Em uma tela 1980x1050 ao mover grandes áreas para 12-17.

E sim. Estou usando o cache em todos os lugares e algumas otimizações para encontrar áreas com cache desatualizado (procurando por áreas sujas). Mas é uma prática comum, não pense que você vai abrir os olhos de ninguém.

 
Igor Volodin:

Não estou exagerando e vou ver por quê. Vejam meus exemplos, nesta linha, o FPS em movimento está em torno de 30-40 fps. Molduras, Carl!

E cada moldura difere da outra não por 100 pixels, mas por 70-80% da área de trabalho. Não estou dizendo que, com o tamanho da resolução da tela, este FPS não diminui. E é verdade. Em uma tela 1980x1050 ao mover grandes áreas para 12-17.

E sim. Estou usando o cache em todos os lugares e algumas otimizações para encontrar áreas com cache desatualizado (encontrar áreas sujas). Mas é uma prática comum, não pense que você vai abrir os olhos de ninguém.

Você armazena a máscara digital na memória após enviar a matriz com a imagem para ResoourceCreate()?

Se assim for, é claro por que você não tem atrasos. Eu ainda não a implementei. Ou seja, na minha implementação a máscara de imagem não é salva. Portanto, para mudar qualquer parte de uma janela, eu tenho que recriar toda a janela em uma matriz. Isto causa um gargalo.

O próximo passo é construir um sistema para economizar máscaras digitais e trabalhar eficientemente com áreas específicas. Depois disso, a resposta dos elementos aos eventos da interface não será retardada.

 
Реter Konow:

1. Quanto mais tempo leva (aproximadamente 250 milissegundos a 2 segundos).

Uau, que números.


Não deve haver nenhum atraso na tela inteira.

O que você está desenhando lá?

---

se você estiver usando CCanvas - verifique o destruidor - você provavelmente não está fazendo ResourceFree.

Esta é a principal causa da frenagem dos recursos. Criação constante sem soltar.

 
Реter Konow:

Você armazena a máscara numérica na memória depois de enviar a matriz de imagens para ResoourceCreate()?

Você mesmo inventou o termo "máscara digital"? Yandex me dá capacetes de realidade virtual ). Sim, caching em arrays. Pessoalmente, fiz um grande esforço para otimizar a opção do canal alfa, pois queria tirar o máximo proveito disso. Muito é consumido pela mistura "manual" de pixels para fazer elementos transparentes. Sem o cálculo do canal alfa, a interface voa até mesmo várias vezes mais rápido.

 
Igor Volodin:

Você mesmo inventou o termo "máscara digital"? Yandex me dá capacetes de realidade virtual ). Sim, caching em arrays. Pessoalmente, fiz um grande esforço para otimizar a opção do canal alfa, pois queria tirar o máximo proveito disso. Ele come muito sobre a mistura "manual" de pixels para fazer elementos transparentes. Sem o cálculo do canal alfa, a interface voa até mesmo várias vezes mais rápido.

Sim, eu mesmo criei o termo, mas posso mudá-lo para algo mais conveniente se você o sugerir. )

O que eu quero dizer é que a imagem é convertida em números que representam as cores (já depois que o canal alfa foi calculado), que são armazenados em uma matriz. Esta matriz é enviada para ResourceCreate(), e a imagem é criada.

Eu não tentei otimizar o canal alfa, mas é uma idéia interessante... Tenho todos os objetos desenhados após o cálculo do canal alfa para que haja uma idéia que torne possível mudar a transparência das janelas de interface. No futuro, acho que isto poderia ser implementado. A única coisa que atrapalha são os campos de entrada, que são criados por objetos "normais" e, portanto, não mudam a transparência... Mas isto também pode ser resolvido.

Vejo a solução para a barraca em eventos de interface, antes de tudo, no armazenamento de imagens em matrizes e na orientação das mesmas em suas áreas.

 
o_O:

Uau, que números.


Não deve haver nenhum freio em tela cheia.

O que você está desenhando lá?

---

se você estiver usando CCanvas - verifique o destruidor - você provavelmente não está fazendo ResourceFree.

Esta é a principal razão para a desaceleração dos recursos. Criação constante sem liberação.

Vou definitivamente tentar ResourceFree(), mas não acho que este seja o problema. (Eu desenho janelas de ajuste com controles. Eu não uso Kanvas infelizmente - abordagem diferente).

O problema é que, se eu criar uma pequena janela de ajustes, com poucas caixas de seleção, elas reagem visualmente instantaneamente, porém se eu criar uma janela maior (~700x500 pixels ou mais), então a velocidade geral de reação aos eventos da interface cai muitas vezes.

Analisando o problema, cheguei à conclusão que se trata de reinicializar a matriz e recalcular as cores de todos os pixels em cada evento de interface. Afinal de contas, a função calcula cerca de 700*500 valores e inicializa a matriz. A inicialização da matriz em si também leva tempo. Mas se você salvar a imagem e mudar apenas os valores de cor dos pixels que pertencem a um determinado elemento, o tempo de reação dependerá da área deste elemento...

Este me parece ser o problema.

 
Реter Konow:

Analisando o problema, cheguei à conclusão que se trata de reinicializar a matriz e recalcular as cores de todos os pixels em cada evento de interface. Afinal de contas, a função calcula cerca de 700*500 valores e inicializa a matriz.

mostrar o código.
 
o_O :
mostre o código.
Este bloco de código é um conjunto de funções diretamente responsáveis por criar um "instantâneo" digital da janela e seus elementos.

A função "Draw_element()" cria todos os detalhes da imagem da janela. Primeiro, ele cria um array de imagens (que é como uma tela de desenho comum) e desenha todos os componentes nele (digitalmente).

Para desenhar cada tipo de componente, uma função especial é chamada, projetada para desenhar este tipo específico: "Draw_element_detail()", "Set_text_on_element()", "Create_gradient", "Set_label_on_element()":

Envio o código em várias partes, pois o editor não aceita o todo.

//--------------------------------------------------
void Нарисовать_элемент( int Окно, int Канвас, int смещение_по_x = 0 , int смещение_по_y = 0 )
{ //Alert(__FUNCTION__);
int Номер_рисуемого_полотна = G_CORE[Окно][Канвас][_DROWING_CANVAS],
     Имя_полотна    = G_CORE[Окно][Канвас][_NAME],
     //-----------------------------------------------------------------
     //Тип канваса может быть _STRIP или _LABEL.
     //-----------------------------------------------------------------
     Тип_канваса = G_CORE[Окно][Канвас][_BITMAP_TYPE],
     //-----------------------------------------------------------------
     //Канвас может представлять из себя готовую картинку.
     //В этом случае, индекс этой картинки будет прописан в свойствах канваса.
     //(например картинка ползунка слайдера - самостоятельный канвас).
     //-----------------------------------------------------------------
     Индекс_лейбла_канваса = G_CORE[Окно][Канвас][_OBJECTS_BITMAP_INDEX],
     //-----------------------------------------------------------------
     //Текущее состояние канваса. Берем из свойства _CURRENT_STATE.
     //-----------------------------------------------------------------
     Текущее_состояние_канваса = G_CORE[Окно][Канвас][_CURRENT_SCENE],
     //-----------------------------------------------------------------
    
     //-----------
     Состояние_детали,
     Индекс_лейбла,
     //------------------------------
     Высота_полотна      =   G_CORE[Окно][Канвас][_Y_SIZE],
     Ширина_полотна      =   G_CORE[Окно][Канвас][_X_SIZE],
     //------------------------------
     Массив_пикселей_полотна[],
     //------------------------------
     Размер_массива_пикселей_полотна = Высота_полотна * Ширина_полотна;  
     //----------------------------------------------------------    
//Alert("Имя_элемента  ",Имя_элемента,"  Окно  ",Окно,"  Объект  ",Объект);
   //------------------------------------------------------------
   int w;
//-------------------------------------------------------------
//Устанавливаем размеры массива основания элемента управления.
//Все детали этого элемента будут рисоваться на этом основании.
//Для прорисовки деталей элемента управления, будут вызываться
//функции (установать лейбл, установить текст и т.д...), и в каждую
//из них будет посылаться один и тот же массив пикселей элемента,
//размер которого мы сейчас устанавливаем. Детали будут рисоваться
//в том же массиве, уже поверх прежде нарисованных. На конечном этапе,
//будет вызываться функция "создать ресурс", и картинка элемента
//управления будет создана.
//-------------------------------------------------------------
ArrayResize (Массив_пикселей_полотна,Размер_массива_пикселей_полотна);
//-------------------------------------------------------------
//Создание основания самого элемента.  
//----------------------------------------------------------------------  
Установить_цвет_и_прозрачность_пикселей_изображения(Окно,Канвас,Текущее_состояние_канваса);
//---------------------------------------
switch (Тип_канваса)
   {
     case _STRIP: Нарисовать_деталь_элемента(Окно,Канвас,Канвас,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна); break ;
     //-------------------------------------------------------------------------------------------------------------  
     case _LABEL:   if (Индекс_лейбла_канваса)
                    {
                     Установить_свойства_лейбла(Окно,Канвас,Индекс_лейбла_канваса,Текущее_состояние_канваса);
                     Установить_лейбл_на_Элемент(Окно,Канвас,Канвас,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Индекс_лейбла_канваса);
                    }
                                                                                                                                                                 break ;
     //-------------------------------------------------------------------------------------------------------------  
    
   }

//-------------------------------------------------------------
//Alert("Размер_массива_пикселей_элемента   ",Размер_массива_пикселей_элемента);
//-------------------------------------
//Установить_цвет_и_прозрачность_пикселей_изображения(Состояние_детали);
//--------------------------------------------------------------------------
//Делаем цикл по всем деталям элемента, и даже тем, которые находятся в списке
//объектов выше самого элемента. Поэтому цикл начинаем с начала списка объектов
//окна и идем в цикле до конца списка. Создаем все детали элемента, без относительно
//того, находятся ли они в последовательности или нет. При этом, обходим вторичное создание
//основания элемента с помощью условия.
//--------------------------------------------------------------------------
for ( int Деталь_полотна = 1 ; Деталь_полотна < 500 ; Деталь_полотна++)
   {
     if (!G_CORE[Окно][Деталь_полотна][_NAME]){ break ;}  
     //---------------------------------------
     int     Номер_полотна_которому_принадлежит_деталь   = G_CORE[Окно][Деталь_полотна][_DROWING_CANVAS];
     int     Тип_объекта_детали = G_CORE[Окно][Деталь_полотна][_OBJ_TYPE];
   // Alert("Деталь_полотна   ",Деталь_полотна,"   Номер_элемента_которому_принадлежит_деталь  ",Номер_элемента_которому_принадлежит_деталь);
     //---------------------------------------
     if (Номер_полотна_которому_принадлежит_деталь == Канвас && Деталь_полотна != Канвас && Тип_объекта_детали == Obj_Pixel)
     { //Alert("Окно  ",Окно,"  Канвас  ",Канвас,"  Деталь_полотна  ",Деталь_полотна," _GROUP_MAIN_OBJECT ",G_CORE[Окно][Деталь_полотна][_GROUP_MAIN_OBJECT],"  Номер_рисуемого_элемента  ",Номер_рисуемого_элемента);
       //---------------------------------------
       int     Тип_детали                       =   G_CORE[Окно][Деталь_полотна][_BITMAP_TYPE];
       int     Деталь_спрятана                  =   G_CORE[Окно][Деталь_полотна][_OBJECT_HIDE];
       int     Реализация_сценария              =   G_CORE[Окно][Деталь_полотна][_OBJECT_ACTIVATED];
       int     Гланый_элемент_детали            =   G_CORE[Окно][Деталь_полотна][_GROUP_MAIN_OBJECT];        
       int     Состояние_элемента               =   G_CORE[Окно][Гланый_элемент_детали][_CURRENT_STATE];    
       //---------------------------------------
       int     Высота_элемента                  =   G_CORE[Окно][Гланый_элемент_детали][_Y_SIZE];  
       int     Ширина_элемента                  =   G_CORE[Окно][Гланый_элемент_детали][_X_SIZE];    
       //---------------------------------------
       if (!Реализация_сценария)
         {
           //----------------------------------------------------------------------
           //Определение текущего состояния объекта.
           //----------------------------------------------------------------------              
           if (!Состояние_элемента || (Состояние_элемента == _NEUTRAL_STATE || Состояние_элемента == _NEUTRAL_HIGHLIGHTED || Состояние_элемента == _NEUTRAL_BLOCKED))
            {
             if (!Состояние_элемента || Состояние_элемента == _NEUTRAL_STATE) Состояние_детали =  G_CORE[Окно][Деталь_полотна][_NEUTRAL_STATE];
             if (Состояние_элемента)Состояние_детали =  G_CORE[Окно][Деталь_полотна][Состояние_элемента];
             //-------------------------------
             Индекс_лейбла    =  G_CORE[Окно][Деталь_полотна][_OBJECTS_BITMAP_INDEX];
             w = 1 ;
            }
           //----------------------------------------------------------------------  
           if (!w && (Состояние_элемента == _ACTIVATED_STATE || Состояние_элемента == _ACTIVATED_HIGHLIGHTED || Состояние_элемента == _ACTIVATED_BLOCKED))
            {
             Состояние_детали =  G_CORE[Окно][Деталь_полотна][Состояние_элемента];
             Индекс_лейбла    =  G_CORE[Окно][Деталь_полотна][_ACTIVATED_LABEL];
            }
           //----------------------------------------------------------------------
          G_CORE[Окно][Деталь_полотна][_CURRENT_SCENE] = Состояние_детали;
          w = 0 ;
         }
       //---------------------------------------    
       if (Реализация_сценария)Состояние_детали = G_CORE[Окно][Деталь_полотна][_CURRENT_SCENE];
       //---------------------------------------    
       Установить_цвет_и_прозрачность_пикселей_изображения(Окно,Деталь_полотна,Состояние_детали);
       //---------------------------------------
       if (!Деталь_спрятана)
         {
           switch (Тип_детали)  
            {
             case _STRIP:   Нарисовать_деталь_элемента(Окно,Канвас,Деталь_полотна,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна);                       break ;
             //-------------------------------------------------------------------------------------------------------------  
             case _LABEL:   if (Индекс_лейбла)
                             {
                              Установить_свойства_лейбла(Окно,Деталь_полотна,Индекс_лейбла,Состояние_детали);
                              Установить_лейбл_на_Элемент(Окно,Канвас,Деталь_полотна,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Индекс_лейбла);
                             }
                                                                                                                                                                 break ;
             //-------------------------------------------------------------------------------------------------------------  
             case _TEXT_:   Установить_текст_на_Элемент(Окно,Канвас,Деталь_полотна, Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Состояние_детали);     break ;    
             //-------------------------------------------------------------------------------------------------------------
             case _BASE : if (G_CORE[Окно][Деталь_полотна][_GRADIENT])Нарисовать_деталь_элемента(Окно,Канвас,Деталь_полотна,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, 1 ); break ;              
            }      
         }
      }  
   }
//--------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------    
//-------------------------------------------------------------------------------------------------------------    
//Cоздаем ресурс.
//-------------------------------------------------------------------------------------------------------------    
  Создать_ресурс(Имя_полотна,Массив_пикселей_полотна,Ширина_полотна,Высота_полотна);
//-------------------------------------------------------------------------------------------------------------  
//Устанавливаем координаты элемента.
//-------------------------------------------------------------------------------------------------------------  
     if (смещение_по_x != 0 ) ObjectSetInteger ( 0 ,Имя_полотна, OBJPROP_XDISTANCE ,G_CORE[Окно][Канвас][_X] + смещение_по_x);
     if (смещение_по_y != 0 ) ObjectSetInteger ( 0 ,Имя_полотна, OBJPROP_YDISTANCE ,G_CORE[Окно][Канвас][_Y] + смещение_по_y);  
     if (смещение_по_x == 0 ) ObjectSetInteger ( 0 ,Имя_полотна, OBJPROP_XDISTANCE ,G_CORE[Окно][Канвас][_X]);
     if (смещение_по_y == 0 ) ObjectSetInteger ( 0 ,Имя_полотна, OBJPROP_YDISTANCE ,G_CORE[Окно][Канвас][_Y]);  
//-------------------------------------------------------------------------------------------------------------  

}
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------
void Нарисовать_деталь_элемента(
                                 int Окно,
                                 int Канвас,
                                 int Деталь_полотна,
                                 int &Массив_пикселей_полотна[],
                                 int Высота_полотна,
                                 int Ширина_полотна,
                                 int Нарисовать_только_градиент = 0
                               )
{
//--------------------------------------------------------------------------
int Высота_детали                 = G_CORE[Окно][Деталь_полотна][_Y_SIZE];
int Длинна_детали                 = G_CORE[Окно][Деталь_полотна][_X_SIZE];
int Отступ_X                      = G_CORE[Окно][Деталь_полотна][_X] - G_CORE[Окно][Канвас][_X];
int Отступ_Y                      = G_CORE[Окно][Деталь_полотна][_Y] - G_CORE[Окно][Канвас][_Y];
int Индекс_пикселя                = G_CORE[Окно][Деталь_полотна][_PIXEL_INDEX];
//--------------------------------------------------------------------------
int Градиент_рамки_детали         = G_CORE[Окно][Деталь_полотна][_GRADIENT];
//--------------------------------------------------------------------------
//Alert("Нарисовать_деталь_элемента - Основание:  Канвас   ",Канвас,"  Деталь_полотна  ",Деталь_полотна,"  [Деталь_полотна][_X]  ",G_CORE[Окно][Деталь_полотна][_X]);
int Номер_пикселя_элемента;
//--------------------------------------------------------------------------
//Цикл по площади основания всего элемента.
//--------------------------------------------------------------------------
if (!Нарисовать_только_градиент)
{
   for ( int Ряд = 0 ; Ряд < Высота_полотна; Ряд++)
   {
     for ( int Пиксель = 0 ; Пиксель < Ширина_полотна; Пиксель++)
      {
       if (
              Ряд >= Отступ_Y
           && Ряд < (Отступ_Y + Высота_детали)
           && Пиксель >= Отступ_X
           && Пиксель <(Отступ_X + Длинна_детали)
          )
          {
           Массив_пикселей_полотна[Номер_пикселя_элемента] = ColorToARGB (Данные_пикселя[Индекс_пикселя][Цвет],Данные_пикселя[Индекс_пикселя][Непрозрачность]);
          }
        Номер_пикселя_элемента++;  
       }
    }
  }  
   //-----------------------------  
  Номер_пикселя_элемента = 0 ;
   //-----------------------------  
   if (Градиент_рамки_детали)
    {
     int V_раскладка = 0 ;
     int H_раскладка = 1 ;
     int Тип_градиента_рамки     = STANDART_GROUPS[Градиент_рамки_детали + 1 ];
     int Ширина_градиента_рамки  = STANDART_GROUPS[Градиент_рамки_детали + 2 ];
     int Начало_первой_рамки     =   0 ;
     //----------------------
     int Начало_второй_рамки     =  Ширина_градиента_рамки * 2 ;
     int Начало_третьей_рамки    =  Ширина_градиента_рамки * 4 ;
     int Начало_четвертой_рамки  =  Ширина_градиента_рамки * 6 ;
     int Нижний_блик = Начало_четвертой_рамки + Ширина_градиента_рамки * 2 ;
     int Верхний_блик = Нижний_блик + 2 ;
     //----------------------    
     switch (Тип_градиента_рамки)
       {
         case _4_SIDES_GRADIENT:
         //-----------------------
         //Прототип функции  
         //Создать_градиент(Раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Ширина_градиента,Длинна_градиента,Отступ_X,Отступ_Y,Начало_градиента, Отступ_линии_от_края);
         //-----------------------
        Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Ширина_градиента_рамки,Длинна_детали,Отступ_X,Отступ_Y , Начало_первой_рамки, 1 );
         //-----------------------
        Создать_градиент(V_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, Высота_детали,Ширина_градиента_рамки,Отступ_X,Отступ_Y,Начало_второй_рамки, 1 );
         //Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,4,Длинна_детали - 6,Отступ_X + 4,Отступ_Y + 15, Начало_второй_рамки, -1);
         //-----------------------
        Создать_градиент(V_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, Высота_детали,Ширина_градиента_рамки,Отступ_X  + Длинна_детали - Ширина_градиента_рамки,Отступ_Y,Начало_третьей_рамки,- 1 );
         //-----------------------
        Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Ширина_градиента_рамки,Длинна_детали - Ширина_градиента_рамки,Отступ_X + Ширина_градиента_рамки,(Отступ_Y + Высота_детали - Ширина_градиента_рамки),Начало_четвертой_рамки,- 1 );
         //-----------------------
         break ;
         //------------------------------------------------------------------------------------------------------------------------------------------------------------------
         //------------------------------------------------------------------------------------------------------------------------------------------------------------------
         //------------------------------------------------------------------------------------------------------------------------------------------------------------------
         case _4_SIDES_GRADIENT_WITH_DOWN_RIGHT_BLICK:
         //-----------------------
        Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Ширина_градиента_рамки,Длинна_детали,Отступ_X,Отступ_Y , Начало_первой_рамки, 1 );
         //-----------------------
        Создать_градиент(V_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, Высота_детали,Ширина_градиента_рамки,Отступ_X,Отступ_Y,Начало_второй_рамки, 1 );
         //Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,4,Длинна_детали - 6,Отступ_X + 4,Отступ_Y + 15, Начало_второй_рамки, -1);
         //-----------------------
        Создать_градиент(V_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, Высота_детали,Ширина_градиента_рамки,Отступ_X  + Длинна_детали - Ширина_градиента_рамки,Отступ_Y,Начало_третьей_рамки,- 1 );
         //-----------------------
        Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Ширина_градиента_рамки,Длинна_детали - Ширина_градиента_рамки,Отступ_X + Ширина_градиента_рамки,(Отступ_Y + Высота_детали - Ширина_градиента_рамки),Начало_четвертой_рамки,- 1 );
         //-----------------------
         //-----------------------
         //-----------------------
        Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, 1 ,Длинна_детали,Отступ_X,(Отступ_Y + Высота_детали),Нижний_блик, 0 );
         //-----------------------
        Создать_градиент(V_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, Высота_детали, 1 ,(Отступ_X  + Длинна_детали + 1 ),Отступ_Y,Нижний_блик, 0 );
         break ;
         //------------------------------------------------------------------------------------------------------------------------------------------------------------------
         //------------------------------------------------------------------------------------------------------------------------------------------------------------------
         //------------------------------------------------------------------------------------------------------------------------------------------------------------------        
         case _4_SIDES_GRADIENT_WITH_TOP_LEFT_BLICK:
         //-----------------------
        Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Ширина_градиента_рамки,Длинна_детали,Отступ_X,Отступ_Y , Начало_первой_рамки, 1 );
         //-----------------------
        Создать_градиент(V_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, Высота_детали,Ширина_градиента_рамки,Отступ_X,Отступ_Y,Начало_второй_рамки, 1 );
         //Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,4,Длинна_детали - 6,Отступ_X + 4,Отступ_Y + 15, Начало_второй_рамки, -1);
         //-----------------------
        Создать_градиент(V_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, Высота_детали,Ширина_градиента_рамки,Отступ_X  + Длинна_детали - Ширина_градиента_рамки,Отступ_Y,Начало_третьей_рамки,- 1 );
         //-----------------------
        Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Ширина_градиента_рамки,Длинна_детали - Ширина_градиента_рамки,Отступ_X + Ширина_градиента_рамки,(Отступ_Y + Высота_детали - Ширина_градиента_рамки),Начало_четвертой_рамки,- 1 );
         //-----------------------
         //-----------------------
         //-----------------------
        Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, 1 ,Длинна_детали + 2 ,Отступ_X,(Отступ_Y + Высота_детали),Нижний_блик, 0 );
         //-----------------------
        Создать_градиент(V_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, Высота_детали + 1 , 1 ,(Отступ_X  + Длинна_детали + 1 ),Отступ_Y - 1 ,Нижний_блик, 0 );
         //-----------------------
         //-----------------------
         //-----------------------
        Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Ширина_градиента_рамки,Длинна_детали + 4 ,Отступ_X - 2 ,Отступ_Y - 2 , Верхний_блик, 0 );
         //-----------------------
        Создать_градиент(V_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, Высота_детали + 3 ,Ширина_градиента_рамки,Отступ_X - 2 ,Отступ_Y - 2 ,Верхний_блик, 0 );
         break ;
         //------------------------------------------------------------------------------------------------------------------------------------------------------------------
      
       }
    }
   //-----------------------------          
}
//--------------------------------------------------
 
//--------------------------------------------------
void Создать_градиент(
                      int Раскладка,
                      int Градиент_рамки_детали,
                      int &Массив_пикселей_полотна[],
                      int Высота_полотна,
                      int Ширина_полотна,
                      int Высота_градиента,
                      int Длинна_градиента,
                      int Отступ_X,
                      int Отступ_Y,
                      int Начало_градиента = 0,
                      int Отступ_линии_от_края = 0
                     )
{
int Номер_пикселя_элемента;
int Первый_пиксель           = Градиент_рамки_детали + 3 + Начало_градиента;
int V_раскладка = 0;
int H_раскладка = 1;

//--------------------------------------------------
int Ширина_градиента_рамки        = STANDART_GROUPS[Градиент_рамки_детали + 2];
//--------------------------------------------------
int Пиксели[],
     Альфы[],   q,
     Горизонтальная_полоса,
     Отступ_линии,
     Внутри_территории_рамки,
     Внутри_ширины_детали,
     колонка;            
//--------------------------------------------------
//Устанавливаем размеры массивов.
//--------------------------------------------------
ArrayResize(Пиксели,Ширина_градиента_рамки);
ArrayResize(Альфы,  Ширина_градиента_рамки);

if(Раскладка == V_раскладка && !Отступ_линии_от_края)Отступ_линии = Ширина_градиента_рамки;

//------------------------------------------------------------------------------  
//Инициализируем массивы цветами пикселей и значениями их непрозрачности.
//------------------------------------------------------------------------------
for(int a1 = 0; a1 <= Ширина_градиента_рамки * 2; a1 += 2)
   {
    Пиксели[q]   = STANDART_GROUPS[Первый_пиксель + a1];
    Альфы  [q]   = STANDART_GROUPS[Первый_пиксель + a1 + 1];
    q++;
   }
//--------------------------------------------------------------------------
//Цикл по площади всего окна.
//--------------------------------------------------------------------------
for(int _Ряд = 0; _Ряд < Высота_полотна; _Ряд++)
   {
    for(int _Пиксель_ряда = 0; _Пиксель_ряда < Ширина_полотна; _Пиксель_ряда++)
      {
       //----------------------------------------------------------
       //Фиксируем моменты цикла по площади рамок элемента.
       //----------------------------------------------------------
       //1. Находимся на территории верхней рамки.
       //(Между верхом и низом и между левой и правой сторонами верхней рамки.)
       //----------------------------------------------------------
       if(  
            _Ряд >= Отступ_Y && _Ряд < (Отступ_Y + Высота_градиента)
          &&(
               (Раскладка == H_раскладка  && _Пиксель_ряда >= Отступ_X + Отступ_линии && _Пиксель_ряда < (Отступ_X + Длинна_градиента) - Отступ_линии)
             ||(Раскладка == V_раскладка  && Отступ_линии_от_края >= 0 && _Пиксель_ряда >= Отступ_X && _Пиксель_ряда <= Отступ_X + Длинна_градиента - 1 && _Пиксель_ряда <= (Отступ_X + Отступ_линии))
             ||(Раскладка == V_раскладка  && Отступ_линии_от_края <  0 && _Пиксель_ряда >= Отступ_X + Отступ_линии_от_края *-1 && _Пиксель_ряда <= Отступ_X + Ширина_градиента_рамки  && _Пиксель_ряда >= Отступ_X  + Ширина_градиента_рамки + Отступ_линии)
            )
         )
         {
          //-----------------------------------
          Внутри_территории_рамки = 1;
          //-----------------------------------
          if(Раскладка == H_раскладка)Массив_пикселей_полотна[Номер_пикселя_элемента] = ColorToARGB(Пиксели[Горизонтальная_полоса],Альфы[Горизонтальная_полоса]);
          if(Раскладка == V_раскладка)Массив_пикселей_полотна[Номер_пикселя_элемента] = ColorToARGB(Пиксели[колонка],Альфы[колонка]);
          //-----------------------------------
        //  if( _Ряд == Отступ_Y + 20 && Раскладка == V_раскладка  && Отступ_линии_от_края >= 0 && _Пиксель_ряда >= Отступ_X                    && _Пиксель_ряда <= (Отступ_X + Отступ_линии))Alert(12345);
          колонка++;    
         }
       //-------------------------  
       Номер_пикселя_элемента++;  
       //-------------------------
      }
    //------------------------------------------------  
    if(Внутри_территории_рамки)
      {
       Горизонтальная_полоса++;
       колонка = 0;
       //---------------------------------------------------------------------------------
       //Счетчик "Отступ_линии" может иметь максимальное значение равное ширине градиента,
       //так как прибавляется только при спуске по линиям этого градиента на событии переключения ряда.
       //---------------------------------------------------------------------------------
       if(Раскладка == H_раскладка)Отступ_линии += Отступ_линии_от_края;
       //---------------------------------------------------------------------------------
       //
       //---------------------------------------------------------------------------------
       if(Раскладка == V_раскладка && _Ряд < Отступ_Y + Ширина_градиента_рамки)Отступ_линии += Отступ_линии_от_края;
       //---------------------------------------------------------------------------------
       if(Раскладка == V_раскладка && _Ряд >= Отступ_Y + Высота_градиента - Ширина_градиента_рамки - 1)Отступ_линии -= Отступ_линии_от_края;
       //---------------------------------------------------------------------------------
       if(Раскладка == V_раскладка && Отступ_линии_от_края < 0 && Отступ_линии > 0)Отступ_линии *=-1;
      }
    //------------------------------------------------
          
    //------------------------------------------------
   }
     //---------------------
    // Alert("Градиент_рамки_детали  ",Градиент_рамки_детали,"   Ширина_градиента_рамки   ",Ширина_градиента_рамки );
     //---------------------
}
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------
void Установить_текст_на_Элемент(
                                 int       Окно,
                                 int       Канвас,
                                 int       Деталь_полотна,
                                 int      &Массив_пикселей[],
                                 int       Высота_массива,
                                 int       Длинна_массива,
                                 int       Состояние_детали
                                )
{
//--------------------
//int Головной_объект_группы = G_CORE[Окно][Деталь_полотна][_GROUP_MAIN_OBJECT];

string Текст  = CONTENT[G_CORE[Окно][Деталь_полотна][_TEXT]];
//--------------------
string    Шрифт           = FONT[STANDART_GROUPS[Состояние_детали + 5]];
int       Цвет_текста     = ColorToARGB(STANDART_GROUPS[Состояние_детали + 3],STANDART_GROUPS[Состояние_детали + 4]);
int       Размер_шрифта   = STANDART_GROUPS[Состояние_детали + 6];                                
int       Угол_наклона    = STANDART_GROUPS[Состояние_детали + 7];
int       Привязка_текста = STANDART_GROUPS[Состояние_детали + 8];
int       Стиль_шрифта    = STANDART_GROUPS[Состояние_детали + 9];
//--------------------
int       Формат_цвета = COLOR_FORMAT_ARGB_NORMALIZE;
//--------------------
int Отступ_X   = G_CORE[Окно][Деталь_полотна][_X] - G_CORE[Окно][Канвас][_X];
int Отступ_Y   = G_CORE[Окно][Деталь_полотна][_Y] - G_CORE[Окно][Канвас][_Y];
//--------------------------------------------------
//Alert("Нарисовать_деталь_элемента - Текст:  Канвас   ",Канвас,"  Деталь_полотна  ",Деталь_полотна,"  [Деталь_полотна][_X]  ",G_CORE[Окно][Деталь_полотна][_X],"  Канвас][_X]   ",G_CORE[Окно][Канвас][_X]);

TextSetFont(Шрифт,Размер_шрифта *-10,Стиль_шрифта,Угол_наклона);  
//--------------------------------------------------
if(!TextOut(Текст,Отступ_X,Отступ_Y,Привязка_текста,Массив_пикселей,Длинна_массива,Высота_массива,Цвет_текста,Формат_цвета))Alert(GetLastError());
//--------------------------------------------------
}
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------
void Установить_размеры_текста(int Окно, int Объект, int Главный_объект_в_элементе, int Состояние_детали)
{
int Массив_пикселей[];
int Самая_левая_точка = 1000000,
     Самая_правая_точка,
     Самая_верхняя_точка = 1000000,
     Самая_нижняя_точка,
     Номер_пикселя;
//--------------------
string Текст  = CONTENT[G_CORE[Окно][Объект][_TEXT]];
//--------------------
string    Шрифт           = FONT[STANDART_GROUPS[Состояние_детали + 5]];
int       Цвет_текста     = ColorToARGB(STANDART_GROUPS[Состояние_детали + 3],STANDART_GROUPS[Состояние_детали + 4]);
int       Размер_шрифта   = (int)(STANDART_GROUPS[Состояние_детали + 6]);                                
int       Угол_наклона    = STANDART_GROUPS[Состояние_детали + 7];
int       Привязка_текста = STANDART_GROUPS[Состояние_детали + 8];
int       Стиль_шрифта    = STANDART_GROUPS[Состояние_детали + 9];
int       Количество_букв_текста = StringLen(Текст);

//--------------------
int       Формат_цвета = COLOR_FORMAT_ARGB_NORMALIZE;
//--------------------
int Длинна_буквы  =   Размер_шрифта;
int Высота_буквы  =   Размер_шрифта;//Alert("Высота_буквы  ",Высота_буквы,"  Самая_нижняя_точка - Самая_верхняя_точка  ",Самая_нижняя_точка - Самая_верхняя_точка);
//--------------------
int Высота_массива = Высота_буквы * 2;
int Длинна_массива = Длинна_буквы * Количество_букв_текста * 2;
//--------------------
int Размер_массива = Высота_массива * Длинна_массива;
//--------------------
ArrayResize(Массив_пикселей,Размер_массива);//Alert("Размер_массива  ",Размер_массива);
//--------------------------------------------------
// Alert("Шрифт  ",Шрифт ,"  Высота_буквы  ",Высота_буквы,"  Размер_шрифта  ",Размер_шрифта,"  Угол_наклона  ",Угол_наклона);
TextSetFont(Шрифт,Размер_шрифта *-10,Стиль_шрифта,Угол_наклона);  
//--------------------------------------------------
if(!TextOut(Текст,0,0,Привязка_текста,Массив_пикселей,Длинна_массива,Высота_массива,Цвет_текста,Формат_цвета))Alert(GetLastError());
//--------------------------------------------------
for(int Ряд = 0; Ряд < Высота_массива; Ряд++)
   {
    for(int Колонка = 0; Колонка < Длинна_массива; Колонка++)
      {
       if(Массив_пикселей[Номер_пикселя] == Цвет_текста)
         {
          //----------------------------
          if(Самая_левая_точка >= Колонка) Самая_левая_точка = Колонка;
          //----------------------------
          if(Самая_правая_точка <= Колонка)Самая_правая_точка = Колонка;
          //----------------------------
         }
       //-------------------
       Номер_пикселя++;
      }  
   }
  //Alert("Самая_верхняя_точка  ",Самая_верхняя_точка,"  Самая_нижняя_точка  ",Самая_нижняя_точка,"  Самая_левая_точка  ",Самая_левая_точка,"  Самая_правая_точка  ",Самая_правая_точка);
//-----------------------------------------
int Длинна_текста = Самая_правая_точка - Самая_левая_точка;
//-----------------------------------------
//-----------------------------------------
G_CORE[Окно][Объект][_TEXT_X_SIZE] = Длинна_текста;
//-----------------------------------------
G_CORE[Окно][Главный_объект_в_элементе][_TEXT_X_SIZE] = Длинна_текста;
//-----------------------------------------
G_CORE[Окно][Объект][_X_SIZE] = Длинна_текста;
//--------------------------------------------------
Alert("Объект   ",Объект,"  Длинна_текста  ",Длинна_текста);
}
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------
void Установить_лейбл_на_Элемент(
                                 int       Окно,
                                 int       Канвас,
                                 int       Деталь_полотна,
                                 int      &Массив_пикселей_полотна[],
                                 int       Высота_элемента,
                                 int       Ширина_элемента,
                                 int       Индекс_лейбла,
                                // int       Цвет_фона,
                                // int       Непрозрачность_фона
                                )

{
//-----------------------
// Alert(__FUNCTION__);
int Цвет_пикселя,
     Непрозрачность_пикселя,
     Объект_привязки_лейбла                    =  G_CORE[Окно][Деталь_полотна][_LABEL_BACKGROUND_OBJECT],
     Состояние_объекта_привязки                =  G_CORE[Окно][Объект_привязки_лейбла][_CURRENT_SCENE],
     Номер_пикселя_объекта_привязки            =  G_CORE[Окно][Объект_привязки_лейбла][_PIXEL_INDEX],
     Поправка = Номер_пикселя_объекта_привязки * 2,
     //--------------------------------------------
     Цвет_фона           = STANDART_GROUPS[Состояние_объекта_привязки + 3 + Поправка],
     Непрозрачность_фона = STANDART_GROUPS[Состояние_объекта_привязки + 4 + Поправка];
     //--------------------------------------------
      // Alert("Цвет_фона   ",Цвет_фона,"   Непрозрачность_фона   ",Непрозрачность_фона,"   [_B2_PARAMETER]  ",G_CORE[Окно][Деталь_полотна][_B2_PARAMETER],"  Номер_пикселя_объекта_привязки  ",Номер_пикселя_объекта_привязки);  

//-------------------------    
// int Головной_объект_группы = G_CORE[Окно][Деталь_полотна][_GROUP_MAIN_OBJECT];
//--------------------
int Отступ_X   = G_CORE[Окно][Деталь_полотна][_X] - G_CORE[Окно][Канвас][_X];
int Отступ_Y   = G_CORE[Окно][Деталь_полотна][_Y] - G_CORE[Окно][Канвас][_Y];
//--------------------------------------------------

//-------------------------------------------------------------
int Номер_пикселя_элемента;
int Пиксель_лейбла = Номер_пикселя_лейбла;
//--------------------------------------------------------
for(int Ряд = 0; Ряд < Высота_элемента; Ряд++)
    {
     for(int Пиксель = 0; Пиксель < Ширина_элемента; Пиксель++)
       {
        //------------------------------
        if(Ряд >= Отступ_Y && Ряд < (Отступ_Y + Высота_лейбла))
          {
           if(Пиксель > (Отступ_X - 1) && Пиксель < (Отступ_X) + Ширина_лейбла)
             {
              if(Тип_лейбла == _RESOURCE_LABEL)
                {
                 //---------------------------
                 if(A_CORE_BASE[Пиксель_лейбла] == -1)
                   {
                    Массив_пикселей_полотна[Номер_пикселя_элемента] = ColorToARGB(Цвет_фона,Непрозрачность_фона);
                   // Alert("Цвет_фона  ",Цвет_фона,"  Непрозрачность_фона  ",Непрозрачность_фона);
                   }
                 //---------------------------
                 else Массив_пикселей_полотна[Номер_пикселя_элемента] = A_CORE_BASE[Пиксель_лейбла];
                 //---------------------------
                }
              if(Тип_лейбла == _MY_LABEL)
                {
                 if(A_CORE_BASE[Пиксель_лейбла] == 0){Цвет_пикселя = Данные_пикселя[Пиксель_0][Цвет];Непрозрачность_пикселя = Данные_пикселя[Пиксель_0][Непрозрачность];}
                 if(A_CORE_BASE[Пиксель_лейбла] == 1){Цвет_пикселя = Данные_пикселя[Пиксель_1][Цвет];Непрозрачность_пикселя = Данные_пикселя[Пиксель_1][Непрозрачность];}
                 if(A_CORE_BASE[Пиксель_лейбла] == 2){Цвет_пикселя = Данные_пикселя[Пиксель_2][Цвет];Непрозрачность_пикселя = Данные_пикселя[Пиксель_2][Непрозрачность];}
                 if(A_CORE_BASE[Пиксель_лейбла] == 3){Цвет_пикселя = Данные_пикселя[Пиксель_3][Цвет];Непрозрачность_пикселя = Данные_пикселя[Пиксель_3][Непрозрачность];}
                 if(A_CORE_BASE[Пиксель_лейбла] == 4){Цвет_пикселя = Данные_пикселя[Пиксель_4][Цвет];Непрозрачность_пикселя = Данные_пикселя[Пиксель_4][Непрозрачность];}
                 if(A_CORE_BASE[Пиксель_лейбла] == 5){Цвет_пикселя = Данные_пикселя[Пиксель_5][Цвет];Непрозрачность_пикселя = Данные_пикселя[Пиксель_5][Непрозрачность];}
                 if(A_CORE_BASE[Пиксель_лейбла] == 6){Цвет_пикселя = Данные_пикселя[Пиксель_6][Цвет];Непрозрачность_пикселя = Данные_пикселя[Пиксель_6][Непрозрачность];}
                 if(A_CORE_BASE[Пиксель_лейбла] == 7){Цвет_пикселя = Данные_пикселя[Пиксель_7][Цвет];Непрозрачность_пикселя = Данные_пикселя[Пиксель_7][Непрозрачность];}
                 //-----------------------------------------------
                 if(A_CORE_BASE[Пиксель_лейбла] == -1)
                   {
                    Массив_пикселей_полотна[Номер_пикселя_элемента] = ColorToARGB(Цвет_фона,Непрозрачность_фона);
                   }
                 //-----------------------------------------------
                 else Массив_пикселей_полотна[Номер_пикселя_элемента] = ColorToARGB(Цвет_пикселя,Непрозрачность_пикселя);
                }/**/
              //---------------------------                    
              Пиксель_лейбла++;
              //---------------------------
             }
          }  
         //------------------------------
         Номер_пикселя_элемента++;  
       }
     }      
}
//--------------------------------------------------
//--------------------------------------------------
void Установить_свойства_лейбла(int Окно, int Объект, int Индекс_лейбла, int Состояние_детали)
{
//-------------------------------------------------------------
//Цикл по A_CORE_BASE[] и нахождение нужного лейбла по индексу.
//-------------------------------------------------------------
for(int a1 = 0; a1 < 250000; a1++)
   {
    if(A_CORE_BASE[a1] == _DATA_SEPARATOR && A_CORE_BASE[a1 + 1] == Индекс_лейбла)
      {
       //---------------------------------------------------
       //Инициализируем основные параметры лейбла.
       //---------------------------------------------------
       Ширина_лейбла                  = A_CORE_BASE[a1 + 2];
       G_CORE[Окно][Объект][_X_SIZE]  = Ширина_лейбла;
       //--------------
       Высота_лейбла                  = A_CORE_BASE[a1 + 3];
       G_CORE[Окно][Объект][_Y_SIZE]  = Высота_лейбла;
       //--------------
       Тип_лейбла                     = A_CORE_BASE[a1 + 4];
       //---------------------------------------------------
       //Утанавливаем размер массива изображения.
       //---------------------------------------------------
       //----------------------------------
       Номер_пикселя_лейбла          = a1 + 5;
       //----------------------------------
       if(Тип_лейбла == _MY_LABEL)
         {
          Установить_цвет_и_прозрачность_пикселей_изображения(Окно,Объект,Состояние_детали);
         }
       //----------------------------------  
       break;
      }
   }  

}
//--------------------------------------------------
void Создать_ресурс(string Наименование_ресурса, int &Массив_пикселей[],int Ширина_массива, int Высота_массива, int Формат_цвета = COLOR_FORMAT_ARGB_NORMALIZE)
{

  //-------------------------------------
  Имя_ресурса = "::"+"bitmap"+ Наименование_ресурса;
  //-------------------------------------
  ObjectCreate(0,Наименование_ресурса,OBJ_BITMAP_LABEL,0,0,0);
  ObjectSetString(0,Наименование_ресурса,OBJPROP_BMPFILE,Имя_ресурса);
//-------------------------------------
if(!ResourceCreate(Имя_ресурса,Массив_пикселей,Ширина_массива,Высота_массива,0,0,0,Формат_цвета))Alert("!ResourceCreate 2  Наименование_ресурса   ",Наименование_ресурса,"  Ошибка  ",GetLastError());
//-------------------------------------                    
}
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------
void Установить_цвет_и_прозрачность_пикселей_изображения(int Окно, int Объект, int Состояние_детали)
{
//if(!G_CORE[Окно][Объект][_OBJECT_ACTIVATED])
// Alert(__FUNCTION__);
//----------------------------------------------------------
Данные_пикселя[Пиксель_0][Цвет]           = STANDART_GROUPS[Состояние_детали + 3];
Данные_пикселя[Пиксель_0][Непрозрачность] = STANDART_GROUPS[Состояние_детали + 4];
//----------------------------------------------------------
Данные_пикселя[Пиксель_1][Цвет]           = STANDART_GROUPS[Состояние_детали + 5];
Данные_пикселя[Пиксель_1][Непрозрачность] = STANDART_GROUPS[Состояние_детали + 6];
//----------------------------------------------------------
Данные_пикселя[Пиксель_2][Цвет]           = STANDART_GROUPS[Состояние_детали + 7];
Данные_пикселя[Пиксель_2][Непрозрачность] = STANDART_GROUPS[Состояние_детали + 8];
//----------------------------------------------------------
Данные_пикселя[Пиксель_3][Цвет]           = STANDART_GROUPS[Состояние_детали + 9];
Данные_пикселя[Пиксель_3][Непрозрачность] = STANDART_GROUPS[Состояние_детали + 10];
//----------------------------------------------------------
Данные_пикселя[Пиксель_4][Цвет]           = STANDART_GROUPS[Состояние_детали + 11];
Данные_пикселя[Пиксель_4][Непрозрачность] = STANDART_GROUPS[Состояние_детали + 12];
//----------------------------------------------------------
Данные_пикселя[Пиксель_5][Цвет]           = STANDART_GROUPS[Состояние_детали + 13];
Данные_пикселя[Пиксель_5][Непрозрачность] = STANDART_GROUPS[Состояние_детали + 14];
//----------------------------------------------------------
Данные_пикселя[Пиксель_6][Цвет]           = STANDART_GROUPS[Состояние_детали + 15];
Данные_пикселя[Пиксель_6][Непрозрачность] = STANDART_GROUPS[Состояние_детали + 16];
//----------------------------------------------------------
Данные_пикселя[Пиксель_7][Цвет]           = STANDART_GROUPS[Состояние_детали + 17];
Данные_пикселя[Пиксель_7][Непрозрачность] = STANDART_GROUPS[Состояние_детали + 18];
//----------------------------------------------------------
 

Create_resource(string Resource_name

Resource_name - quantas vezes ele muda? quantos recursos estão na memória?

Razão: