Zireael |
Отправлено: 06 Февраля, 2019 - 13:01:37
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: сделать кнопку с скруглёнными краями
Выводить статик в виде картинки. При нажатии на него выводить другую картинку кнопки, чтобы была видимость анимации нажатия.
https://ibb.co/DLxwgBn
Архив с картинками кнопок, закинуть на диск C:\. Углы картинок закрашены в цвет диалога.
Статик в виде кнопки (Отобразить)CODE:#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define SS_BITMAP 14
#define SS_NOTIFY 256
#define STM_SETIMAGE 370
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "LoadImage", "LoadImageA", "User32.dll");
int static;
int image1=LoadImage(0, "C:\222.bmp", 0, 129, 45, 16); // загрузка картинки 129*45
int image2=LoadImage(0, "C:\333.bmp", 0, 132, 49, 16); // загрузка картинки 132, 49
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 150, 1, 1);
loop()sleep(1);
function getmessage(0, WM_CREATE)
{
static=CreateWindow(0, "STATIC", "", SS_NOTIFY | SS_BITMAP | WS_CHILD | WS_VISIBLE, 20, 10, 132, 49, gethwnd(0), 0, 0, 0);
sendmessage(STM_SETIMAGE, 0, image1, formatiw(static)); // установить изображение image1
}
function getmessage(0, WM_COMMAND)
{
if (message.lparam==static) // если нажата кнопка
{
sendmessage(STM_SETIMAGE, 0, image2, formatiw(static)); // установить изображение image2
while(getkeystate(1))sleep(1); // ждать пока кнопка мыши нажата
sendmessage(STM_SETIMAGE, 0, image1, formatiw(static)); // установить изображение image1
messagebox("Нажата");
}
} |
|
|
Zireael |
Отправлено: 07 Февраля, 2019 - 14:11:52
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Textout на диалоге (Отобразить)CODE:#define RUSSIAN_CHARSET 204
#define OUT_DEFAULT_PRECIS 0
#define CLEARTYPE_QUALITY 5
#define FF_DONTCARE 0
#define CLIP_DEFAULT_PRECIS 0
external(INT, "GetDC", "GetDC", "User32.dll" );
external(INT, "SelectObject", "SelectObject", "Gdi32.dll" );
external(INT, "CreateFont", "CreateFontA", "Gdi32.dll" );
external(INT, "TextOut", "TextOutA", "Gdi32.dll" );
external(INT, "SetTextColor", "SetTextColor", "Gdi32.dll" );
external(INT, "SetBkMode", "SetBkMode", "Gdi32.dll" );
int font1, font2, font3;
createdialog(0);
showdialog(0, "Диалог", 100, 100, 300, 300, 1, 1);
char a[99], b[99], c[99];
strcpy(#a[0], "Текст");
strcpy(#b[0], "Курсив");
strcpy(#c[0], "Подчёркнутый");
int hdc=GetDC(gethwnd(0));
text(hdc, 20, 20, font1, 255, #a[0], size(#a[0])); // вывод текста
text(hdc, 20, 50, font2, 6006303, #b[0], size(#b[0]));
text(hdc, 20, 80, font3, 13734242, #c[0], size(#c[0]));
loop()
{
sleep(1);
}
function getmessage(0, WM_CREATE)
{
// создание шрифтов
font1 = CreateFont(24, 0, 0, 0, 700, 0, 0, 0, RUSSIAN_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, CLEARTYPE_QUALITY, FF_DONTCARE, "Arial");
font2 = CreateFont(32, 0, 0, 0, 400, 1, 0, 0, RUSSIAN_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, CLEARTYPE_QUALITY, FF_DONTCARE, "Arial");
font3 = CreateFont(36, 0, 0, 0, 500, 0, 1, 0, RUSSIAN_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, CLEARTYPE_QUALITY, FF_DONTCARE, "Arial");
}
// принимает: hdc, координата X, координата Y, шрифт, цвет текста, указатель на массив с текстом, длина текста
function text(int HDC, int X, int Y, int FONT, int COLOR, char #array, int size_array)
{
SelectObject (HDC, FONT);
SetBkMode(HDC, 0);
SetTextColor(HDC, COLOR);
TextOut(HDC, X, Y, address(#array[0]), size_array);
}
|
|
|
Zireael |
Отправлено: 10 Февраля, 2019 - 15:27:10
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Пример рисования на диалоге, часы (Отобразить)CODE:#define RUSSIAN_CHARSET 204
#define OUT_DEFAULT_PRECIS 0
#define CLEARTYPE_QUALITY 5
#define FF_DONTCARE 0
#define CLIP_DEFAULT_PRECIS 0
#define PS_SOLID 0
#define PS_NULL 5
#define SRCCOPY 13369376
external(INT, "GetDC", "GetDC", "User32.dll" );
external(INT, "CreatePen", "CreatePen", "Gdi32.dll" );
external(INT, "CreateSolidBrush", "CreateSolidBrush", "Gdi32.dll" );
external(INT, "SelectObject", "SelectObject", "Gdi32.dll" );
external(INT, "Ellipse", "Ellipse", "Gdi32.dll" );
external(INT, "Rectangle", "Rectangle", "Gdi32.dll" );
external(INT, "MoveToEx", "MoveToEx", "Gdi32.dll" );
external(INT, "LineTo", "LineTo", "Gdi32.dll" );
external(INT, "CreateFont", "CreateFontA", "Gdi32.dll" );
external(INT, "TextOut", "TextOutA", "Gdi32.dll" );
external(INT, "SetTextColor", "SetTextColor", "Gdi32.dll" );
external(INT, "SetBkMode", "SetBkMode", "Gdi32.dll" );
external(INT, "CreateCompatibleDC", "CreateCompatibleDC", "Gdi32.dll" );
external(INT, "CreateCompatibleBitmap", "CreateCompatibleBitmap", "Gdi32.dll" );
external(INT, "BitBlt", "BitBlt", "Gdi32.dll" );
external(INT, "GetTextExtentPoint32", "GetTextExtentPoint32A", "Gdi32.dll" );
createdialog(0);
showdialog(0, "Диалог", 250, 250, 300, 300, 1, 1);
int Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds;
int i, x, y, font1, font2;
int hdc_dialog=GetDC(gethwnd(0)); // дескриптор контекста
int hdc=CreateCompatibleDC(hdc_dialog); // контекст в памяти
int hdc_bitmap=CreateCompatibleBitmap(hdc_dialog, 300, 300); // изображение в памяти
SelectObject(hdc, hdc_bitmap);
int brush_fill=CreateSolidBrush(3729028); // кисть чтоб заполнить зелёный круг
int brush_point=CreateSolidBrush(16148371); // цвет точек
int brush_fon=CreateSolidBrush(16769966); // цвет фона
int pen0=CreatePen(PS_NULL, 0, 0); // невидимый контур
int pen1=CreatePen(PS_SOLID, 5, 1280747); // контур круга
int pen2=CreatePen(PS_SOLID, 3, 16148371); // маленькие и большие точки
int pen3=CreatePen(PS_SOLID, 2, 3074545); // секундная стрелка
int pen4=CreatePen(PS_SOLID, 4, 16148371); // минутная стрелка
int pen5=CreatePen(PS_SOLID, 6, 1376392); // часовая стрелка
char number[3], time[9];
string t;
int num[12]={1,2,3,4,5,6,7,8,9,10,11,12}; // цифры
int size_rect[2]; // ширина и высота строки textout
int pos_x_text=20, pos_y_text=235; // позиция вывода времени
int star[22]={0,14,14,14,20,0,25,14,40,14,28,25,32,36,20,28,8,36,13,24,0,14}; // звезда
int pos_x_clock=125, pos_y_clock=125; // позиция часов
// координаты точек
int pos_x_point[60], pos_y_point[60];
int pos_x_point2[12], pos_y_point2[12];
int tmp=0;
for(i=0; i<360; i=i+6){pos_x_point[tmp]=pos_x_clock + 100 * cos(i); pos_y_point[tmp]=pos_y_clock + 100 * sin(i); tmp++;}tmp=0;
for(i=0; i<360; i=i+30){pos_x_point2[tmp]=pos_x_clock + 100 * cos(i); pos_y_point2[tmp]=pos_y_clock + 100 * sin(i); tmp++;}tmp=0;
// координаты цифр
int pos_x[12], pos_y[12];
for(i=-60; i<300; i=i+30){pos_x[tmp]=pos_x_clock + 87 * cos(i) - 6; pos_y[tmp]=pos_y_clock + 87 * sin(i) - 9; tmp++;}
enabletimer(0);
loop()sleep(10);
function getmessage(0, WM_CREATE)
{
font1 = CreateFont(20, 0, 0, 0, 700, 0, 0, 0, RUSSIAN_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, CLEARTYPE_QUALITY, FF_DONTCARE, "Arial");
font2 = CreateFont(28, 0, 0, 0, 500, 0, 0, 0, RUSSIAN_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, CLEARTYPE_QUALITY, FF_DONTCARE, "Arial");
}
function text(int HDC, int X, int Y, int FONT, int COLOR, char #array, int size_array)
{
SelectObject (HDC, FONT); SetBkMode(HDC, 0); SetTextColor(HDC, COLOR);
TextOut(HDC, X, Y, address(#array[0]), size_array);
}
function f(int x)
{
if(x<10)return "0"+format(x);
return format(x);
}
function paint()
{
getlocaltime(Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds);
// рисуем прямоугольник, фон диалога
SelectObject(hdc, brush_fon); // выбираем кисть
SelectObject(hdc, pen0); // выбираем перо
Rectangle(hdc, 0, 0, 300, 300);
// рисуем зелёный круг
SelectObject(hdc, brush_fill);
SelectObject(hdc, pen1);
Ellipse(hdc, pos_x_clock-107, pos_y_clock-107, pos_x_clock+107, pos_y_clock+107);
// рисуем маленькие точки и точки
SelectObject(hdc, pen2);
SelectObject(hdc, brush_point);
for(i=0; i<sizearray(pos_x_point); i++)Ellipse(hdc, pos_x_point[i]-1, pos_y_point[i]-1, pos_x_point[i]+1, pos_y_point[i]+1);
for(i=0; i<sizearray(pos_x_point2); i++)Ellipse(hdc, pos_x_point2[i]-2, pos_y_point2[i]-2, pos_x_point2[i]+2, pos_y_point2[i]+2);
// цифры
for(i=0; i<12; i++){strcpy(#number[0], format(num[i])); text(hdc, pos_x[i], pos_y[i], font1, 255, #number[0], size(#number[0]));}
// часовая стрелка
SelectObject(hdc, pen5);
MoveToEx(hdc, pos_x_clock, pos_y_clock, 0); // из центра круга
x=pos_x_clock + 53 * cos((Hour + Minute / 60 - 15) * 30);
y=pos_y_clock + 53 * sin((Hour + Minute / 60 - 15) * 30);
LineTo(hdc, x, y); // рисуем линию
// минутная стрелка
SelectObject(hdc, pen4);
MoveToEx(hdc, pos_x_clock, pos_y_clock, 0);
x=pos_x_clock + 63 * cos((Minute - 15) * 6);
y=pos_y_clock + 63 * sin((Minute - 15) * 6);
LineTo(hdc, x, y);
// секундная стрелка
SelectObject(hdc, pen3);
MoveToEx(hdc, pos_x_clock, pos_y_clock, 0);
x=pos_x_clock + 73 * cos((Second - 15) * 6);
y=pos_y_clock + 73 * sin((Second - 15) * 6);
LineTo(hdc, x, y);
// прямоугольник, где выводится время
SelectObject (hdc, font2);
GetTextExtentPoint32(hdc, address(#time[0]), size(t), address(#size_rect[0]));
SelectObject(hdc, brush_fon);
SelectObject(hdc, pen0);
Rectangle(hdc, pos_x_text, pos_y_text, pos_x_text+size_rect[0], pos_y_text+size_rect[1]);
// вывод времени
t=f(Hour)+":"+f(Minute)+":"+f(Second); // текущее время
strcpy(#time[0], t);
SelectObject (hdc, font2);
SetTextColor(hdc, 128);
TextOut(hdc, pos_x_text, pos_y_text, address(#time[0]), size(t));
BitBlt(hdc_dialog, 0, 0, 300, 300, hdc, 0, 0, SRCCOPY); // вывод изображения на диалог
}
CREATE_TIMER(0, 200)
{
paint();
} |
|
|
Kutuz_off |
Отправлено: 15 Февраля, 2019 - 17:26:13
|
Наблюдатель
Покинул форум
Сообщений всего: 47
Дата рег-ции: Окт. 2016
Репутация: 0
|
Нужно сделать диалог, с кнопками регулирующими основные параметры поиска для осуществления корректировки поиска "на лету", и наконец - перестать мучаться с подбором значений и постоянными компиляциями!
лэйбл +едит +две кнопки со стрелками "верх/вниз", при нажатии: +1 или -1 к значению отражаемому в едите (одной строкой, укладывая в столбец по каждому параметру) Все значения отражаемые в едите, уходят в уже зацикленную функцию при следующем ее выполнении.
например findheapcolor:
+1 строка с двойным полем едит. для введения x/y начальных кор. поиска.
+1 строка с двойным полем едит. для введения x/y конечных кор. поиска
+1 строка с двойным полем едит. для определения x/y размеров искомого
+1 строка с двойным полем едит. для определения x/y "где не искать"
+6 строк с отклонением цвета
+1 строка с мин. искомых
+1 строка с макс. искомых
+n строк, определяемых в зависимости от параметра "макс. искомых", отражающие в каждой строке: цвет-шаблон, №, код цвета, кол-во искомых.
+ кнопка создания шаблона кода.
...может что-то упустил.. набросок...
и так, запустив код с поиском,при помощи такого диалога, мы сможем быстро и точно отрегулировать наш поиск по скученности. + туда же сразу можно добавить возможность выделения области с подбором цвета.
И тоже самое с другими типами поисков.
Попробую что-то, но я долго наверное это буду пилить...
мне кажется так станет многим удобнее работать со всеми поисками...(Отредактировано автором: 15 Февраля, 2019 - 17:30:59) |
|
|
|