Budni |
Отправлено: 02 Июня, 2019 - 16:40:09
|
Специалист
Покинул форум
Сообщений всего: 419
Дата рег-ции: Март 2018
Репутация: 2
|
Пытался сделать так но программа вылетает с OutMemory
Код (Отобразить)
Цитата: #define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define SS_BITMAP 14
#define SS_NOTIFY 256
#define SS_CENTERIMAGE 512
#define STM_SETIMAGE 370
#define WS_CAPTION 12582912
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "LoadImage", "LoadImageA", "User32.dll" );
external(INT, "SetWindowLong", "SetWindowLongA", "User32.dll" );
external(INT, "GetWindowLong", "GetWindowLongA", "User32.dll" );
external(INT, "GetWindowRect", "GetWindowRect", "User32.dll" );
external(INT, "WindowFromPoint", "WindowFromPoint", "User32.dll" );
external(INT, "SetWindowPos", "SetWindowPos", "User32.dll" );
win w;
int x1, y1;
sleep(500);
getmouse(x1, y1);
new int scr[w.width+1][w.height+1]; // èëè êëèåíòñêèå êîîðäèíàòû w.widthclient w.heightclient åñëè óêàçàòåëü íà ãëàâíîå îêíî
screen (#scr[0][0], 0, 0, w.width, w.height, w); // ñäåëàòü ñêðèí
int static, mouse_x, mouse_y, delta_x, delta_y, flag=0, rect[4];;
int image1=LoadImage(0, #scr[0][0], 0, 0, x1, y1); // çàãðóçêà êàðòèíêè
createdialog(0);
showdialog(0, "Äèàëîã",100, 100, 160, 80, 1, 1);
enabletimer(0);
loop()sleep(10);
function getmessage(0, WM_CREATE)
{
static=CreateWindow(0, "STATIC", "", SS_NOTIFY | SS_BITMAP | WS_CHILD | WS_VISIBLE, 0, 0, 150, 74, gethwnd(0), 0, 0, 0); // ñîçäàòü ñòàòèê
sendmessage(STM_SETIMAGE, 0, image1, formatiw(static)); // óñòàíîâèòü êàðòèíêó íà ñòàòèê
SetWindowLong(gethwnd(0), -16, GetWindowLong(gethwnd(0), -16) | WS_CAPTION); // óáðàòü ðàìêó äèàëîãà
}
function getmessage(0, WM_COMMAND)
{
if (message.lparam==static) // åñëè áûë êëèê ïî ñòàòèêó
{
while(getkeystate(1))sleep(1); // æäàòü ïîêà êíîïêà ìûøè íàæàòà
messagebox("Áûë íàæàò ñòàòèê" );
}
}
CREATE_TIMER(0, 50)
{
while(flag || getkeystate(2)) // ïîêà flag íå ðàâíî 0 èëè íàæàòà ïðàâàÿ êíîïêà
{
getmouse(mouse_x, mouse_y); // ïîëó÷èòü êîîðäèíàòû êóðñîðà
if(WindowFromPoint(mouse_x, mouse_y)==static) // ïîëó÷èòü õåíäë îêíà ïîä êóðñîðîì, åñëè îí ðàâåí ñ õåíäëó êíîïêè
{
if(GetWindowRect(static, address(#rect[0]))) // ïîëó÷èòü ïîçèöèþ êíîïêè
{
delta_x=mouse_x-rect[0]; delta_y=mouse_y-rect[1]; // ðàçíèöà êîîðäèíàò êóðñîðà è êîîðäèíàò êíîïêè
while(getkeystate(2)) // ïîêà íàæàòà ïðàâàÿ êíîïêà ìûøè
{
getmouse(mouse_x, mouse_y); // ïîëó÷èòü êîîðäèíàòû êóðñîðà
SetWindowPos(gethwnd(0), 0, mouse_x-delta_x, mouse_y-delta_y, -1, -1, 1); // ïåðåìåñòèòü êíîïêó
sleep(10);
}
}
}
else
{
if(flag==0)break; // åñëè õåíäë ïîä êóðñîðîì íå ðàâåí õåíäëó êíîïêó è flag ðàâíî 0
}
}
}
(Добавление)
Ещё так попробовал но тоже не получается
код (Отобразить) Цитата: win w=window (-1, "Edit", window (-1, "Notepad", -1)); // указатель на окно (блокнот в данном случае)
int persent=99; // масштаб вывода в %
win dialog;
int desktop_c, desktop_w, desktop_h;
getdisplay(desktop_c, desktop_w, desktop_h); // получить разрешение экрана
int count_image=pow((100 / persent), 2) + 1; // количество картинок в зависимости от масштаба вывода
new int screen_[count_image][desktop_w+1][desktop_h+1]; // массив для скринов
createdialog(2);
showdialog(2, "Диалог",0, 0, desktop_w, desktop_h, 1, 1);
int z=0;
for(int i=0; i<desktop_w-desktop_w*persent/100; i=i+desktop_w*persent/100)
{
for(int j=0; j<desktop_h-desktop_h*persent/100; j=j+desktop_h*persent/100)
{
screen (#screen_[z][0][0], 0, 0, desktop_w, desktop_h, w); // скрин
visualwindow(dialog, z, 0, 0, desktop_w, desktop_h, i, j, persent, #screen_[z][0][0]); // вывод изображения
new int x[count]; // массив для координат X
new int y[count]; // массив для координат Y
textbkcolor(255, 16637860);
for(int i1=0; i1<count; i1++)
{
textout(0, 500, 500, "Получить x["+format(i1)+"], y["+format(i1)+"]", 0);
while(getkeystate(192)==0)sleep(10);// Ждем когда будет нажата Ё, чтобы получить координаты
while(getkeystate(192))sleep(10); // ждать когда будет отпущена Ё
getmouse(x[i1], y[i1]); // получаем координаты курсора
}
resettextout(1);
if(fopen ("C:\koordinaty.txt", "w" ) // открыть файл для записи
{
for(i=0; i1<count; i1++) // для всех координат
{
fwrite(format(x[i1])+", "+format(y[i1])); // записывать координаты X и Y
fwrite(ENDL); // перенос строки
}
fclose();
start("C:\koordinaty.txt" ;
}
z++;
sleep(200);
}
}
sleep(3000);
function getmessage(2, WM_CREATE)
{
dialog=formatiw(gethwnd(2));
}
(Добавление)
код (Отобразить)CODE:win w=window (-1, "Edit", window (-1, "Notepad", -1)); // указатель на окно (блокнот в данном случае)
int persent=99; // масштаб вывода в %
win dialog;
int desktop_c, desktop_w, desktop_h;
getdisplay(desktop_c, desktop_w, desktop_h); // получить разрешение экрана
int count_image=pow((100 / persent), 2) + 1; // количество картинок в зависимости от масштаба вывода
new int screen_[count_image][desktop_w+1][desktop_h+1]; // массив для скринов
createdialog(2);
showdialog(2, "Диалог",0, 0, desktop_w, desktop_h, 1, 1);
int z=0;
for(int i=0; i<desktop_w-desktop_w*persent/100; i=i+desktop_w*persent/100)
{
for(int j=0; j<desktop_h-desktop_h*persent/100; j=j+desktop_h*persent/100)
{
screen (#screen_[z][0][0], 0, 0, desktop_w, desktop_h, w); // скрин
visualwindow(dialog, z, 0, 0, desktop_w, desktop_h, i, j, persent, #screen_[z][0][0]); // вывод изображения
new int x[count]; // массив для координат X
new int y[count]; // массив для координат Y
textbkcolor(255, 16637860);
for(int i1=0; i1<count; i1++)
{
textout(0, 500, 500, "Получить x["+format(i1)+"], y["+format(i1)+"]", 0);
while(getkeystate(192)==0)sleep(10);// Ждем когда будет нажата Ё, чтобы получить координаты
while(getkeystate(192))sleep(10); // ждать когда будет отпущена Ё
getmouse(x[i1], y[i1]); // получаем координаты курсора
}
resettextout(1);
if(fopen ("C:\koordinaty.txt", "w")) // открыть файл для записи
{
for(i=0; i1<count; i1++) // для всех координат
{
fwrite(format(x[i1])+", "+format(y[i1])); // записывать координаты X и Y
fwrite(ENDL); // перенос строки
}
fclose();
start("C:\koordinaty.txt");
}
z++;
sleep(200);
}
}
sleep(3000);
function getmessage(2, WM_CREATE)
{
dialog=formatiw(gethwnd(2));
}
(Добавление)
Вообще не понимаю, что делаю, слишком сложно для меня ((Отредактировано автором: 02 Июня, 2019 - 16:41:27) |
|
|
Kibor |
Отправлено: 02 Июня, 2019 - 17:24:28
|
Эксперт
Покинул форум
Сообщений всего: 8226
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Budni пишет: Пытался сделать так но программа вылетает с OutMemory
Для этого есть отладчик.
Если в нем включить скан переменных увидим это
Цитата: external ( INT , " CreateWindow " , " CreateWindowExA " , " User32.dll " )
external ( INT , " LoadImage " , " LoadImageA " , " User32.dll " )
external ( INT , " SetWindowLong " , " SetWindowLongA " , " User32.dll " )
external ( INT , " GetWindowLong " , " GetWindowLongA " , " User32.dll " )
external ( INT , " GetWindowRect " , " GetWindowRect " , " User32.dll " )
external ( INT , " WindowFromPoint " , " WindowFromPoint " , " User32.dll " )
external ( INT , " SetWindowPos " , " SetWindowPos " , " User32.dll " )
sleep ( 500 )
getmouse ( x1'-842150451' , y1'-842150451' )
new int scr [ w.width'-842150451' + 1 ] [ w.height'-842150451' + 1 ]
что означает что вылетает при попытке выделить массив размером
-842150451+1 на -842150451+1
А это потому что в структуре w.width w.height не записан размер окна, так как на него еще не получен указатель.
(Добавление)
Budni пишет: Вообще не понимаю, что делаю, слишком сложно для меня (
В справке изучите каждую строчку и параметры.
CODE:createdialog(0);
//////////
int col, ex, ey;
win w;
getdisplay(col, ex, ey);
showdialog(0, "Диалог", 0, 0, ex, ey, 1, 1);
//////////
int RL=100;
win q=window ("Калькулятор", "CalcFrame", -1);//Указатель на наше нужное окно игры.
visualwindow(w, 0, 0, 0, q.widthclient, q.heightclient, 0, 0, RL, q);
loop() sleep(10);//Убрать после теста
function getmessage(0, WM_CREATE)
{
w=formatiw(gethwnd(0));
setwindowparam(w);
}
function getmessage(0, WM_MOUSEWHEEL)//Отследить ролик мыши.
{
if(message.wparam>0)RL=RL+10;
if(message.wparam<0)RL=RL-10;;
if (RL>300) RL=300;
if (RL<50) RL=50;
update(w);
visualwindow(w, 0, 0, 0, q.widthclient, q.heightclient, 0, 0, RL, q);
} |
|
|
Budni |
Отправлено: 03 Июня, 2019 - 17:52:22
|
Специалист
Покинул форум
Сообщений всего: 419
Дата рег-ции: Март 2018
Репутация: 2
|
в чем ошибка? Что не так с переменными
Код (Отобразить)CODE:createdialog(0);
//////////
new int x[count]; // ìàññèâ äëÿ êîîðäèíàò X
new int y[count]; // ìàññèâ äëÿ êîîðäèíàò Y
int col, ex, ey;
win w;
getdisplay(col, ex, ey);
showdialog(0, "Äèàëîã", 0, 0, ex, ey, 1, 1);
//////////
int RL=100;
win q=window (-1, "Edit", window (-1, "Notepad", -1));
visualwindow(w, 0, 0, 0, q.widthclient, q.heightclient, 0, 0, RL, q);
textbkcolor(255, 16637860);
for(int i=0; i<count; i++)
{
textout(0, 500, 500, "Ïîëó÷èòü x["+format(i)+"], y["+format(i)+"]", 0);
while(getkeystate(192)==0)sleep(10);// Æäåì êîãäà áóäåò íàæàòà ¨, ÷òîáû ïîëó÷èòü êîîðäèíàòû
while(getkeystate(192))sleep(10); // æäàòü êîãäà áóäåò îòïóùåíà ¨
getmouse(x[i], y[i]); // ïîëó÷àåì êîîðäèíàòû êóðñîðà
}
resettextout(1);
if(fopen ("C:\koordinaty.txt", "w")) // îòêðûòü ôàéë äëÿ çàïèñè
{
for(i=0; i<count; i++) // äëÿ âñåõ êîîðäèíàò
{
fwrite(format(x[i])+", "+format(y[i])); // çàïèñûâàòü êîîðäèíàòû X è Y
fwrite(ENDL); // ïåðåíîñ ñòðîêè
}
fclose();
start("C:\koordinaty.txt");
}
function getmessage(0, WM_CREATE)
{
w=formatiw(gethwnd(0));
setwindowparam(w);
}
function getmessage(0, WM_MOUSEWHEEL)//Îòñëåäèòü ðîëèê ìûøè.
{
if(message.wparam>0)RL=RL+10;
if(message.wparam<0)RL=RL-10;;
if (RL>300) RL=300;
if (RL<50) RL=50;
update(w);
visualwindow(w, 0, 0, 0, q.widthclient, q.heightclient, 0, 0, RL, q);
} |
|
|
|