//-------------------------------------------------- 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 Длинна_градиента, 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(Альфы, Ширина_градиента_рамки);
} //-------------------------------------------------- void Создать_ресурс(string Наименование_ресурса, int &Массив_пикселей[],int Ширина_массива, int Высота_массива, int Формат_цвета = COLOR_FORMAT_ARGB_NORMALIZE) {
你在以下方面有点夸大其词。
...
要知道,重绘是重写数组中的值,如果你要重写1000000个值(窗口图像和位图中的像素的大致数量),那就不是 "千分之一秒",而是几秒钟。
我没有夸大其词,也会理解为什么。看看我的例子,在这个主题中,运动中的FPS大约是30-40 fps。框架,卡尔!
而每一帧的差别不是100个像素,而是70-80%的工作区域的差别。我并不是说随着屏幕分辨率的大小,这个FPS不会下降。它确实如此。在1980x1050的屏幕上,当把大的区域移动到12-17时。
而且是的。我到处都在使用缓存,并在寻找有过期缓存的区域时进行了一些优化(寻找脏的区域)。但这是一种常见的做法,不要以为你会让别人开眼界。
我没有夸大其词,我将看到原因。看看我的例子,在这个主题中,运动中的FPS大约是30-40 fps。框架,卡尔!
而每一帧的差别不是100个像素,而是70-80%的工作区域的差别。我并不是说随着屏幕分辨率的大小,这个FPS不会下降。它确实如此。在1980x1050的屏幕上,当把大的区域移动到12-17时。
而且是的。我到处都在使用缓存,在寻找有过期缓存的区域时也做了一些优化(寻找脏区)。但这是一种常见的做法,不要以为你会让人开眼界。
在向ResoourceCreate()发送带有图像的数组后,你是否将数字掩码存储在内存中?
如果是这样,就很清楚为什么你没有滞后。我还没有实施它。也就是说,在我的实现中,图像掩码没有被保存。因此,要改变一个窗口的任何部分,我必须在一个数组中重新创建整个窗口。这就造成了一个瓶颈。
下一步是建立一个保存数字口罩的系统,并在特定领域高效工作。此后,元素对接口事件的响应将不会被减慢。
1. 所需时间越长(大约250毫秒至2秒)。
哇,什么数字。
全屏时不应该有任何滞后。
你在那里画什么?
---
如果你使用的是CCanvas--检查析构器--你可能没有做ResourceFree。
这是造成资源制动的主要原因。不断创造而不释放。
在向ResoourceCreate()发送图像阵列后,你是否将数字掩码存储在内存中?
"数字面具 "这个词是你自己想出来的吗?Yandex给了我虚拟现实头盔 )。是的,在数组中进行缓存。就个人而言,我花了很大力气来优化阿尔法通道选项,因为我想最大限度地利用它。很多东西都被 "手动 "混合像素以制作透明元素所吞噬。没有阿尔法通道的计算,界面的飞行速度甚至快了几倍。
"数字面具 "这个词是你自己想出来的吗?Yandex给了我虚拟现实头盔 )。是的,在数组中进行缓存。就个人而言,我花了很大力气来优化阿尔法通道选项,因为我想最大限度地利用它。它在 "手动 "混合像素以制作透明元素方面吃了很多苦头。没有阿尔法通道的计算,界面的飞行速度甚至快了几倍。
是的,我自己想出了这个词,但如果你建议,我可以把它改成更方便的词。)
我的意思是,图像被转换为代表颜色的数字(已经计算了阿尔法通道),这些数字被存储在一个数组中。这个数组被发送到ResourceCreate(),图像被创建。
我没有尝试过优化阿尔法通道,但这是一个有趣的想法......我的所有对象都是在阿尔法通道计算后绘制的,所以有一个想法,就是让它可以改变界面窗口的透明度。在未来,我认为这可以实施。唯一碍事的是输入字段,它们是由 "正常 "对象创建的,因此不会改变透明度......。但这也是可以解决的。
我认为解决界面事件上的停滞问题,首先是将图像存储在数组中,并在其区域内确定方向。
哇,好大的数字。
全屏时不应该有任何刹车。
你在那里画什么?
---
如果你使用的是CCanvas--检查析构器--你可能没有做ResourceFree。
这是资源放缓的主要原因。不断创造而不释放。
我一定会尝试ResourceFree(),但我认为这不是问题所在。 (我用控件绘制设置窗口。不幸的是,我没有使用Kanvas--不同的方法)。
问题是,如果我创建小的设置窗口,只有很少的复选框,从视觉上看,他们会立即做出反应,但是如果我创建更大的窗口(约700x500像素或更大),那么对界面事件的整体反应速度就会急剧下降。
分析这个问题,我得出的结论是,它是关于重新初始化数组,并在每个界面事件中重新计算所有像素的颜色。毕竟,该函数计算了大约700*500个值并初始化了数组。阵列初始化本身也需要时间。但如果你保存图像并只改变属于某个元素的像素颜色值,反应时间将取决于这个元素的面积...
在我看来,这就是问题所在。
分析这个问题,我得出的结论是,它是关于重新初始化数组,并在每个界面事件中重新计算所有像素的颜色。毕竟,该函数计算了大约700*500个值并初始化了数组。
显示代码。
“Draw_element()”函数创建窗口图像的所有细节。首先,它创建一个图像数组(有点像普通的绘图画布)并在其上(以数字方式)绘制所有组件。
要绘制每种类型的组件,需要调用一个特殊函数,用于绘制这种特定类型:“Draw_element_detail()”、“Set_text_on_element()”、“Create_gradient”、“Set_label_on_element()”:
我分几部分发送代码,因为编辑器不接受整体。
void Нарисовать_элемент( int Окно, int Канвас, int смещение_по_x = 0 , int смещение_по_y = 0 )
{ //Alert(__FUNCTION__);
int Номер_рисуемого_полотна = G_CORE[Окно][Канвас][_DROWING_CANVAS],
Имя_полотна = G_CORE[Окно][Канвас][_NAME],
//-----------------------------------------------------------------
//Тип канваса может быть _STRIP или _LABEL.
//-----------------------------------------------------------------
Тип_канваса = G_CORE[Окно][Канвас][_BITMAP_TYPE],
//-----------------------------------------------------------------
//Канвас может представлять из себя готовую картинку.
//В этом случае, индекс этой картинки будет прописан в свойствах канваса.
//(например картинка ползунка слайдера - самостоятельный канвас).
//-----------------------------------------------------------------
Индекс_лейбла_канваса = G_CORE[Окно][Канвас][_OBJECTS_BITMAP_INDEX],
//-----------------------------------------------------------------
//Текущее состояние канваса. Берем из свойства _CURRENT_STATE.
//-----------------------------------------------------------------
Текущее_состояние_канваса = G_CORE[Окно][Канвас][_CURRENT_SCENE],
//-----------------------------------------------------------------
//-----------
Состояние_детали,
Индекс_лейбла,
//------------------------------
Высота_полотна = G_CORE[Окно][Канвас][_Y_SIZE],
Ширина_полотна = G_CORE[Окно][Канвас][_X_SIZE],
//------------------------------
Массив_пикселей_полотна[],
//------------------------------
Размер_массива_пикселей_полотна = Высота_полотна * Ширина_полотна;
//----------------------------------------------------------
//Alert("Имя_элемента ",Имя_элемента," Окно ",Окно," Объект ",Объект);
//------------------------------------------------------------
int w;
//-------------------------------------------------------------
//Устанавливаем размеры массива основания элемента управления.
//Все детали этого элемента будут рисоваться на этом основании.
//Для прорисовки деталей элемента управления, будут вызываться
//функции (установать лейбл, установить текст и т.д...), и в каждую
//из них будет посылаться один и тот же массив пикселей элемента,
//размер которого мы сейчас устанавливаем. Детали будут рисоваться
//в том же массиве, уже поверх прежде нарисованных. На конечном этапе,
//будет вызываться функция "создать ресурс", и картинка элемента
//управления будет создана.
//-------------------------------------------------------------
ArrayResize (Массив_пикселей_полотна,Размер_массива_пикселей_полотна);
//-------------------------------------------------------------
//Создание основания самого элемента.
//----------------------------------------------------------------------
Установить_цвет_и_прозрачность_пикселей_изображения(Окно,Канвас,Текущее_состояние_канваса);
//---------------------------------------
switch (Тип_канваса)
{
case _STRIP: Нарисовать_деталь_элемента(Окно,Канвас,Канвас,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна); break ;
//-------------------------------------------------------------------------------------------------------------
case _LABEL: if (Индекс_лейбла_канваса)
{
Установить_свойства_лейбла(Окно,Канвас,Индекс_лейбла_канваса,Текущее_состояние_канваса);
Установить_лейбл_на_Элемент(Окно,Канвас,Канвас,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Индекс_лейбла_канваса);
}
break ;
//-------------------------------------------------------------------------------------------------------------
}
//-------------------------------------------------------------
//Alert("Размер_массива_пикселей_элемента ",Размер_массива_пикселей_элемента);
//-------------------------------------
//Установить_цвет_и_прозрачность_пикселей_изображения(Состояние_детали);
//--------------------------------------------------------------------------
//Делаем цикл по всем деталям элемента, и даже тем, которые находятся в списке
//объектов выше самого элемента. Поэтому цикл начинаем с начала списка объектов
//окна и идем в цикле до конца списка. Создаем все детали элемента, без относительно
//того, находятся ли они в последовательности или нет. При этом, обходим вторичное создание
//основания элемента с помощью условия.
//--------------------------------------------------------------------------
for ( int Деталь_полотна = 1 ; Деталь_полотна < 500 ; Деталь_полотна++)
{
if (!G_CORE[Окно][Деталь_полотна][_NAME]){ break ;}
//---------------------------------------
int Номер_полотна_которому_принадлежит_деталь = G_CORE[Окно][Деталь_полотна][_DROWING_CANVAS];
int Тип_объекта_детали = G_CORE[Окно][Деталь_полотна][_OBJ_TYPE];
// Alert("Деталь_полотна ",Деталь_полотна," Номер_элемента_которому_принадлежит_деталь ",Номер_элемента_которому_принадлежит_деталь);
//---------------------------------------
if (Номер_полотна_которому_принадлежит_деталь == Канвас && Деталь_полотна != Канвас && Тип_объекта_детали == Obj_Pixel)
{ //Alert("Окно ",Окно," Канвас ",Канвас," Деталь_полотна ",Деталь_полотна," _GROUP_MAIN_OBJECT ",G_CORE[Окно][Деталь_полотна][_GROUP_MAIN_OBJECT]," Номер_рисуемого_элемента ",Номер_рисуемого_элемента);
//---------------------------------------
int Тип_детали = G_CORE[Окно][Деталь_полотна][_BITMAP_TYPE];
int Деталь_спрятана = G_CORE[Окно][Деталь_полотна][_OBJECT_HIDE];
int Реализация_сценария = G_CORE[Окно][Деталь_полотна][_OBJECT_ACTIVATED];
int Гланый_элемент_детали = G_CORE[Окно][Деталь_полотна][_GROUP_MAIN_OBJECT];
int Состояние_элемента = G_CORE[Окно][Гланый_элемент_детали][_CURRENT_STATE];
//---------------------------------------
int Высота_элемента = G_CORE[Окно][Гланый_элемент_детали][_Y_SIZE];
int Ширина_элемента = G_CORE[Окно][Гланый_элемент_детали][_X_SIZE];
//---------------------------------------
if (!Реализация_сценария)
{
//----------------------------------------------------------------------
//Определение текущего состояния объекта.
//----------------------------------------------------------------------
if (!Состояние_элемента || (Состояние_элемента == _NEUTRAL_STATE || Состояние_элемента == _NEUTRAL_HIGHLIGHTED || Состояние_элемента == _NEUTRAL_BLOCKED))
{
if (!Состояние_элемента || Состояние_элемента == _NEUTRAL_STATE) Состояние_детали = G_CORE[Окно][Деталь_полотна][_NEUTRAL_STATE];
if (Состояние_элемента)Состояние_детали = G_CORE[Окно][Деталь_полотна][Состояние_элемента];
//-------------------------------
Индекс_лейбла = G_CORE[Окно][Деталь_полотна][_OBJECTS_BITMAP_INDEX];
w = 1 ;
}
//----------------------------------------------------------------------
if (!w && (Состояние_элемента == _ACTIVATED_STATE || Состояние_элемента == _ACTIVATED_HIGHLIGHTED || Состояние_элемента == _ACTIVATED_BLOCKED))
{
Состояние_детали = G_CORE[Окно][Деталь_полотна][Состояние_элемента];
Индекс_лейбла = G_CORE[Окно][Деталь_полотна][_ACTIVATED_LABEL];
}
//----------------------------------------------------------------------
G_CORE[Окно][Деталь_полотна][_CURRENT_SCENE] = Состояние_детали;
w = 0 ;
}
//---------------------------------------
if (Реализация_сценария)Состояние_детали = G_CORE[Окно][Деталь_полотна][_CURRENT_SCENE];
//---------------------------------------
Установить_цвет_и_прозрачность_пикселей_изображения(Окно,Деталь_полотна,Состояние_детали);
//---------------------------------------
if (!Деталь_спрятана)
{
switch (Тип_детали)
{
case _STRIP: Нарисовать_деталь_элемента(Окно,Канвас,Деталь_полотна,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна); break ;
//-------------------------------------------------------------------------------------------------------------
case _LABEL: if (Индекс_лейбла)
{
Установить_свойства_лейбла(Окно,Деталь_полотна,Индекс_лейбла,Состояние_детали);
Установить_лейбл_на_Элемент(Окно,Канвас,Деталь_полотна,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Индекс_лейбла);
}
break ;
//-------------------------------------------------------------------------------------------------------------
case _TEXT_: Установить_текст_на_Элемент(Окно,Канвас,Деталь_полотна, Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Состояние_детали); break ;
//-------------------------------------------------------------------------------------------------------------
case _BASE : if (G_CORE[Окно][Деталь_полотна][_GRADIENT])Нарисовать_деталь_элемента(Окно,Канвас,Деталь_полотна,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, 1 ); break ;
}
}
}
}
//--------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------
//Cоздаем ресурс.
//-------------------------------------------------------------------------------------------------------------
Создать_ресурс(Имя_полотна,Массив_пикселей_полотна,Ширина_полотна,Высота_полотна);
//-------------------------------------------------------------------------------------------------------------
//Устанавливаем координаты элемента.
//-------------------------------------------------------------------------------------------------------------
if (смещение_по_x != 0 ) ObjectSetInteger ( 0 ,Имя_полотна, OBJPROP_XDISTANCE ,G_CORE[Окно][Канвас][_X] + смещение_по_x);
if (смещение_по_y != 0 ) ObjectSetInteger ( 0 ,Имя_полотна, OBJPROP_YDISTANCE ,G_CORE[Окно][Канвас][_Y] + смещение_по_y);
if (смещение_по_x == 0 ) ObjectSetInteger ( 0 ,Имя_полотна, OBJPROP_XDISTANCE ,G_CORE[Окно][Канвас][_X]);
if (смещение_по_y == 0 ) ObjectSetInteger ( 0 ,Имя_полотна, OBJPROP_YDISTANCE ,G_CORE[Окно][Канвас][_Y]);
//-------------------------------------------------------------------------------------------------------------
}
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------
void Нарисовать_деталь_элемента(
int Окно,
int Канвас,
int Деталь_полотна,
int &Массив_пикселей_полотна[],
int Высота_полотна,
int Ширина_полотна,
int Нарисовать_только_градиент = 0
)
{
//--------------------------------------------------------------------------
int Высота_детали = G_CORE[Окно][Деталь_полотна][_Y_SIZE];
int Длинна_детали = G_CORE[Окно][Деталь_полотна][_X_SIZE];
int Отступ_X = G_CORE[Окно][Деталь_полотна][_X] - G_CORE[Окно][Канвас][_X];
int Отступ_Y = G_CORE[Окно][Деталь_полотна][_Y] - G_CORE[Окно][Канвас][_Y];
int Индекс_пикселя = G_CORE[Окно][Деталь_полотна][_PIXEL_INDEX];
//--------------------------------------------------------------------------
int Градиент_рамки_детали = G_CORE[Окно][Деталь_полотна][_GRADIENT];
//--------------------------------------------------------------------------
//Alert("Нарисовать_деталь_элемента - Основание: Канвас ",Канвас," Деталь_полотна ",Деталь_полотна," [Деталь_полотна][_X] ",G_CORE[Окно][Деталь_полотна][_X]);
int Номер_пикселя_элемента;
//--------------------------------------------------------------------------
//Цикл по площади основания всего элемента.
//--------------------------------------------------------------------------
if (!Нарисовать_только_градиент)
{
for ( int Ряд = 0 ; Ряд < Высота_полотна; Ряд++)
{
for ( int Пиксель = 0 ; Пиксель < Ширина_полотна; Пиксель++)
{
if (
Ряд >= Отступ_Y
&& Ряд < (Отступ_Y + Высота_детали)
&& Пиксель >= Отступ_X
&& Пиксель <(Отступ_X + Длинна_детали)
)
{
Массив_пикселей_полотна[Номер_пикселя_элемента] = ColorToARGB (Данные_пикселя[Индекс_пикселя][Цвет],Данные_пикселя[Индекс_пикселя][Непрозрачность]);
}
Номер_пикселя_элемента++;
}
}
}
//-----------------------------
Номер_пикселя_элемента = 0 ;
//-----------------------------
if (Градиент_рамки_детали)
{
int V_раскладка = 0 ;
int H_раскладка = 1 ;
int Тип_градиента_рамки = STANDART_GROUPS[Градиент_рамки_детали + 1 ];
int Ширина_градиента_рамки = STANDART_GROUPS[Градиент_рамки_детали + 2 ];
int Начало_первой_рамки = 0 ;
//----------------------
int Начало_второй_рамки = Ширина_градиента_рамки * 2 ;
int Начало_третьей_рамки = Ширина_градиента_рамки * 4 ;
int Начало_четвертой_рамки = Ширина_градиента_рамки * 6 ;
int Нижний_блик = Начало_четвертой_рамки + Ширина_градиента_рамки * 2 ;
int Верхний_блик = Нижний_блик + 2 ;
//----------------------
switch (Тип_градиента_рамки)
{
case _4_SIDES_GRADIENT:
//-----------------------
//Прототип функции
//Создать_градиент(Раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Ширина_градиента,Длинна_градиента,Отступ_X,Отступ_Y,Начало_градиента, Отступ_линии_от_края);
//-----------------------
Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Ширина_градиента_рамки,Длинна_детали,Отступ_X,Отступ_Y , Начало_первой_рамки, 1 );
//-----------------------
Создать_градиент(V_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, Высота_детали,Ширина_градиента_рамки,Отступ_X,Отступ_Y,Начало_второй_рамки, 1 );
//Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,4,Длинна_детали - 6,Отступ_X + 4,Отступ_Y + 15, Начало_второй_рамки, -1);
//-----------------------
Создать_градиент(V_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, Высота_детали,Ширина_градиента_рамки,Отступ_X + Длинна_детали - Ширина_градиента_рамки,Отступ_Y,Начало_третьей_рамки,- 1 );
//-----------------------
Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Ширина_градиента_рамки,Длинна_детали - Ширина_градиента_рамки,Отступ_X + Ширина_градиента_рамки,(Отступ_Y + Высота_детали - Ширина_градиента_рамки),Начало_четвертой_рамки,- 1 );
//-----------------------
break ;
//------------------------------------------------------------------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------------------------------------------------------------------
case _4_SIDES_GRADIENT_WITH_DOWN_RIGHT_BLICK:
//-----------------------
Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Ширина_градиента_рамки,Длинна_детали,Отступ_X,Отступ_Y , Начало_первой_рамки, 1 );
//-----------------------
Создать_градиент(V_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, Высота_детали,Ширина_градиента_рамки,Отступ_X,Отступ_Y,Начало_второй_рамки, 1 );
//Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,4,Длинна_детали - 6,Отступ_X + 4,Отступ_Y + 15, Начало_второй_рамки, -1);
//-----------------------
Создать_градиент(V_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, Высота_детали,Ширина_градиента_рамки,Отступ_X + Длинна_детали - Ширина_градиента_рамки,Отступ_Y,Начало_третьей_рамки,- 1 );
//-----------------------
Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Ширина_градиента_рамки,Длинна_детали - Ширина_градиента_рамки,Отступ_X + Ширина_градиента_рамки,(Отступ_Y + Высота_детали - Ширина_градиента_рамки),Начало_четвертой_рамки,- 1 );
//-----------------------
//-----------------------
//-----------------------
Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, 1 ,Длинна_детали,Отступ_X,(Отступ_Y + Высота_детали),Нижний_блик, 0 );
//-----------------------
Создать_градиент(V_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, Высота_детали, 1 ,(Отступ_X + Длинна_детали + 1 ),Отступ_Y,Нижний_блик, 0 );
break ;
//------------------------------------------------------------------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------------------------------------------------------------------
case _4_SIDES_GRADIENT_WITH_TOP_LEFT_BLICK:
//-----------------------
Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Ширина_градиента_рамки,Длинна_детали,Отступ_X,Отступ_Y , Начало_первой_рамки, 1 );
//-----------------------
Создать_градиент(V_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, Высота_детали,Ширина_градиента_рамки,Отступ_X,Отступ_Y,Начало_второй_рамки, 1 );
//Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,4,Длинна_детали - 6,Отступ_X + 4,Отступ_Y + 15, Начало_второй_рамки, -1);
//-----------------------
Создать_градиент(V_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, Высота_детали,Ширина_градиента_рамки,Отступ_X + Длинна_детали - Ширина_градиента_рамки,Отступ_Y,Начало_третьей_рамки,- 1 );
//-----------------------
Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Ширина_градиента_рамки,Длинна_детали - Ширина_градиента_рамки,Отступ_X + Ширина_градиента_рамки,(Отступ_Y + Высота_детали - Ширина_градиента_рамки),Начало_четвертой_рамки,- 1 );
//-----------------------
//-----------------------
//-----------------------
Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, 1 ,Длинна_детали + 2 ,Отступ_X,(Отступ_Y + Высота_детали),Нижний_блик, 0 );
//-----------------------
Создать_градиент(V_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, Высота_детали + 1 , 1 ,(Отступ_X + Длинна_детали + 1 ),Отступ_Y - 1 ,Нижний_блик, 0 );
//-----------------------
//-----------------------
//-----------------------
Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Ширина_градиента_рамки,Длинна_детали + 4 ,Отступ_X - 2 ,Отступ_Y - 2 , Верхний_блик, 0 );
//-----------------------
Создать_градиент(V_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, Высота_детали + 3 ,Ширина_градиента_рамки,Отступ_X - 2 ,Отступ_Y - 2 ,Верхний_блик, 0 );
break ;
//------------------------------------------------------------------------------------------------------------------------------------------------------------------
}
}
//-----------------------------
}
//--------------------------------------------------
void Создать_градиент(
int Раскладка,
int Градиент_рамки_детали,
int &Массив_пикселей_полотна[],
int Высота_полотна,
int Ширина_полотна,
int Высота_градиента,
int Длинна_градиента,
int Отступ_X,
int Отступ_Y,
int Начало_градиента = 0,
int Отступ_линии_от_края = 0
)
{
int Номер_пикселя_элемента;
int Первый_пиксель = Градиент_рамки_детали + 3 + Начало_градиента;
int V_раскладка = 0;
int H_раскладка = 1;
//--------------------------------------------------
int Ширина_градиента_рамки = STANDART_GROUPS[Градиент_рамки_детали + 2];
//--------------------------------------------------
int Пиксели[],
Альфы[], q,
Горизонтальная_полоса,
Отступ_линии,
Внутри_территории_рамки,
Внутри_ширины_детали,
колонка;
//--------------------------------------------------
//Устанавливаем размеры массивов.
//--------------------------------------------------
ArrayResize(Пиксели,Ширина_градиента_рамки);
ArrayResize(Альфы, Ширина_градиента_рамки);
if(Раскладка == V_раскладка && !Отступ_линии_от_края)Отступ_линии = Ширина_градиента_рамки;
//------------------------------------------------------------------------------
//Инициализируем массивы цветами пикселей и значениями их непрозрачности.
//------------------------------------------------------------------------------
for(int a1 = 0; a1 <= Ширина_градиента_рамки * 2; a1 += 2)
{
Пиксели[q] = STANDART_GROUPS[Первый_пиксель + a1];
Альфы [q] = STANDART_GROUPS[Первый_пиксель + a1 + 1];
q++;
}
//--------------------------------------------------------------------------
//Цикл по площади всего окна.
//--------------------------------------------------------------------------
for(int _Ряд = 0; _Ряд < Высота_полотна; _Ряд++)
{
for(int _Пиксель_ряда = 0; _Пиксель_ряда < Ширина_полотна; _Пиксель_ряда++)
{
//----------------------------------------------------------
//Фиксируем моменты цикла по площади рамок элемента.
//----------------------------------------------------------
//1. Находимся на территории верхней рамки.
//(Между верхом и низом и между левой и правой сторонами верхней рамки.)
//----------------------------------------------------------
if(
_Ряд >= Отступ_Y && _Ряд < (Отступ_Y + Высота_градиента)
&&(
(Раскладка == H_раскладка && _Пиксель_ряда >= Отступ_X + Отступ_линии && _Пиксель_ряда < (Отступ_X + Длинна_градиента) - Отступ_линии)
||(Раскладка == V_раскладка && Отступ_линии_от_края >= 0 && _Пиксель_ряда >= Отступ_X && _Пиксель_ряда <= Отступ_X + Длинна_градиента - 1 && _Пиксель_ряда <= (Отступ_X + Отступ_линии))
||(Раскладка == V_раскладка && Отступ_линии_от_края < 0 && _Пиксель_ряда >= Отступ_X + Отступ_линии_от_края *-1 && _Пиксель_ряда <= Отступ_X + Ширина_градиента_рамки && _Пиксель_ряда >= Отступ_X + Ширина_градиента_рамки + Отступ_линии)
)
)
{
//-----------------------------------
Внутри_территории_рамки = 1;
//-----------------------------------
if(Раскладка == H_раскладка)Массив_пикселей_полотна[Номер_пикселя_элемента] = ColorToARGB(Пиксели[Горизонтальная_полоса],Альфы[Горизонтальная_полоса]);
if(Раскладка == V_раскладка)Массив_пикселей_полотна[Номер_пикселя_элемента] = ColorToARGB(Пиксели[колонка],Альфы[колонка]);
//-----------------------------------
// if( _Ряд == Отступ_Y + 20 && Раскладка == V_раскладка && Отступ_линии_от_края >= 0 && _Пиксель_ряда >= Отступ_X && _Пиксель_ряда <= (Отступ_X + Отступ_линии))Alert(12345);
колонка++;
}
//-------------------------
Номер_пикселя_элемента++;
//-------------------------
}
//------------------------------------------------
if(Внутри_территории_рамки)
{
Горизонтальная_полоса++;
колонка = 0;
//---------------------------------------------------------------------------------
//Счетчик "Отступ_линии" может иметь максимальное значение равное ширине градиента,
//так как прибавляется только при спуске по линиям этого градиента на событии переключения ряда.
//---------------------------------------------------------------------------------
if(Раскладка == H_раскладка)Отступ_линии += Отступ_линии_от_края;
//---------------------------------------------------------------------------------
//
//---------------------------------------------------------------------------------
if(Раскладка == V_раскладка && _Ряд < Отступ_Y + Ширина_градиента_рамки)Отступ_линии += Отступ_линии_от_края;
//---------------------------------------------------------------------------------
if(Раскладка == V_раскладка && _Ряд >= Отступ_Y + Высота_градиента - Ширина_градиента_рамки - 1)Отступ_линии -= Отступ_линии_от_края;
//---------------------------------------------------------------------------------
if(Раскладка == V_раскладка && Отступ_линии_от_края < 0 && Отступ_линии > 0)Отступ_линии *=-1;
}
//------------------------------------------------
//------------------------------------------------
}
//---------------------
// Alert("Градиент_рамки_детали ",Градиент_рамки_детали," Ширина_градиента_рамки ",Ширина_градиента_рамки );
//---------------------
}
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------
void Установить_текст_на_Элемент(
int Окно,
int Канвас,
int Деталь_полотна,
int &Массив_пикселей[],
int Высота_массива,
int Длинна_массива,
int Состояние_детали
)
{
//--------------------
//int Головной_объект_группы = G_CORE[Окно][Деталь_полотна][_GROUP_MAIN_OBJECT];
string Текст = CONTENT[G_CORE[Окно][Деталь_полотна][_TEXT]];
//--------------------
string Шрифт = FONT[STANDART_GROUPS[Состояние_детали + 5]];
int Цвет_текста = ColorToARGB(STANDART_GROUPS[Состояние_детали + 3],STANDART_GROUPS[Состояние_детали + 4]);
int Размер_шрифта = STANDART_GROUPS[Состояние_детали + 6];
int Угол_наклона = STANDART_GROUPS[Состояние_детали + 7];
int Привязка_текста = STANDART_GROUPS[Состояние_детали + 8];
int Стиль_шрифта = STANDART_GROUPS[Состояние_детали + 9];
//--------------------
int Формат_цвета = COLOR_FORMAT_ARGB_NORMALIZE;
//--------------------
int Отступ_X = G_CORE[Окно][Деталь_полотна][_X] - G_CORE[Окно][Канвас][_X];
int Отступ_Y = G_CORE[Окно][Деталь_полотна][_Y] - G_CORE[Окно][Канвас][_Y];
//--------------------------------------------------
//Alert("Нарисовать_деталь_элемента - Текст: Канвас ",Канвас," Деталь_полотна ",Деталь_полотна," [Деталь_полотна][_X] ",G_CORE[Окно][Деталь_полотна][_X]," Канвас][_X] ",G_CORE[Окно][Канвас][_X]);
TextSetFont(Шрифт,Размер_шрифта *-10,Стиль_шрифта,Угол_наклона);
//--------------------------------------------------
if(!TextOut(Текст,Отступ_X,Отступ_Y,Привязка_текста,Массив_пикселей,Длинна_массива,Высота_массива,Цвет_текста,Формат_цвета))Alert(GetLastError());
//--------------------------------------------------
}
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------
void Установить_размеры_текста(int Окно, int Объект, int Главный_объект_в_элементе, int Состояние_детали)
{
int Массив_пикселей[];
int Самая_левая_точка = 1000000,
Самая_правая_точка,
Самая_верхняя_точка = 1000000,
Самая_нижняя_точка,
Номер_пикселя;
//--------------------
string Текст = CONTENT[G_CORE[Окно][Объект][_TEXT]];
//--------------------
string Шрифт = FONT[STANDART_GROUPS[Состояние_детали + 5]];
int Цвет_текста = ColorToARGB(STANDART_GROUPS[Состояние_детали + 3],STANDART_GROUPS[Состояние_детали + 4]);
int Размер_шрифта = (int)(STANDART_GROUPS[Состояние_детали + 6]);
int Угол_наклона = STANDART_GROUPS[Состояние_детали + 7];
int Привязка_текста = STANDART_GROUPS[Состояние_детали + 8];
int Стиль_шрифта = STANDART_GROUPS[Состояние_детали + 9];
int Количество_букв_текста = StringLen(Текст);
//--------------------
int Формат_цвета = COLOR_FORMAT_ARGB_NORMALIZE;
//--------------------
int Длинна_буквы = Размер_шрифта;
int Высота_буквы = Размер_шрифта;//Alert("Высота_буквы ",Высота_буквы," Самая_нижняя_точка - Самая_верхняя_точка ",Самая_нижняя_точка - Самая_верхняя_точка);
//--------------------
int Высота_массива = Высота_буквы * 2;
int Длинна_массива = Длинна_буквы * Количество_букв_текста * 2;
//--------------------
int Размер_массива = Высота_массива * Длинна_массива;
//--------------------
ArrayResize(Массив_пикселей,Размер_массива);//Alert("Размер_массива ",Размер_массива);
//--------------------------------------------------
// Alert("Шрифт ",Шрифт ," Высота_буквы ",Высота_буквы," Размер_шрифта ",Размер_шрифта," Угол_наклона ",Угол_наклона);
TextSetFont(Шрифт,Размер_шрифта *-10,Стиль_шрифта,Угол_наклона);
//--------------------------------------------------
if(!TextOut(Текст,0,0,Привязка_текста,Массив_пикселей,Длинна_массива,Высота_массива,Цвет_текста,Формат_цвета))Alert(GetLastError());
//--------------------------------------------------
for(int Ряд = 0; Ряд < Высота_массива; Ряд++)
{
for(int Колонка = 0; Колонка < Длинна_массива; Колонка++)
{
if(Массив_пикселей[Номер_пикселя] == Цвет_текста)
{
//----------------------------
if(Самая_левая_точка >= Колонка) Самая_левая_точка = Колонка;
//----------------------------
if(Самая_правая_точка <= Колонка)Самая_правая_точка = Колонка;
//----------------------------
}
//-------------------
Номер_пикселя++;
}
}
//Alert("Самая_верхняя_точка ",Самая_верхняя_точка," Самая_нижняя_точка ",Самая_нижняя_точка," Самая_левая_точка ",Самая_левая_точка," Самая_правая_точка ",Самая_правая_точка);
//-----------------------------------------
int Длинна_текста = Самая_правая_точка - Самая_левая_точка;
//-----------------------------------------
//-----------------------------------------
G_CORE[Окно][Объект][_TEXT_X_SIZE] = Длинна_текста;
//-----------------------------------------
G_CORE[Окно][Главный_объект_в_элементе][_TEXT_X_SIZE] = Длинна_текста;
//-----------------------------------------
G_CORE[Окно][Объект][_X_SIZE] = Длинна_текста;
//--------------------------------------------------
Alert("Объект ",Объект," Длинна_текста ",Длинна_текста);
}
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------
void Установить_лейбл_на_Элемент(
int Окно,
int Канвас,
int Деталь_полотна,
int &Массив_пикселей_полотна[],
int Высота_элемента,
int Ширина_элемента,
int Индекс_лейбла,
// int Цвет_фона,
// int Непрозрачность_фона
)
{
//-----------------------
// Alert(__FUNCTION__);
int Цвет_пикселя,
Непрозрачность_пикселя,
Объект_привязки_лейбла = G_CORE[Окно][Деталь_полотна][_LABEL_BACKGROUND_OBJECT],
Состояние_объекта_привязки = G_CORE[Окно][Объект_привязки_лейбла][_CURRENT_SCENE],
Номер_пикселя_объекта_привязки = G_CORE[Окно][Объект_привязки_лейбла][_PIXEL_INDEX],
Поправка = Номер_пикселя_объекта_привязки * 2,
//--------------------------------------------
Цвет_фона = STANDART_GROUPS[Состояние_объекта_привязки + 3 + Поправка],
Непрозрачность_фона = STANDART_GROUPS[Состояние_объекта_привязки + 4 + Поправка];
//--------------------------------------------
// Alert("Цвет_фона ",Цвет_фона," Непрозрачность_фона ",Непрозрачность_фона," [_B2_PARAMETER] ",G_CORE[Окно][Деталь_полотна][_B2_PARAMETER]," Номер_пикселя_объекта_привязки ",Номер_пикселя_объекта_привязки);
//-------------------------
// int Головной_объект_группы = G_CORE[Окно][Деталь_полотна][_GROUP_MAIN_OBJECT];
//--------------------
int Отступ_X = G_CORE[Окно][Деталь_полотна][_X] - G_CORE[Окно][Канвас][_X];
int Отступ_Y = G_CORE[Окно][Деталь_полотна][_Y] - G_CORE[Окно][Канвас][_Y];
//--------------------------------------------------
//-------------------------------------------------------------
int Номер_пикселя_элемента;
int Пиксель_лейбла = Номер_пикселя_лейбла;
//--------------------------------------------------------
for(int Ряд = 0; Ряд < Высота_элемента; Ряд++)
{
for(int Пиксель = 0; Пиксель < Ширина_элемента; Пиксель++)
{
//------------------------------
if(Ряд >= Отступ_Y && Ряд < (Отступ_Y + Высота_лейбла))
{
if(Пиксель > (Отступ_X - 1) && Пиксель < (Отступ_X) + Ширина_лейбла)
{
if(Тип_лейбла == _RESOURCE_LABEL)
{
//---------------------------
if(A_CORE_BASE[Пиксель_лейбла] == -1)
{
Массив_пикселей_полотна[Номер_пикселя_элемента] = ColorToARGB(Цвет_фона,Непрозрачность_фона);
// Alert("Цвет_фона ",Цвет_фона," Непрозрачность_фона ",Непрозрачность_фона);
}
//---------------------------
else Массив_пикселей_полотна[Номер_пикселя_элемента] = A_CORE_BASE[Пиксель_лейбла];
//---------------------------
}
if(Тип_лейбла == _MY_LABEL)
{
if(A_CORE_BASE[Пиксель_лейбла] == 0){Цвет_пикселя = Данные_пикселя[Пиксель_0][Цвет];Непрозрачность_пикселя = Данные_пикселя[Пиксель_0][Непрозрачность];}
if(A_CORE_BASE[Пиксель_лейбла] == 1){Цвет_пикселя = Данные_пикселя[Пиксель_1][Цвет];Непрозрачность_пикселя = Данные_пикселя[Пиксель_1][Непрозрачность];}
if(A_CORE_BASE[Пиксель_лейбла] == 2){Цвет_пикселя = Данные_пикселя[Пиксель_2][Цвет];Непрозрачность_пикселя = Данные_пикселя[Пиксель_2][Непрозрачность];}
if(A_CORE_BASE[Пиксель_лейбла] == 3){Цвет_пикселя = Данные_пикселя[Пиксель_3][Цвет];Непрозрачность_пикселя = Данные_пикселя[Пиксель_3][Непрозрачность];}
if(A_CORE_BASE[Пиксель_лейбла] == 4){Цвет_пикселя = Данные_пикселя[Пиксель_4][Цвет];Непрозрачность_пикселя = Данные_пикселя[Пиксель_4][Непрозрачность];}
if(A_CORE_BASE[Пиксель_лейбла] == 5){Цвет_пикселя = Данные_пикселя[Пиксель_5][Цвет];Непрозрачность_пикселя = Данные_пикселя[Пиксель_5][Непрозрачность];}
if(A_CORE_BASE[Пиксель_лейбла] == 6){Цвет_пикселя = Данные_пикселя[Пиксель_6][Цвет];Непрозрачность_пикселя = Данные_пикселя[Пиксель_6][Непрозрачность];}
if(A_CORE_BASE[Пиксель_лейбла] == 7){Цвет_пикселя = Данные_пикселя[Пиксель_7][Цвет];Непрозрачность_пикселя = Данные_пикселя[Пиксель_7][Непрозрачность];}
//-----------------------------------------------
if(A_CORE_BASE[Пиксель_лейбла] == -1)
{
Массив_пикселей_полотна[Номер_пикселя_элемента] = ColorToARGB(Цвет_фона,Непрозрачность_фона);
}
//-----------------------------------------------
else Массив_пикселей_полотна[Номер_пикселя_элемента] = ColorToARGB(Цвет_пикселя,Непрозрачность_пикселя);
}/**/
//---------------------------
Пиксель_лейбла++;
//---------------------------
}
}
//------------------------------
Номер_пикселя_элемента++;
}
}
}
//--------------------------------------------------
//--------------------------------------------------
void Установить_свойства_лейбла(int Окно, int Объект, int Индекс_лейбла, int Состояние_детали)
{
//-------------------------------------------------------------
//Цикл по A_CORE_BASE[] и нахождение нужного лейбла по индексу.
//-------------------------------------------------------------
for(int a1 = 0; a1 < 250000; a1++)
{
if(A_CORE_BASE[a1] == _DATA_SEPARATOR && A_CORE_BASE[a1 + 1] == Индекс_лейбла)
{
//---------------------------------------------------
//Инициализируем основные параметры лейбла.
//---------------------------------------------------
Ширина_лейбла = A_CORE_BASE[a1 + 2];
G_CORE[Окно][Объект][_X_SIZE] = Ширина_лейбла;
//--------------
Высота_лейбла = A_CORE_BASE[a1 + 3];
G_CORE[Окно][Объект][_Y_SIZE] = Высота_лейбла;
//--------------
Тип_лейбла = A_CORE_BASE[a1 + 4];
//---------------------------------------------------
//Утанавливаем размер массива изображения.
//---------------------------------------------------
//----------------------------------
Номер_пикселя_лейбла = a1 + 5;
//----------------------------------
if(Тип_лейбла == _MY_LABEL)
{
Установить_цвет_и_прозрачность_пикселей_изображения(Окно,Объект,Состояние_детали);
}
//----------------------------------
break;
}
}
}
//--------------------------------------------------
void Создать_ресурс(string Наименование_ресурса, int &Массив_пикселей[],int Ширина_массива, int Высота_массива, int Формат_цвета = COLOR_FORMAT_ARGB_NORMALIZE)
{
//-------------------------------------
Имя_ресурса = "::"+"bitmap"+ Наименование_ресурса;
//-------------------------------------
ObjectCreate(0,Наименование_ресурса,OBJ_BITMAP_LABEL,0,0,0);
ObjectSetString(0,Наименование_ресурса,OBJPROP_BMPFILE,Имя_ресурса);
//-------------------------------------
if(!ResourceCreate(Имя_ресурса,Массив_пикселей,Ширина_массива,Высота_массива,0,0,0,Формат_цвета))Alert("!ResourceCreate 2 Наименование_ресурса ",Наименование_ресурса," Ошибка ",GetLastError());
//-------------------------------------
}
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------
void Установить_цвет_и_прозрачность_пикселей_изображения(int Окно, int Объект, int Состояние_детали)
{
//if(!G_CORE[Окно][Объект][_OBJECT_ACTIVATED])
// Alert(__FUNCTION__);
//----------------------------------------------------------
Данные_пикселя[Пиксель_0][Цвет] = STANDART_GROUPS[Состояние_детали + 3];
Данные_пикселя[Пиксель_0][Непрозрачность] = STANDART_GROUPS[Состояние_детали + 4];
//----------------------------------------------------------
Данные_пикселя[Пиксель_1][Цвет] = STANDART_GROUPS[Состояние_детали + 5];
Данные_пикселя[Пиксель_1][Непрозрачность] = STANDART_GROUPS[Состояние_детали + 6];
//----------------------------------------------------------
Данные_пикселя[Пиксель_2][Цвет] = STANDART_GROUPS[Состояние_детали + 7];
Данные_пикселя[Пиксель_2][Непрозрачность] = STANDART_GROUPS[Состояние_детали + 8];
//----------------------------------------------------------
Данные_пикселя[Пиксель_3][Цвет] = STANDART_GROUPS[Состояние_детали + 9];
Данные_пикселя[Пиксель_3][Непрозрачность] = STANDART_GROUPS[Состояние_детали + 10];
//----------------------------------------------------------
Данные_пикселя[Пиксель_4][Цвет] = STANDART_GROUPS[Состояние_детали + 11];
Данные_пикселя[Пиксель_4][Непрозрачность] = STANDART_GROUPS[Состояние_детали + 12];
//----------------------------------------------------------
Данные_пикселя[Пиксель_5][Цвет] = STANDART_GROUPS[Состояние_детали + 13];
Данные_пикселя[Пиксель_5][Непрозрачность] = STANDART_GROUPS[Состояние_детали + 14];
//----------------------------------------------------------
Данные_пикселя[Пиксель_6][Цвет] = STANDART_GROUPS[Состояние_детали + 15];
Данные_пикселя[Пиксель_6][Непрозрачность] = STANDART_GROUPS[Состояние_детали + 16];
//----------------------------------------------------------
Данные_пикселя[Пиксель_7][Цвет] = STANDART_GROUPS[Состояние_детали + 17];
Данные_пикселя[Пиксель_7][Непрозрачность] = STANDART_GROUPS[Состояние_детали + 18];
//----------------------------------------------------------
Create_resource(string Resource_name
Resource_name - 它的变化频率是多少? 内存中有多少资源?