007wan |
Отправлено: 23 Мая, 2019 - 13:26:30
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Вначале загрузить функцию, потом можно использовать в любом месте скрипта.
Если выдавало ошибку, значит неправильно передавались параметры в функцию. Я так и сделал. Загрузил в начале, но выдавала ошибку потому что в функции считало, что она не объявлена, а другие да.
(Добавление)
Zireael пишет: Цитата: а прямоугольник можно нарисовать?
Всё что угодно.
code (Отобразить)CODE:#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define SS_NOTIFY 256
#define PS_SOLID 0
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
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, "Polyline", "Polyline", "Gdi32.dll");
external(INT, "Ellipse", "Ellipse", "Gdi32.dll");
external(INT, "Rectangle", "Rectangle", "Gdi32.dll");
int static;
int point[10]={95, 35, 220, 35, 220, 62, 95, 62, 95, 35} // точки, по которым будет нарисованна фигура
int point2[12]={20, 37, 44, 21, 66, 37, 57, 64, 29, 64, 20, 37} // точки, по которым будет нарисованна фигура
int hdc, pen1, pen2, pen3, pen4, brush1, brush2;
int old_pen, old_brush;
pen1=CreatePen("PS_SOLID", 3, 255); // тип линии, толщина и цвет
pen2=CreatePen("PS_SOLID", 5, 16000000); // тип линии, толщина и цвет
pen3=CreatePen("PS_SOLID", 4, 16017042); // тип линии, толщина и цвет
pen4=CreatePen("PS_SOLID", 2, 255); // тип линии, толщина и цвет
brush1=CreateSolidBrush(65280); // фон для круга
brush2=CreateSolidBrush(8605961); // фон для прямоугольника
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);
enabletimer(0);
loop()sleep(10);
function getmessage(0, WM_CREATE)
{
static=CreateWindow(0, "STATIC", "Статичный текст", SS_NOTIFY | WS_CHILD | WS_VISIBLE, 100, 40, 110, 18, gethwnd(0), 0, 0, 0);
hdc=GetDC(gethwnd(0));
}
CREATE_TIMER(0, 100)
{
// прямоугольник
old_pen=SelectObject(hdc, pen1); // выбрать ручку
Polyline(hdc, address(#point[0]), sizearray(point) / 2); // нарисовать фигуру
SelectObject(hdc, old_pen); // вернуть ручку
// звезда
old_pen=SelectObject(hdc, pen2);
Polyline(hdc, address(#point2[0]), sizearray(point2) / 2);
SelectObject(hdc, old_pen);
// эллипс, круг в данном случае
old_pen=SelectObject(hdc, pen3);
old_brush=SelectObject(hdc, brush1);
Ellipse(hdc, 20, 100, 120, 200);
SelectObject(hdc, old_pen);
SelectObject(hdc, old_brush);
// прямоугольник с фоном
old_pen=SelectObject(hdc, pen4);
old_brush=SelectObject(hdc, brush2);
Rectangle(hdc, 150, 100, 230, 200);
SelectObject(hdc, old_pen);
SelectObject(hdc, old_brush);
} А можно удалить часть кода? А то не разобрался что и откуда и для чего. Нужен код, который для "Статичного текста" и прямоугольник для него, а все лишнее удалить.
(Добавление)
А, всё догнал(Отредактировано автором: 23 Мая, 2019 - 13:43:12) |
|
|
Adomb |
Отправлено: 23 Мая, 2019 - 21:32:41
|
Мастер
Покинул форум
Сообщений всего: 185
Дата рег-ции: Июль 2015
Репутация: 1
|
Наверное сюда..
Раньше работало, сейчас перестало.
CODE:external(INT, "IsUserAnAdmin", "IsUserAnAdmin", "Shell32.dll");
int g=OtAdm(); messagebox(g);
function OtAdm()
{if(IsUserAnAdmin()){return 1;} else(return;)
}
Если запускаешь не от админа, вылазит ошибка.
Если поправить -
CODE:function OtAdm()
{if(IsUserAnAdmin()){return 1;} return;
}
то работает, но раньше работало именно как в первом примере.(Отредактировано автором: 23 Мая, 2019 - 21:35:30) |
|
|
Adomb |
Отправлено: 23 Мая, 2019 - 21:55:05
|
Мастер
Покинул форум
Сообщений всего: 185
Дата рег-ции: Июль 2015
Репутация: 1
|
Kibor пишет: Раньше много чего "работало" того, что не должно было работать.
Соблюдайте синтаксис.
CODE:if(IsUserAnAdmin()){return 1;} else(return;)
А это неправильный синтаксис разве? If - else |
|
|
Zireael |
Отправлено: 24 Мая, 2019 - 01:52:24
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: if(IsUserAnAdmin()){return 1;} else(return; )
А это неправильный синтаксис разве? If - else
Скобки у else должны быть фигурные. А в данном случае они вообще не нужны. Тут и else нужен.
CODE:external(INT, "IsUserAnAdmin", "IsUserAnAdmin", "Shell32.dll");
int g=OtAdm(); messagebox(g);
function OtAdm()
{if(IsUserAnAdmin())return 1; return 0;
} |
|
|
007wan |
Отправлено: 24 Мая, 2019 - 13:48:04
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
007wan пишет: Что в кисти писать, что бы сделать
CODE:
Rectangle(DC_MainWindow, VisualWindow_Width+10, VisualWindow_Height+40, 10, 40);
Его прозрачным(прямоугольник) Установил фон прямоугольника такой же, как и фон окна.
(Добавление)
Код. Часы. пример. (Отобразить)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();
} Где тут строка, которая выводит цветной текст или цифры? |
|
|
Zireael |
Отправлено: 24 Мая, 2019 - 14:01:08
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Где тут строка, которая выводит цветной текст или цифры?
Цитата: 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);
} |
|
|
|