007wan |
Отправлено: 30 Августа, 2019 - 11:07:50
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Код (Отобразить)CODE:function Set_Loading()
{
char BLENDFUNCTION[4] = {0, 0, 20, 0}
int ftn = codhexi(#BLENDFUNCTION[0], 4);
int Display_Color, Display_Width, Display_Height;
getdisplay(Display_Color, Display_Width, Display_Height);
int font = CreateFont(14, 0, 0, 0, 100, 0, 0, 0, RUSSIAN_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, CLEARTYPE_QUALITY, FF_DONTCARE, "Arial");
int coord_rectangle[4] = {Display_Width/2-160, Display_Height/2-100, 300, 130};
int hdc, DC, bitmapDC;
hdc = GetDC(0);
DC = CreateCompatibleDC(hdc);
bitmapDC = CreateCompatibleBitmap(hdc, coord_rectangle[2], coord_rectangle[3]);
SelectObject(DC, bitmapDC);
int Select_Pen1, Select_Brush1;
int Object_Pen1, Object_Brush1;
string Text_Loading[1] = {"Image_"};
char TRIVERTEX[64];
int coord[8] = {20, 55, 280, 65, 20, 55, 280, 65};
int color[4] = {3329330, 0, 9470064, 65539};
int rect[4] = {0, 1, 2, 3};
Object_Pen1 = CreatePen(PS_INSIDEFRAME, 2, 6908265);
Object_Brush1 = CreateSolidBrush(16777215);
for(int i=0; i<=coord[2]-coord[0]; i=i+(coord[2]-coord[0])/100)
{
int percent = i/(coord[2]-coord[0])*100;
coord[4] = coord[0]+i;
for(int s=0; s<2; s++)
{
codhex(coord[s*4], #TRIVERTEX[s*32]);
codhex(coord[s*4+1], #TRIVERTEX[s*32+4]);
codhex(rvalue(color[s*2]) * 256, #TRIVERTEX[s*32+8]);
codhex(gvalue(color[s*2]) * 256, #TRIVERTEX[s*32+10]);
codhex(bvalue(color[s*2]) * 256, #TRIVERTEX[s*32+12]);
codhex(coord[s*4+2], #TRIVERTEX[s*32+16]);
codhex(coord[s*4+3], #TRIVERTEX[s*32+20]);
codhex(rvalue(color[s*2+1]) * 256, #TRIVERTEX[s*32+24]);
codhex(gvalue(color[s*2+1]) * 256, #TRIVERTEX[s*32+26]);
codhex(bvalue(color[s*2+1]) * 256, #TRIVERTEX[s*32+28]);
}
Select_Pen1 = SelectObject(DC, Object_Pen1);
Select_Brush1 = SelectObject(DC, Object_Brush1);
Rectangle(DC, 0, 0, coord_rectangle[2], coord_rectangle[3]);
SetTextColor(DC, 255);
SetBkMode(DC, 1);
TextOut(DC, 120, 10, "MY prog", 8);
TextOut(DC, 240, 70, format(percent)+"%", size(format(percent))+1);
int old_font = SelectObject (DC, font);
if (percent == 50)
{
TextOut(DC, 20, 70, "Unpack: C:\...\Temp\", size(Text_Loading[0])+20);
}
SelectObject (DC, old_font);
GradientFill(DC, address(#TRIVERTEX[0]), 4, address(#rect[0]), 2, GRADIENT_FILL_RECT_V);
if(i == 0)
{
looptime(4000)
{
AlphaBlend(hdc, coord_rectangle[0], coord_rectangle[1], coord_rectangle[2], coord_rectangle[3],
DC, 0, 0, coord_rectangle[2], coord_rectangle[3], ftn);
sleep(1);
}
}
looptime(10)
{
BitBlt(hdc, coord_rectangle[0], coord_rectangle[1], coord_rectangle[2], coord_rectangle[3], DC, 0, 0, SRCCOPY);
sleep(1);
}
if(percent == 100)
{
looptime(4000)
{
BitBlt(hdc, coord_rectangle[0], coord_rectangle[1], coord_rectangle[2], coord_rectangle[3], DC, 0, 0, SRCCOPY);
sleep(1);
}
SelectObject(DC, Select_Pen1);
SelectObject(DC, Select_Brush1);
DeleteDC(DC);
DeleteObject(bitmapDC);
ReleaseDC(0, hdc);
}
}
}
(Добавление)
Куда и как лучше всего запихать цикл, который равномерно на 100% распределяет распаковку 16 картинок? Причем полоса всегда идет равномерно: будь распаковка, то остановится полоса и когда закончит распаковку продолжит плавно.
Я высчитал. На 100% загрузки 16 картинок эт 6.25% но не знаю куда цикл поставить лучше что бы картинка не сбивалась
(Добавление)
Как это условие упростить? У голове не укладывается.CODE:if (percent == 6)
{
TextOut(DC, 20, 70, "Unpack: C:\...\Temp\Image_1", 27);
}
if (percent == 12)
{
TextOut(DC, 20, 70, "Unpack: C:\...\Temp\Image_2", 27);
}
if (percent == 18)
{
TextOut(DC, 20, 70, "Unpack: C:\...\Temp\Image_3", 27);
}
Всего percent от 6 до 96 |
|
|
Zireael |
Отправлено: 30 Августа, 2019 - 11:34:47
|
Эксперт
Покинул форум
Сообщений всего: 4466
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Как это условие упростить?
CODE:int a[3]={6, 12, 18}
string b[3]={"Image_1", "Image_2", "Image_3"}
for(int i=0; i<sizearray(a); i++)messagebox(format(a[i])+" "+b[i]); |
|
|
007wan |
Отправлено: 30 Августа, 2019 - 11:40:15
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Цитата: Как это условие упростить?
CODE:int a[3]={6, 12, 18}
string b[3]={"Image_1", "Image_2", "Image_3"}
for(int i=0; i<sizearray(a); i++)messagebox(format(a[i])+" "+b[i]);
Я не могу сапоставить с циклом, который а этом коде:
Код (Отобразить)CODE:function Set_Loading()
{
char BLENDFUNCTION[4] = {0, 0, 20, 0}
int ftn = codhexi(#BLENDFUNCTION[0], 4);
int Display_Color, Display_Width, Display_Height;
getdisplay(Display_Color, Display_Width, Display_Height);
int font = CreateFont(14, 0, 0, 0, 100, 0, 0, 0, RUSSIAN_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, CLEARTYPE_QUALITY, FF_DONTCARE, "Arial");
int coord_rectangle[4] = {Display_Width/2-160, Display_Height/2-100, 300, 130};
int hdc, DC, bitmapDC;
hdc = GetDC(0);
DC = CreateCompatibleDC(hdc);
bitmapDC = CreateCompatibleBitmap(hdc, coord_rectangle[2], coord_rectangle[3]);
SelectObject(DC, bitmapDC);
int Select_Pen1, Select_Brush1;
int Object_Pen1, Object_Brush1;
char TRIVERTEX[64];
int coord[8] = {20, 55, 280, 65, 20, 55, 280, 65};
int color[4] = {3329330, 0, 9470064, 65539};
int rect[4] = {0, 1, 2, 3};
int aa[3] = {6, 12, 18};
string bb[3] = {"Image_1", "Image_2", "Image_3"};
Object_Pen1 = CreatePen(PS_INSIDEFRAME, 2, 6908265);
Object_Brush1 = CreateSolidBrush(16777215);
for(int i=0; i<=coord[2]-coord[0]; i=i+(coord[2]-coord[0])/100)
{
int percent = i/(coord[2]-coord[0])*100;
coord[4] = coord[0]+i;
for(int s=0; s<2; s++)
{
codhex(coord[s*4], #TRIVERTEX[s*32]);
codhex(coord[s*4+1], #TRIVERTEX[s*32+4]);
codhex(rvalue(color[s*2]) * 256, #TRIVERTEX[s*32+8]);
codhex(gvalue(color[s*2]) * 256, #TRIVERTEX[s*32+10]);
codhex(bvalue(color[s*2]) * 256, #TRIVERTEX[s*32+12]);
codhex(coord[s*4+2], #TRIVERTEX[s*32+16]);
codhex(coord[s*4+3], #TRIVERTEX[s*32+20]);
codhex(rvalue(color[s*2+1]) * 256, #TRIVERTEX[s*32+24]);
codhex(gvalue(color[s*2+1]) * 256, #TRIVERTEX[s*32+26]);
codhex(bvalue(color[s*2+1]) * 256, #TRIVERTEX[s*32+28]);
}
Select_Pen1 = SelectObject(DC, Object_Pen1);
Select_Brush1 = SelectObject(DC, Object_Brush1);
Rectangle(DC, 0, 0, coord_rectangle[2], coord_rectangle[3]);
SetTextColor(DC, 255);
SetBkMode(DC, 1);
TextOut(DC, 120, 10, "K2019Bot", 8);
TextOut(DC, 240, 70, format(percent)+"%", size(format(percent))+1);
int old_font = SelectObject (DC, font);
for(int ii=0; ii<sizearray(aa); ii++)
{
messagebox(format(aa[ii])+" "+bb[ii]);
}
//TextOut(DC, 20, 70, "Unpack: C:\...\Temp\Image_1", 27);
SelectObject (DC, old_font);
GradientFill(DC, address(#TRIVERTEX[0]), 4, address(#rect[0]), 2, GRADIENT_FILL_RECT_V);
if(i == 0)
{
looptime(4000)
{
AlphaBlend(hdc, coord_rectangle[0], coord_rectangle[1], coord_rectangle[2], coord_rectangle[3],
DC, 0, 0, coord_rectangle[2], coord_rectangle[3], ftn);
sleep(1);
}
}
looptime(10)
{
BitBlt(hdc, coord_rectangle[0], coord_rectangle[1], coord_rectangle[2], coord_rectangle[3], DC, 0, 0, SRCCOPY);
sleep(1);
}
if(percent == 100)
{
looptime(4000)
{
BitBlt(hdc, coord_rectangle[0], coord_rectangle[1], coord_rectangle[2], coord_rectangle[3], DC, 0, 0, SRCCOPY);
sleep(1);
}
SelectObject(DC, Select_Pen1);
SelectObject(DC, Select_Brush1);
DeleteDC(DC);
DeleteObject(bitmapDC);
ReleaseDC(0, hdc);
}
}
}
(Добавление)
ОН сначала грузит 0% потом повторяет цикл 6,12, 18, а потом уже снова 1% и так далее
(Добавление)
Как сделать цикл через for:
если percent == 6, то показать messagebox(0);,
если percent == 12, то messagebox(1);
если percent == 18, то messagebox(2);
если percent == 24, то messagebox(3);
если percent == 30, то messagebox(4);
если percent == 36, то messagebox(5);
если percent == 42, то messagebox(6);
если percent == 48, то messagebox(7);
если percent == 54, то messagebox(8);
если percent == 60, то messagebox(9);
если percent == 66, то messagebox(10);
если percent == 72, то messagebox(11);
если percent == 78, то messagebox(12);
если percent == 84, то messagebox(13);
если percent == 90, то messagebox(14);
если percent == 96, то messagebox(15);
(Добавление)
Причем совместно с циклом CODE:for(int i=0; i<=coord[2]-coord[0]; i=i+(coord[2]-coord[0])/100)
{
int percent = i/(coord[2]-coord[0])*100;
coord[4] = coord[0]+i;
for(int s=0; s<2; s++)
{ Который ваше код |
|
|
Zireael |
Отправлено: 30 Августа, 2019 - 12:19:20
|
Эксперт
Покинул форум
Сообщений всего: 4466
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Как сделать цикл через for:
если percent == 6, то показать messagebox(0);,
После строки:
Цитата: int percent = i/(coord[2]-coord[0])*100;
Дописать нужное условие. |
|
|
007wan |
Отправлено: 30 Августа, 2019 - 12:30:39
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Цитата: Как сделать цикл через for:
если percent == 6, то показать messagebox(0);,
После строки:
Цитата: int percent = i/(coord[2]-coord[0])*100;
Дописать нужное условие.
Ты имеешь ввиду:
CODE:if (percent == 6){//выполнить код} У меня всего 16 изобраений, если 100/16, то нужно примерно по 6% что бы каждую распаковывал, а тогда мне нужно этих условий 16 раз прописать, а если у меня к примеру 100 изображений и на каждую картинку по 1%. Всего написать нужно будет 100 условий таких if |
|
|
007wan |
Отправлено: 30 Августа, 2019 - 12:56:53
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Цитата: а если у меня к примеру 100 изображений и на каждую картинку по 1%. Всего написать нужно будет 100 условий таких if
Можно и 100, но лучше бы просто разобраться с циклами и массивами. Не чего разбирать. Всё будет такой же просто в более проще по инициализации переменных, но if не пропадут и через for их никак не сделать. Надо в момент когда будет процент 6,12,18 итд нужно как-то выходить из цикла, я пробовал return и не помогло.
(Добавление)
007wan пишет: я пробовал return и не помогло. Он выходит из всех циклов for |
|
|
007wan |
Отправлено: 30 Августа, 2019 - 13:00:42
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Цитата: нужно как-то выходить из цикла
break - Прерывание циклов loop, looptime, while и for
Ёшкин кот. Блин. Забыл. Похоже я начал всё забывать.
(Добавление)
Фух я смог. Мозги все перегрелись)
CODE:
int num = 6;//вынести за пределы ранее циклов for, а то она будет обнуляться.
for (int g=percent; g>=num; g++)//Если проценты равны 6, 12, 18...Вывести диалог с процентами
{
num = num+6;
messagebox(percent);
break;
}
(Добавление)
Или
CODE:
int images = 16;//количество избображений
int num = 100/images;//округлит до 6
for (int g=percent; g>=num; g++)//100/16=каждые 6,25 будет распаковывать 1 изображение.
{
num = num+6;
messagebox(percent);
break;
}
(Добавление)
А если еще
Цитата: for (int g=percent; g>=num; g++)
{
num = num+6;
messagebox(percent/6);
break;
} То легко можно подставить изображений свои и дать и нумерацию, например, Image_ и в цикле вывести и указать + format(percent/6)
(Добавление)
В итоге будет каждые 6% распаковывать 1 изображение и выводить Image_+format(percent/6) |
|
|
|