Realización de un proyecto crowdsourced en Canvas - página 16

 
Реter Konow:

Está exagerando un poco en lo siguiente:

...

Entienda que redibujar es reescribir valores en una matriz, y si tiene que reescribir 1000000 valores (el número aproximado de píxeles en la imagen de la ventana y en el mapa de bits), no serán "milésimas de segundo", sino segundos.

No exagero y entenderé por qué. Mira mis ejemplos, en este hilo, allí en movimiento los FPS rondan los 30-40 fps. ¡Cuadros, Carl!

Y cada fotograma se diferencia del otro no por 100 píxeles, sino por el 70-80% del área de trabajo. No digo que con el tamaño de la resolución de la pantalla este FPS no disminuya. Lo hace. En una pantalla de 1980x1050 al mover las áreas grandes a 12-17.

Y sí. Estoy utilizando la caché en todas partes, y algunas optimizaciones en la búsqueda de áreas con caché obsoleta (buscando áreas sucias). Pero es una práctica habitual, no creas que vas a abrir los ojos a nadie.

 
Igor Volodin:

No estoy exagerando y voy a ver por qué. Mira mis ejemplos, en este hilo, allí en movimiento los FPS rondan los 30-40 fps. ¡Cuadros, Carl!

Y cada fotograma se diferencia de otro no por 100 píxeles, sino por el 70-80% del área de trabajo. No digo que con el tamaño de la resolución de la pantalla este FPS no disminuya. Lo hace. En una pantalla de 1980x1050 al mover las áreas grandes a 12-17.

Y sí. Estoy utilizando la caché en todas partes, y algunas optimizaciones en la búsqueda de áreas con la caché obsoleta (encontrar áreas sucias). Pero es una práctica habitual, no creas que vas a abrir los ojos a nadie.

¿Guarda la máscara digital en la memoria después de enviar la matriz con la imagen a ResoourceCreate()?

Si es así, está claro por qué no tienes lags. Todavía no lo he puesto en práctica. Es decir, en mi implementación la máscara de la imagen no se guarda. Por lo tanto, para cambiar cualquier parte de una ventana, tengo que volver a crear toda la ventana en un array. Esto provoca un cuello de botella.

El siguiente paso es construir un sistema para guardar las máscaras digitales y trabajar eficazmente con áreas específicas. Después, la respuesta de los elementos a los eventos de la interfaz no se ralentizará.

 
Реter Konow:

1. Cuanto más tiempo se tarda (entre 250 milisegundos y 2 segundos aproximadamente).

Vaya, qué cifras.


No debería haber ningún retraso en pantalla completa.

¿Qué estás dibujando ahí?

---

si estás usando CCanvas - comprueba el destructor - probablemente no estás haciendo ResourceFree.

Esta es la principal causa del frenado de recursos. La creación constante sin la liberación.

 
Реter Konow:

¿Guarda la máscara numérica en la memoria después de enviar la matriz de imágenes a ResoourceCreate()?

¿Se le ocurrió a usted el término "máscara digital"? Yandex me da cascos de realidad virtual ). Sí, el almacenamiento en caché en matrices. Personalmente, me he esforzado mucho en optimizar la opción del canal alfa, ya que quería sacarle el máximo partido. Se come mucho al mezclar "manualmente" los píxeles para hacer elementos transparentes. Sin el cálculo del canal alfa, la interfaz vuela incluso varias veces más rápido.

 
Igor Volodin:

¿Se le ocurrió a usted el término "máscara digital"? Yandex me da cascos de realidad virtual ). Sí, el almacenamiento en caché en matrices. Personalmente, me he esforzado mucho en optimizar la opción del canal alfa, ya que quería sacarle el máximo partido. Se come mucho en mezclar "manualmente" los píxeles para hacer elementos transparentes. Sin el cálculo del canal alfa, la interfaz vuela incluso varias veces más rápido.

Sí, el término se me ocurrió a mí, pero puedo cambiarlo por algo más conveniente si lo sugieres. )

Lo que quiero decir es que la imagen se convierte en números que representan los colores (ya después de calcular el canal alfa), que se almacenan en una matriz. Esta matriz se envía a ResourceCreate(), y se crea la imagen.

No he intentado optimizar el canal alfa, pero es una idea interesante... Tengo todos los objetos dibujados después del cálculo del canal alfa por lo que hay una idea para hacer posible el cambio de la transparencia de las ventanas de la interfaz. En el futuro, creo que esto podría implementarse. Lo único que estorba son los campos de entrada, que son creados por objetos "normales" y por lo tanto no cambian la transparencia... Pero esto también tiene solución.

Veo la solución a la paralización de los eventos de la interfaz, en primer lugar, en el almacenamiento de las imágenes en matrices y la orientación de las mismas en sus áreas.

 
o_O:

Vaya, qué números.


No debería haber ningún freno en pantalla completa.

¿Qué estás dibujando ahí?

---

si estás usando CCanvas - comprueba el destructor - probablemente no estás haciendo ResourceFree.

Esta es la principal razón de la lentitud al trabajar con recursos. Creación constante sin liberación.

Definitivamente probaré con ResourceFree(), pero no creo que este sea el problema. (Dibujo ventanas de configuración con controles. Desgraciadamente, no utilizo Kanvas (el enfoque es diferente).

El caso es que si creo una ventana de configuración pequeña, con pocas casillas de verificación, visualmente reaccionan al instante, sin embargo si creo una ventana más grande (~700x500 píxeles o más) entonces la velocidad de reacción general a los eventos de la interfaz cae dramáticamente.

Analizando el problema, he llegado a la conclusión de que se trata de reiniciar el array y recalcular los colores de todos los píxeles en cada evento de la interfaz. Al fin y al cabo, la función calcula unos 700*500 valores e inicializa la matriz. La propia inicialización de la matriz también lleva tiempo. Pero si guardas la imagen y cambias sólo los valores de color de los píxeles que pertenecen a un determinado elemento, el tiempo de reacción dependerá del área de este elemento...

Este me parece que es el problema.

 
Реter Konow:

Analizando el problema, he llegado a la conclusión de que se trata de reiniciar el array y recalcular los colores de todos los píxeles en cada evento de la interfaz. Al fin y al cabo, la función calcula unos 700*500 valores e inicializa la matriz.

mostrar el código.
 
o_O :
mostrar el código.
Este bloque de código es un conjunto de funciones directamente responsables de crear una "instantánea" digital de la ventana y sus elementos.

La función "Draw_element()" crea todos los detalles de la imagen de la ventana. Primero, crea una matriz de imágenes (que es como un lienzo de dibujo común) y dibuja todos los componentes en él (digitalmente).

Para dibujar cada tipo de componente, se llama a una función especial, diseñada para dibujar este tipo en particular: "Draw_element_detail()", "Set_text_on_element()", "Create_gradient", "Set_label_on_element()":

Envío el código en varias partes, porque el editor no acepta el 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];
//----------------------------------------------------------
 

Crear_recurso(cadena Nombre_del_recurso

Nombre_del_recurso - ¿con qué frecuencia cambia? ¿cuántos recursos hay en la memoria?

Razón de la queja: