Помогите сделать,прелоадер по середине диалога без рамки диалога с фоном диалога , но прелоадер имеет линейный тип и от 0 до 100 значение. Имеет фон пустой и тусклый в местах, где нету линии прелоадера,а сама линия яркая и градиентовая., текст от прелоадера внизу влевом углу загрузки,а проценты вверху права, пожалуйста. Представления имею с чего начать,а рисовать не умею.
Преловдер это по суть линия и прибавляются к ней пиксели или растяжка изображения вправа. Если можно, то через external.
(Добавление)
Извиняюсь. С телефона пишу заошибки
1. 007wan - 14 Августа, 2019 - 12:45:34 - перейти к сообщению
2. Zireael - 14 Августа, 2019 - 18:03:19 - перейти к сообщению
CODE:
#define WS_CHILD 1073741824
#define WS_VISIBLE 268435456
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "SetWindowText", "SetWindowTextA", "User32.dll");
int image[200][20], image2[200][20];
initialarray(#image[0][0], 65280); // зелёный
initialarray(#image2[0][0], 255); // красный
win dialog;
int static, percent;
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 100, 1, 1);
for(int i=0; i<sizearray(image); i++)
{
visualwindow(dialog, 0, 0, 0, i, sizearray(image[]), 10, 10, 100, #image[0][0]);
visualwindow(dialog, 1, 0, 0, sizearray(image2)-i, sizearray(image2[]), 10+i, 10, 100, #image2[0][0]);
percent=i/2;
SetWindowText(static, format(percent));
sleep(5);
}
function getmessage(0, WM_CREATE)
{
dialog=formatiw(gethwnd(0));
static=CreateWindow(0, "STATIC", "", WS_CHILD | WS_VISIBLE, 100, 30, 50, 20, gethwnd(0), 0, 0, 0); // текст
}
#define WS_VISIBLE 268435456
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "SetWindowText", "SetWindowTextA", "User32.dll");
int image[200][20], image2[200][20];
initialarray(#image[0][0], 65280); // зелёный
initialarray(#image2[0][0], 255); // красный
win dialog;
int static, percent;
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 100, 1, 1);
for(int i=0; i<sizearray(image); i++)
{
visualwindow(dialog, 0, 0, 0, i, sizearray(image[]), 10, 10, 100, #image[0][0]);
visualwindow(dialog, 1, 0, 0, sizearray(image2)-i, sizearray(image2[]), 10+i, 10, 100, #image2[0][0]);
percent=i/2;
SetWindowText(static, format(percent));
sleep(5);
}
function getmessage(0, WM_CREATE)
{
dialog=formatiw(gethwnd(0));
static=CreateWindow(0, "STATIC", "", WS_CHILD | WS_VISIBLE, 100, 30, 50, 20, gethwnd(0), 0, 0, 0); // текст
}
3. 007wan - 14 Августа, 2019 - 23:28:27 - перейти к сообщению
А как рисовать градиенты? Использовать оттенки разных цветов в линию, что бы получить градиент? Или загрузить изображение? Или есть программно уже типа CreateGradiend
(Добавление)(для просмотра ссылки Вам необходимо авторизоваться) Каша одна...
(Добавление)(для просмотра ссылки Вам необходимо авторизоваться) Каша одна...
4. 007wan - 15 Августа, 2019 - 03:27:06 - перейти к сообщению
Zireael пишет:
CODE:
#define WS_CHILD 1073741824
#define WS_VISIBLE 268435456
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "SetWindowText", "SetWindowTextA", "User32.dll");
int image[200][20], image2[200][20];
initialarray(#image[0][0], 65280); // зелёный
initialarray(#image2[0][0], 255); // красный
win dialog;
int static, percent;
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 100, 1, 1);
for(int i=0; i<sizearray(image); i++)
{
visualwindow(dialog, 0, 0, 0, i, sizearray(image[]), 10, 10, 100, #image[0][0]);
visualwindow(dialog, 1, 0, 0, sizearray(image2)-i, sizearray(image2[]), 10+i, 10, 100, #image2[0][0]);
percent=i/2;
SetWindowText(static, format(percent));
sleep(5);
}
function getmessage(0, WM_CREATE)
{
dialog=formatiw(gethwnd(0));
static=CreateWindow(0, "STATIC", "", WS_CHILD | WS_VISIBLE, 100, 30, 50, 20, gethwnd(0), 0, 0, 0); // текст
}
#define WS_VISIBLE 268435456
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "SetWindowText", "SetWindowTextA", "User32.dll");
int image[200][20], image2[200][20];
initialarray(#image[0][0], 65280); // зелёный
initialarray(#image2[0][0], 255); // красный
win dialog;
int static, percent;
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 100, 1, 1);
for(int i=0; i<sizearray(image); i++)
{
visualwindow(dialog, 0, 0, 0, i, sizearray(image[]), 10, 10, 100, #image[0][0]);
visualwindow(dialog, 1, 0, 0, sizearray(image2)-i, sizearray(image2[]), 10+i, 10, 100, #image2[0][0]);
percent=i/2;
SetWindowText(static, format(percent));
sleep(5);
}
function getmessage(0, WM_CREATE)
{
dialog=formatiw(gethwnd(0));
static=CreateWindow(0, "STATIC", "", WS_CHILD | WS_VISIBLE, 100, 30, 50, 20, gethwnd(0), 0, 0, 0); // текст
}
Как переделать его, что бы не было for,а что бы был принцип такой:
-Вставляем строчку кода куда угодно, например "SetPreloader(50)"
Это передает в функцию и получается ползунок на 50% и так можно много раз 10, 20, 30, хоть 100 и снова 10 откатить прелоадер
(Добавление)
CODE:
function SetStatusBar(int a)
{
for(int i=a; i<sizearray(image); i++)
{
visualwindow(dialog, 0, 0, 0, i, sizearray(image[]), 10, 70, 100, #image[0][0]);
visualwindow(dialog, 1, 0, 0, sizearray(image2)-i, sizearray(image2[]), 10+i, 70, 100, #image2[0][0]);
percent=i/2;
SetWindowText(static, format(percent)+"%");
sleep(5);
}
}
SetStatusBar(50);
//sleep(5000);
Куда добавить?function SetStatusBar(int a)
{
for(int i=a; i<sizearray(image); i++)
{
visualwindow(dialog, 0, 0, 0, i, sizearray(image[]), 10, 70, 100, #image[0][0]);
visualwindow(dialog, 1, 0, 0, sizearray(image2)-i, sizearray(image2[]), 10+i, 70, 100, #image2[0][0]);
percent=i/2;
SetWindowText(static, format(percent)+"%");
sleep(5);
}
}
SetStatusBar(50);
//sleep(5000);
(Добавление)
Вот сделал.
CODE:
function SetStatusBar(int a)
{
visualwindow(dialog, 0, 0, 0, a, sizearray(image[]), 10, 70, 100, #image[0][0]);
visualwindow(dialog, 1, 0, 0, sizearray(image2)-a, sizearray(image2[]), 10+a, 70, 100, #image2[0][0]);
percent=a/2;
SetWindowText(static, format(percent)+"%");
sleep(5);
}
SetStatusBar(50);
sleep(5000);
SetStatusBar(100);
sleep(5000);
SetStatusBar(150);
sleep(5000);
SetStatusBar(200);
{
visualwindow(dialog, 0, 0, 0, a, sizearray(image[]), 10, 70, 100, #image[0][0]);
visualwindow(dialog, 1, 0, 0, sizearray(image2)-a, sizearray(image2[]), 10+a, 70, 100, #image2[0][0]);
percent=a/2;
SetWindowText(static, format(percent)+"%");
sleep(5);
}
SetStatusBar(50);
sleep(5000);
SetStatusBar(100);
sleep(5000);
SetStatusBar(150);
sleep(5000);
SetStatusBar(200);
(Добавление)
А как сделать тоже самое только без диалога, но с фоном диалога и что бы фон этого загрузчика появился не резко, а плавно.
Код (Отобразить)
(Добавление)
Вот например при установке хрома, мазилы появляется прямоугольник перед запуском, а потом сама установка.
(Добавление)
Дальше я попробую добавить градиент на полосу загрузки активной и статической тусклой части, потом фон диалога и я отдам код обратно, может кому-то такое нужно будет.
5. 007wan - 15 Августа, 2019 - 08:57:06 - перейти к сообщению
Как создать градиентовую линию, не прибегая к изображения и наложению линий на линию в разных цветов, а только использую вин апи функции(хотя почти тоже самое)
6. Zireael - 15 Августа, 2019 - 18:11:02 - перейти к сообщению
Цитата:
Как создать градиентовую линию
CODE:
#define GRADIENT_FILL_RECT_H 0
external(INT, "GetDC", "GetDC", "User32.dll");
external(INT, "GradientFill", "GradientFill", "Msimg32.dll" );
int hdc=GetDC(0);
char TRIVERTEX[32]; // структура TRIVERTEX
int coord[4]={200, 300, 500, 330} // координаты
int color[2]={65280, 255} // цвета (зелёный, красный)
int rect[2]={0, 1}
fill_structure(#TRIVERTEX[0], #coord[0], #color[0]); // заполнение структуры TRIVERTEX
loop()
{
GradientFill(hdc, address(#TRIVERTEX[0]), 2, address(#rect[0]), 1, GRADIENT_FILL_RECT_H); // рисование
sleep(10);
}
function fill_structure(char #Vertex, int #pos, int #c)
{
codhex(pos[0], #Vertex[0]);
codhex(pos[1], #Vertex[4]);
codhex(rvalue(c[0]) * 256, #Vertex[8]);
codhex(gvalue(c[0]) * 256, #Vertex[10]);
codhex(bvalue(c[0]) * 256, #Vertex[12]);
codhex(pos[2], #Vertex[16]);
codhex(pos[3], #Vertex[20]);
codhex(rvalue(c[1]) * 256, #Vertex[24]);
codhex(gvalue(c[1]) * 256, #Vertex[26]);
codhex(bvalue(c[1]) * 256, #Vertex[28]);
}
external(INT, "GetDC", "GetDC", "User32.dll");
external(INT, "GradientFill", "GradientFill", "Msimg32.dll" );
int hdc=GetDC(0);
char TRIVERTEX[32]; // структура TRIVERTEX
int coord[4]={200, 300, 500, 330} // координаты
int color[2]={65280, 255} // цвета (зелёный, красный)
int rect[2]={0, 1}
fill_structure(#TRIVERTEX[0], #coord[0], #color[0]); // заполнение структуры TRIVERTEX
loop()
{
GradientFill(hdc, address(#TRIVERTEX[0]), 2, address(#rect[0]), 1, GRADIENT_FILL_RECT_H); // рисование
sleep(10);
}
function fill_structure(char #Vertex, int #pos, int #c)
{
codhex(pos[0], #Vertex[0]);
codhex(pos[1], #Vertex[4]);
codhex(rvalue(c[0]) * 256, #Vertex[8]);
codhex(gvalue(c[0]) * 256, #Vertex[10]);
codhex(bvalue(c[0]) * 256, #Vertex[12]);
codhex(pos[2], #Vertex[16]);
codhex(pos[3], #Vertex[20]);
codhex(rvalue(c[1]) * 256, #Vertex[24]);
codhex(gvalue(c[1]) * 256, #Vertex[26]);
codhex(bvalue(c[1]) * 256, #Vertex[28]);
}
(Добавление)
CODE:
#define GRADIENT_FILL_RECT_H 0
external(INT, "GetDC", "GetDC", "User32.dll");
external(INT, "ReleaseDC", "ReleaseDC", "User32.dll");
external(INT, "GradientFill", "GradientFill", "Msimg32.dll" );
int hdc=GetDC(0);
char TRIVERTEX[64]; // структура TRIVERTEX
int coord[8]={200, 300, 700, 330, 200, 300, 700, 330} // координаты
int color[4]={180, 255, 0, 100} // цвета
int rect[4]={0, 1, 2, 3}
for(int i=0; i<=coord[2]-coord[0]; i=i+(coord[2]-coord[0])/10)
{
coord[4]=coord[0]+i;
fill_structure(#TRIVERTEX[0], #coord[0], #color[0]);
GradientFill(hdc, address(#TRIVERTEX[0]), 4, address(#rect[0]), 2, GRADIENT_FILL_RECT_H); // рисование
sleep(350);
}
ReleaseDC(0, hdc);
function fill_structure(char #Vertex, int #pos, int #c)
{
for(int i=0; i<2; i++)
{
codhex(pos[i*4], #Vertex[i*32]);
codhex(pos[i*4+1], #Vertex[i*32+4]);
codhex(rvalue(c[i*2]) * 256, #Vertex[i*32+8]);
codhex(gvalue(c[i*2]) * 256, #Vertex[i*32+10]);
codhex(bvalue(c[i*2]) * 256, #Vertex[i*32+12]);
codhex(pos[i*4+2], #Vertex[i*32+16]);
codhex(pos[i*4+3], #Vertex[i*32+20]);
codhex(rvalue(c[i*2+1]) * 256, #Vertex[i*32+24]);
codhex(gvalue(c[i*2+1]) * 256, #Vertex[i*32+26]);
codhex(bvalue(c[i*2+1]) * 256, #Vertex[i*32+28]);
}
}
external(INT, "GetDC", "GetDC", "User32.dll");
external(INT, "ReleaseDC", "ReleaseDC", "User32.dll");
external(INT, "GradientFill", "GradientFill", "Msimg32.dll" );
int hdc=GetDC(0);
char TRIVERTEX[64]; // структура TRIVERTEX
int coord[8]={200, 300, 700, 330, 200, 300, 700, 330} // координаты
int color[4]={180, 255, 0, 100} // цвета
int rect[4]={0, 1, 2, 3}
for(int i=0; i<=coord[2]-coord[0]; i=i+(coord[2]-coord[0])/10)
{
coord[4]=coord[0]+i;
fill_structure(#TRIVERTEX[0], #coord[0], #color[0]);
GradientFill(hdc, address(#TRIVERTEX[0]), 4, address(#rect[0]), 2, GRADIENT_FILL_RECT_H); // рисование
sleep(350);
}
ReleaseDC(0, hdc);
function fill_structure(char #Vertex, int #pos, int #c)
{
for(int i=0; i<2; i++)
{
codhex(pos[i*4], #Vertex[i*32]);
codhex(pos[i*4+1], #Vertex[i*32+4]);
codhex(rvalue(c[i*2]) * 256, #Vertex[i*32+8]);
codhex(gvalue(c[i*2]) * 256, #Vertex[i*32+10]);
codhex(bvalue(c[i*2]) * 256, #Vertex[i*32+12]);
codhex(pos[i*4+2], #Vertex[i*32+16]);
codhex(pos[i*4+3], #Vertex[i*32+20]);
codhex(rvalue(c[i*2+1]) * 256, #Vertex[i*32+24]);
codhex(gvalue(c[i*2+1]) * 256, #Vertex[i*32+26]);
codhex(bvalue(c[i*2+1]) * 256, #Vertex[i*32+28]);
}
}
7. 007wan - 16 Августа, 2019 - 00:14:09 - перейти к сообщению
А как сделать вертикальный градиаент, т.е вверху один цвет, а внизу другой и Для линии загрузки, которая двигается в право яркий цвет, а так, которая стоит на месте тусклый и серый.(нУ последнее я могу сам))
(Добавление)
Похожу GRADIENT_FILL_RECT_V
(Добавление)
Спасибо
(Добавление)
Zireael ,
А где тут Икс игрек и высота и ширина? А то я методом прибавления и отнятия не смог вычислить, у меня прячмоугольник какой-то странный становится.
(Добавление)
А как уменьшить количество пикселей при переходе ползунка вправо на 1 %, что бы обеспечить плавность его работы не скачки резко, и что бы не повлияло это на размеры(высота и ширина)
(Добавление)
Похожу GRADIENT_FILL_RECT_V
(Добавление)
Спасибо
(Добавление)
Zireael ,
CODE:
int coord[8]={200, 300, 700, 330, 200, 300, 700, 330} // êîîðäèíàòû
А где тут Икс игрек и высота и ширина? А то я методом прибавления и отнятия не смог вычислить, у меня прячмоугольник какой-то странный становится.
(Добавление)
А как уменьшить количество пикселей при переходе ползунка вправо на 1 %, что бы обеспечить плавность его работы не скачки резко, и что бы не повлияло это на размеры(высота и ширина)
CODE:
#define GRADIENT_FILL_RECT_H 0
#define GRADIENT_FILL_RECT_V 1
external(INT, "GetDC", "GetDC", "User32.dll");
external(INT, "ReleaseDC", "ReleaseDC", "User32.dll");
external(INT, "GradientFill", "GradientFill", "Msimg32.dll" );
int hdc=GetDC(0);
char TRIVERTEX[64]; // структура TRIVERTEX
int coord[8]={200, 300, 700, 330, 200, 300, 700, 330} // координаты
int color[4]={3329330, 0, 9470064, 65539} // цвета
int rect[4]={0, 1, 2, 3}
for(int i=0; i<=coord[2]-coord[0]; i=i+(coord[2]-coord[0])/100)
{
textout(0, 0, 0, format(i/5), 1);
coord[4]=coord[0]+i;
fill_structure(#TRIVERTEX[0], #coord[0], #color[0]);
GradientFill(hdc, address(#TRIVERTEX[0]), 4, address(#rect[0]), 2, GRADIENT_FILL_RECT_V); // рисование
sleep(350);
}
ReleaseDC(0, hdc);
function fill_structure(char #Vertex, int #pos, int #c)
{
for(int i=0; i<2; i++)
{
codhex(pos[i*4], #Vertex[i*32]);
codhex(pos[i*4+1], #Vertex[i*32+4]);
codhex(rvalue(c[i*2]) * 256, #Vertex[i*32+8]);
codhex(gvalue(c[i*2]) * 256, #Vertex[i*32+10]);
codhex(bvalue(c[i*2]) * 256, #Vertex[i*32+12]);
codhex(pos[i*4+2], #Vertex[i*32+16]);
codhex(pos[i*4+3], #Vertex[i*32+20]);
codhex(rvalue(c[i*2+1]) * 256, #Vertex[i*32+24]);
codhex(gvalue(c[i*2+1]) * 256, #Vertex[i*32+26]);
codhex(bvalue(c[i*2+1]) * 256, #Vertex[i*32+28]);
}
}
#define GRADIENT_FILL_RECT_V 1
external(INT, "GetDC", "GetDC", "User32.dll");
external(INT, "ReleaseDC", "ReleaseDC", "User32.dll");
external(INT, "GradientFill", "GradientFill", "Msimg32.dll" );
int hdc=GetDC(0);
char TRIVERTEX[64]; // структура TRIVERTEX
int coord[8]={200, 300, 700, 330, 200, 300, 700, 330} // координаты
int color[4]={3329330, 0, 9470064, 65539} // цвета
int rect[4]={0, 1, 2, 3}
for(int i=0; i<=coord[2]-coord[0]; i=i+(coord[2]-coord[0])/100)
{
textout(0, 0, 0, format(i/5), 1);
coord[4]=coord[0]+i;
fill_structure(#TRIVERTEX[0], #coord[0], #color[0]);
GradientFill(hdc, address(#TRIVERTEX[0]), 4, address(#rect[0]), 2, GRADIENT_FILL_RECT_V); // рисование
sleep(350);
}
ReleaseDC(0, hdc);
function fill_structure(char #Vertex, int #pos, int #c)
{
for(int i=0; i<2; i++)
{
codhex(pos[i*4], #Vertex[i*32]);
codhex(pos[i*4+1], #Vertex[i*32+4]);
codhex(rvalue(c[i*2]) * 256, #Vertex[i*32+8]);
codhex(gvalue(c[i*2]) * 256, #Vertex[i*32+10]);
codhex(bvalue(c[i*2]) * 256, #Vertex[i*32+12]);
codhex(pos[i*4+2], #Vertex[i*32+16]);
codhex(pos[i*4+3], #Vertex[i*32+20]);
codhex(rvalue(c[i*2+1]) * 256, #Vertex[i*32+24]);
codhex(gvalue(c[i*2+1]) * 256, #Vertex[i*32+26]);
codhex(bvalue(c[i*2+1]) * 256, #Vertex[i*32+28]);
}
}
8. Zireael - 16 Августа, 2019 - 02:29:44 - перейти к сообщению
Цитата:
int coord[8]={200, 300, 700, 330, 200, 300, 700, 330}
А где тут Икс игрек и высота и ширина?
А где тут Икс игрек и высота и ширина?
200, 300 - левый верхний угол прямоугольника.
700, 330 - правый нижний.
9. 007wan - 16 Августа, 2019 - 19:49:26 - перейти к сообщению
А как сделать эффект появления прямоугольника и всего,что в нем плавным появлением? Думаю,если будет это,то я смогу сделать обратное - исчезание.
10. 007wan - 17 Августа, 2019 - 03:14:03 - перейти к сообщению
У меня есть пару идей как это реализовать:
Первый: Использовать снимок экрана в прямоугольной области как размер прямоугольника статус бара(который белый прямоугольник), после снимка экрана в центре экрана небольшого прямоугольника, загружает его в Кибор и в папку с программой, далее меняет постепенно фон картинки в белый, но есть изъян: В момент изменения цвета и вывод картинки с меняющимся фоном может поменяться фон рабочего стола или открыта программа какая-то, что сделает картинку фоном рабчоего стола и оттенком белого цвета и будет не очень.
Второй: Тоже самое, но начальное будет визуальное окно, которое будет отображать рабочий стол или всё, что в центре прямоугольника меняется, а поверх накладывать изображение с прозрачностью.
Третий: вывести изображение и начальная прозрачность его будет 100%, а потом потепенно прибавляться.
Хочу заметить, что я не видел в win api функций для смены прозрачности элементом(прямоугольников, квадратов, линий...).
(Добавление)
Мне нужно именно использовать прозрачность как поноценную функцию, а не просто "продырявить" прямоугольник, мне нужно регулировать его состояние, например, поставить прозрачность 50% для Rectangle
(Добавление)
Нашел это, но не уверен, что знаю как использовать:
GdiTransparentBlt
(Добавление)
Что я использую не так?
Первый: Использовать снимок экрана в прямоугольной области как размер прямоугольника статус бара(который белый прямоугольник), после снимка экрана в центре экрана небольшого прямоугольника, загружает его в Кибор и в папку с программой, далее меняет постепенно фон картинки в белый, но есть изъян: В момент изменения цвета и вывод картинки с меняющимся фоном может поменяться фон рабочего стола или открыта программа какая-то, что сделает картинку фоном рабчоего стола и оттенком белого цвета и будет не очень.
Второй: Тоже самое, но начальное будет визуальное окно, которое будет отображать рабочий стол или всё, что в центре прямоугольника меняется, а поверх накладывать изображение с прозрачностью.
Третий: вывести изображение и начальная прозрачность его будет 100%, а потом потепенно прибавляться.
Хочу заметить, что я не видел в win api функций для смены прозрачности элементом(прямоугольников, квадратов, линий...).
(Добавление)
Мне нужно именно использовать прозрачность как поноценную функцию, а не просто "продырявить" прямоугольник, мне нужно регулировать его состояние, например, поставить прозрачность 50% для Rectangle
(Добавление)
Нашел это, но не уверен, что знаю как использовать:
GdiTransparentBlt
(Добавление)
Что я использую не так?
CODE:
GdiTransparentBlt(DC, Display_Width/2-130, Display_Height/2-100, 300, 130, DC, Display_Width/2-130, Display_Height/2-100, 300, 130, 6908265);