Canvas üzerinde bir kitle kaynaklı proje yapma - sayfa 16

 
Реter Konow :

Aşağıdakileri biraz abartıyorsunuz:

...

Anlayın, yeniden çizme, bir dizideki değerleri yeniden yazmaktır ve 1000000 değeri (pencere görüntüsündeki ve bitmap'teki yaklaşık piksel sayısı) yeniden yazmanız gerekirse, bunlar "saniyenin binde biri" olmayacaktır, ama saniye.

Abartmıyorum ve nedenini anlıyorum. Örneklerime bakın, bu başlıkta hareket halinde FPS 30-40 fps civarında. Kadrov, Carl!

Ve her kare birbirinden 100 piksel değil, çalışma alanının %70-80'i kadar farklıdır. Ekran çözünürlüğünün boyutuyla bu FPS'nin azalmadığını söylemiyorum. küçülüyor. 12-17'ye kadar geniş alanları taşırken 1980x1050 ekranda.

Ve evet. Her yerde önbelleğe alma ve eski önbellek alanlarını bulmak için bazı optimizasyonlar kullanıyorum (kirli alanları aramak). Ancak bu yaygın bir uygulamadır, birine gözünüzü açacağınızı düşünmeyin.

 
Igor Volodin :

Abartmıyorum ve nedenini anlıyorum. Örneklerime bakın, bu başlıkta hareket halinde FPS 30-40 fps civarında. Kadrov, Carl!

Ve her kare birbirinden 100 piksel değil, çalışma alanının %70-80'i kadar farklıdır. Ekran çözünürlüğünün boyutuyla bu FPS'nin azalmadığını söylemiyorum. küçülüyor. 12-17'ye kadar geniş alanları taşırken 1980x1050 ekranda.

Ve evet. Her yerde önbelleğe alma ve eski önbellek alanlarını bulmak için bazı optimizasyonlar kullanıyorum (kirli alanları aramak). Ancak bu yaygın bir uygulamadır, birine gözlerinizi açacağınızı düşünmeyin.

Görüntü dizisini ResoourceCreate()'e gönderdikten sonra dijital maskeyi bellekte tutuyor musunuz?

Cevabınız evet ise, neden yavaşlamadığınız açıktır. Henüz uygulamadım. Yani, benim uygulamamda görüntü maskesi korunmaz. Bu nedenle, pencerenin herhangi bir bölümünü değiştirmek için tüm pencereyi bir dizide yeniden oluşturmanız gerekir. Bu bir yavaşlamaya neden olur.

Bir sonraki adım, dijital maskeleri kaydetmek için bir sistem oluşturmak ve belirli alanlarla etkin bir şekilde çalışmaktır. Bundan sonra, elemanların arayüz olaylarına tepkisi yavaşlamaz.

 
Реter Konow :

1. o kadar uzun sürer (yaklaşık 250 milisaniye ila 2 saniye).

vay, sayılar.


Tam ekranda, hiç fren olmamalıdır.

Orada ne çiziyorsun?

---

CCanvas kullanıyorsanız - yıkıcıyı kontrol edin - kesinlikle ResourceFree yapmıyorsunuz.

Kaynaklarla çalışırken frenlerin ana nedeni budur. Serbest bırakma olmadan sürekli oluşturma.

 
Реter Konow :

Görüntü dizisini ResoourceCreate()'e gönderdikten sonra dijital maskeyi bellekte tutuyor musunuz?

"Dijital maske" terimini kendiniz mi buldunuz? Yandex bana sanal gerçeklik kaskları veriyor). Evet, dizilerde önbelleğe alma. Şahsen, özellikle alfa kanalı seçeneğinin optimizasyonuna dayandım, çünkü. en iyi şekilde yararlanmak istedi. Saydam öğeler olması için piksellerin "manuel" karıştırılmasıyla çok şey yenir. Alfa kanalını hesaplamadan arayüz birkaç kat daha hızlı uçar.

 
Igor Volodin :

"Dijital maske" terimini kendiniz mi buldunuz? Yandex bana sanal gerçeklik kaskları veriyor). Evet, dizilerde önbelleğe alma. Şahsen, özellikle alfa kanalı seçeneğinin optimizasyonuna dayandım, çünkü. en iyi şekilde yararlanmak istedi. Saydam öğeler olması için piksellerin "manuel" karıştırılmasıyla çok şey yenir. Alfa kanalını hesaplamadan arayüz birkaç kat daha hızlı uçar.

