Budni |
Отправлено: 03 Июня, 2019 - 18:09:28
|
Специалист
Покинул форум
Сообщений всего: 419
Дата рег-ции: Март 2018
Репутация: 2
|
Kibor пишет: Я не вижу там переменных. Там какие то слова "count"
ой блин, точно, спасибо! Забыл int count=3; добавить
(Добавление)
Kibor , а как сделать чтобы координаты именно из диалогового окна брались в пределах скриншота? И можете подсказать как сделать выделение координат как в Быстром создании?
(Добавление)
Чтобы при увеличении брались те координаты которые указал а не экранные(Отредактировано автором: 03 Июня, 2019 - 18:10:11) |
|
|
Zireael |
Отправлено: 04 Июня, 2019 - 03:21:28
|
Эксперт
Покинул форум
Сообщений всего: 4467
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Примерно так:
code (Отобразить)CODE:win w=window (-1, "Notepad", -1); // указатель на окно (блокнот в данном случае)
win dialog;
int percent=100;
int pos_x, pos_y;
int mouse_x, mouse_y, mouse_x2, mouse_y2;
int xx=0, yy=0, xx2=0, yy2=0;
enabletimer(0);
if(w)
{
createdialog(0);
showdialog(0, "Диалог",0, 0, w.widthclient, w.heightclient, 1, 1);
new int scr[w.widthclient+1][w.heightclient+1];
screen (#scr[0][0], 0, 0, w.widthclient, w.heightclient, w);
visualwindow(formatiw(gethwnd(0)), 0, 0, 0, sizearray(scr), sizearray(scr[]), 0, 0, percent, #scr[0][0]);
loop()sleep(1);
}
else messagebox("Окно не найдено");
function getmessage(0, WM_CREATE)
{
dialog=formatiw(gethwnd(0));
}
function getmessage(0, WM_MOUSEWHEEL)
{
setwindowparam(dialog);
xx2=(dialog.width/2-xx) * 100 / percent;
yy2=(dialog.height/2-yy) * 100 / percent;
if(message.wparam>0 && percent<1000)percent=percent+100;
if(message.wparam<0 && percent>100)percent=percent-100;
if(xx<dialog.width/2 && yy<dialog.height/2)
{
xx=dialog.width/2-xx2*percent/100;
yy=dialog.height/2-yy2*percent/100;
}
visualwindow(formatiw(gethwnd(0)), 0, 0, 0, sizearray(scr), sizearray(scr[]), xx, yy, percent, #scr[0][0]);
update(formatiw(gethwnd(0)));
}
CREATE_TIMER(0, 10)
{
if(getkeystate(1))
{
if(formatwi(getwindow())==formatwi(dialog))
{
getmouse(mouse_x, mouse_y, formatiw(gethwnd(0)));
while(getkeystate(1))
{
getmouse(mouse_x2, mouse_y2, formatiw(gethwnd(0)));
visualwindow(formatiw(gethwnd(0)), 0, 0, 0, sizearray(scr), sizearray(scr[]), xx-mouse_x+mouse_x2, yy-mouse_y+mouse_y2, percent, #scr[0][0]);
sleep(1);
}
xx=xx - mouse_x + mouse_x2;
yy=yy - mouse_y + mouse_y2;
update(formatiw(gethwnd(0)));
}
}
if(getkeystate(192))
{
while(getkeystate(192)==1)sleep(10);
if(formatwi(getwindow())==formatwi(dialog))
{
getmouse(pos_x, pos_y, dialog);
pos_x=(sqrt(pow(xx-pos_x, 2))) * 100 / percent;
pos_y=(sqrt(pow(yy-pos_y, 2))) * 100 / percent;
textout(0, 300, 300, "Координаты: "+format(pos_x)+" "+format(pos_y), 0);
}
}
}
Зажав левую кнопку мыши можно перетаскивать скрин.
Ролик мыши вверх - увеличение масштаба, вниз - уменьшение. От 100% до 1000% с шагом 100.
Нажатие Ё покажет координаты, масштаб и позиция скрина на диалоге не влияет. |
|
|
Budni |
Отправлено: 04 Июня, 2019 - 10:53:06
|
Специалист
Покинул форум
Сообщений всего: 419
Дата рег-ции: Март 2018
Репутация: 2
|
Цитата: Примерно так:
Спасибо, подскажите пожалуйста ещё тут почему не работает, вроде все правильно
код (Отобразить)win w=window (-1, "Notepad", -1); // óêàçàòåëü íà îêíî (áëîêíîò â äàííîì ñëó÷àå)
win dialog;
int percent=100;
int pos_x[count], pos_y[count];
int mouse_x, mouse_y, mouse_x2, mouse_y2;
int xx=0, yy=0, xx2=0, yy2=0;
int count = 2;
enabletimer(0);
if(w)
{
createdialog(0);
showdialog(0, "Óêàæèò íóæíûå êîîðäèíàòû",0, 0, w.widthclient, w.heightclient, 1, 1);
new int scr[w.widthclient+1][w.heightclient+1];
screen (#scr[0][0], 0, 0, w.widthclient, w.heightclient, w);
visualwindow(formatiw(gethwnd(0)), 0, 0, 0, sizearray(scr), sizearray(scr[]), 0, 0, percent, #scr[0][0]);
loop()sleep(1);
}
else messagebox("Îêíî íå íàéäåíî");
function getmessage(0, WM_CREATE)
{
dialog=formatiw(gethwnd(0));
}
function getmessage(0, WM_MOUSEWHEEL)
{
setwindowparam(dialog);
xx2=(dialog.width/2-xx) * 100 / percent;
yy2=(dialog.height/2-yy) * 100 / percent;
if(message.wparam>0 && percent<1000)percent=percent+100;
if(message.wparam<0 && percent>100)percent=percent-100;
if(xx<dialog.width/2 && yy<dialog.height/2)
{
xx=dialog.width/2-xx2*percent/100;
yy=dialog.height/2-yy2*percent/100;
}
visualwindow(formatiw(gethwnd(0)), 0, 0, 0, sizearray(scr), sizearray(scr[]), xx, yy, percent, #scr[0][0]);
update(formatiw(gethwnd(0)));
}
CREATE_TIMER(0, 10)
{
if(getkeystate(1))
{
if(formatwi(getwindow())==formatwi(dialog))
{
getmouse(mouse_x, mouse_y, formatiw(gethwnd(0)));
while(getkeystate(1))
{
getmouse(mouse_x2, mouse_y2, formatiw(gethwnd(0)));
visualwindow(formatiw(gethwnd(0)), 0, 0, 0, sizearray(scr), sizearray(scr[]), xx-mouse_x+mouse_x2, yy-mouse_y+mouse_y2, percent, #scr[0][0]);
sleep(1);
}
xx=xx - mouse_x + mouse_x2;
yy=yy - mouse_y + mouse_y2;
update(formatiw(gethwnd(0)));
}
}
for(int i=0; i<count; i++) {
if(getkeystate(192))
{
while(getkeystate(192)==1)sleep(10);
if(formatwi(getwindow())==formatwi(dialog))
{
getmouse(pos_x[i], pos_y[i], dialog);
pos_x[i]=(sqrt(pow(xx-pos_x, 2))) * 100 / percent;
pos_y[i]=(sqrt(pow(yy-pos_y, 2))) * 100 / percent;
}
if(fopen ("C:\koordinaty.txt", "w")) // îòêðûòü ôàéë äëÿ çàïèñè
{
for(i=0; i<count; i++) // äëÿ âñåõ êîîðäèíàò
{
fwrite(format(pos_x[i])+", "+format(pos_y[i])); // çàïèñûâàòü êîîðäèíàòû X è Y
fwrite(ENDL); // ïåðåíîñ ñòðîêè
}
fclose();
start("C:\koordinaty.txt");
}
}
}
}
(Отредактировано автором: 04 Июня, 2019 - 10:53:37) |
|
|
Zireael |
Отправлено: 04 Июня, 2019 - 11:19:42
|
Эксперт
Покинул форум
Сообщений всего: 4467
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: вроде все правильно
Всё что добавили неправильно.
code (Отобразить)CODE:win w=window (-1, "Notepad", -1); // указатель на окно (блокнот в данном случае)
int count=2; // сколько координат надо получить
win dialog;
int percent=100;
int pos_x, pos_y, count2=0;
int mouse_x, mouse_y, mouse_x2, mouse_y2;
int xx=0, yy=0, xx2=0, yy2=0;
enabletimer(0);
if(w)
{
new int x[count]; // массив для координат X
new int y[count]; // массив для координат Y
createdialog(0);
showdialog(0, "Диалог",0, 0, w.widthclient, w.heightclient, 1, 1);
new int scr[w.widthclient+1][w.heightclient+1];
screen (#scr[0][0], 0, 0, w.widthclient, w.heightclient, w);
visualwindow(formatiw(gethwnd(0)), 0, 0, 0, sizearray(scr), sizearray(scr[]), 0, 0, percent, #scr[0][0]);
while(count2<count)sleep(1);
if(fopen ("C:\koordinaty.txt", "w")) // открыть файл для записи
{
for(int i=0; i<count; i++) // для всех координат
{
fwrite(format(x[i])+", "+format(y[i])); // записывать координаты X и Y
fwrite(ENDL); // перенос строки
}
fclose();
start("C:\koordinaty.txt");
}
}
else messagebox("Окно не найдено");
function getmessage(0, WM_CREATE)
{
dialog=formatiw(gethwnd(0));
}
function getmessage(0, WM_MOUSEWHEEL)
{
setwindowparam(dialog);
xx2=(dialog.width/2-xx) * 100 / percent;
yy2=(dialog.height/2-yy) * 100 / percent;
if(message.wparam>0 && percent<1000)percent=percent+100;
if(message.wparam<0 && percent>100)percent=percent-100;
if(xx<dialog.width/2 && yy<dialog.height/2)
{
xx=dialog.width/2-xx2*percent/100;
yy=dialog.height/2-yy2*percent/100;
}
visualwindow(formatiw(gethwnd(0)), 0, 0, 0, sizearray(scr), sizearray(scr[]), xx, yy, percent, #scr[0][0]);
update(formatiw(gethwnd(0)));
}
CREATE_TIMER(0, 10)
{
if(getkeystate(1))
{
if(formatwi(getwindow())==formatwi(dialog))
{
getmouse(mouse_x, mouse_y, formatiw(gethwnd(0)));
while(getkeystate(1))
{
getmouse(mouse_x2, mouse_y2, formatiw(gethwnd(0)));
visualwindow(formatiw(gethwnd(0)), 0, 0, 0, sizearray(scr), sizearray(scr[]), xx-mouse_x+mouse_x2, yy-mouse_y+mouse_y2, percent, #scr[0][0]);
sleep(1);
}
xx=xx - mouse_x + mouse_x2;
yy=yy - mouse_y + mouse_y2;
update(formatiw(gethwnd(0)));
}
}
if(getkeystate(192))
{
while(getkeystate(192)==1)sleep(10);
if(formatwi(getwindow())==formatwi(dialog))
{
getmouse(pos_x, pos_y, dialog);
pos_x=(sqrt(pow(xx-pos_x, 2))) * 100 / percent;
pos_y=(sqrt(pow(yy-pos_y, 2))) * 100 / percent;
x[count2]=pos_x;
y[count2]=pos_y;
count2++;
}
}
} |
|
|
|