Evet, bu terimi kendim buldum, ancak önerirseniz daha uygun bir terimle değiştirebilirim. )

Bu, görüntünün dizide depolanan renkleri (alfa kanalı hesaplandıktan sonra) temsil eden sayılara dönüştürüldüğü anlamına gelir. Bu dizi ResourceCreate() öğesine gönderilir ve görüntü oluşturulur.

Alfa kanalı ile çalışmayı optimize etmeye çalışmadım ama ilginç bir fikir... Arayüz pencerelerinin şeffaflığını değiştirmeyi mümkün kılacak bir fikir olduğu için tüm nesneleri alfa kanalını hesapladıktan sonra çizdim. . Gelecekte, bunun uygulanabileceğini düşünüyorum. Yalnızca "sıradan" nesneler tarafından oluşturulan girdi alanları karışır ve bu nedenle şeffaflığı değiştirmez ... Ancak bu da çözülebilir.

Arayüz olaylarında frenleme sorununun çözümünü öncelikle görüntüleri dizilere kaydetmede ve alanlarında yönlendirmede görüyorum.

 
o_O :

vay, sayılar.


Tam ekranda, hiç fren olmamalıdır.

Orada ne çiziyorsun?

---

CCanvas kullanıyorsanız - yıkıcıyı kontrol edin - kesinlikle ResourceFree yapmıyorsunuz.

Kaynaklarla çalışırken frenlerin ana nedeni budur. Serbest bırakma olmadan sürekli oluşturma.

Kesinlikle ResourceFree()'yi deneyeceğim, ama bana öyle geliyor ki sorun bu değil. (Kontrollü ayar pencereleri çiziyorum. Ne yazık ki Canvas kullanmıyorum - farklı bir yaklaşım.)

Gerçek şu ki, birkaç onay kutusu içeren küçük bir ayarlar penceresi oluşturursam, görsel olarak anında tepki verirler, ancak daha büyük bir pencere (~ 700x500 piksel veya daha fazla) oluşturursam, arayüz olaylarına genel tepki hızı önemli ölçüde düşer.

Sorunu analiz ederek, meselenin diziyi yeniden başlatmak ve her bir arayüz olayındaki tüm piksellerin renklerini yeniden hesaplamak olduğu sonucuna vardım. Sonuçta fonksiyon 700*500 civarında değer hesaplar ve diziyi başlatır. Dizi başlatmanın kendisi de zaman alır. Ancak, görüntüyü kaydeder ve yalnızca belirli bir öğeyle ilgili olan piksel renk değerlerini değiştirirseniz, reaksiyon süresi zaten bu öğenin alanına bağlı olacaktır ...

Bana öyle geliyor ki sorun bu.

 
Реter Konow :

Sorunu analiz ederek, meselenin diziyi yeniden başlatmak ve her bir arayüz olayındaki tüm piksellerin renklerini yeniden hesaplamak olduğu sonucuna vardım. Sonuçta fonksiyon 700*500 civarında değer hesaplar ve diziyi başlatır.

kodu göster.
 
o_O :
kodu göster.
Bu kod bloğu, pencerenin ve öğelerinin dijital bir "anlık görüntüsünü" oluşturmaktan doğrudan sorumlu bir dizi işlevdir.

"Draw_element()" işlevi, pencere görüntüsünün tüm ayrıntılarını oluşturur. İlk olarak, bir resim dizisi oluşturur (bir tür ortak çizim tuvali gibi) ve tüm bileşenleri onun üzerine çizer (dijital olarak).

Her bir bileşen tipini çizmek için, bu özel tipi çizmek üzere tasarlanmış özel bir fonksiyon çağrılır: "Draw_element_detail()", "Set_text_on_element()", "Create_gradient", "Set_label_on_element()":

Editör tamamını kabul etmediği için kodu birkaç parça halinde gönderiyorum.

//--------------------------------------------------
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 (dize Kaynak_adı

Kaynak_adı - ne sıklıkla değişir? bellekte kaç kaynak var?