Adomb |
Отправлено: 27 Июля, 2015 - 15:03:49
|
Мастер
Покинул форум
Сообщений всего: 185
Дата рег-ции: Июль 2015
Репутация: 1
|
Наверно подробней надо, потому что активно или нет мало. Чтобы правильно рассчитывались координаты при изменении размера окна в процессе работы срипта, нужно знать наведён курсор на окно, если наведён, получитьт координаты мыши, которые передаются getwindow и переменная получает новый размер окна. Если, соответственно, курсор не на нужном окне или оно не активно, то операция пропускается и скрипт выполняется с прежними координатами.
CODE:
win main=getwindow(0, 231, 158);
win as=getwindow(1, 231, 158);
activate(main);
int mx, my, mx1, my1, getmx, getmy;
loop: //здесь начало действий
//вот этот блок выполнялся бы только если курсор на as
getmouse(getmx, getmy);
win as=getwindow(1, getmx, getmy);
mx1=as.widthclient;
my1=as.heightclient;
mx=mx1/2; //новые координаты центра окна если окну изменили размер
my=my1/2; //
(Отредактировано автором: 27 Июля, 2015 - 15:05:00) |
|
|
Kibor |
Отправлено: 27 Июля, 2015 - 15:14:24
|
Эксперт
Покинул форум
Сообщений всего: 8227
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Adomb пишет: win main=getwindow(0, 231, 158);
win as=getwindow(1, 231, 158);
activate(main);
int mx, my, mx1, my1, getmx, getmy;
loop: //здесь начало действий
//вот этот блок выполнялся бы только если курсор на as
getmouse(getmx, getmy);
win as=getwindow(1, getmx, getmy);
mx1=as.widthclient;
my1=as.heightclient;
mx=mx1/2; //новые координаты центра окна если окну изменили размер
my=my1/2; //
ошибка повторное объявление.. |
|
|
Adomb |
Отправлено: 27 Июля, 2015 - 15:26:23
|
Мастер
Покинул форум
Сообщений всего: 185
Дата рег-ции: Июль 2015
Репутация: 1
|
Дык as объявляется до loop: , а после скрипт зацикливается и вначале цикла стоит этот блок, который каждый раз получает новый размер окна. Хоть там тоже переменная as - cкрипт всё равно работает, отправляет клики куда задумано, по новым координатам, если меняешь размер окна, только, соответственно, пока мышь на окне - отведёшь и всё. Как проверить что мышь на as, перед выполнением этого блока? )) (Отредактировано автором: 27 Июля, 2015 - 15:27:34) |
|
|
Kibor |
Отправлено: 27 Июля, 2015 - 15:39:19
|
Эксперт
Покинул форум
Сообщений всего: 8227
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Adomb пишет: Хоть там тоже переменная as - cкрипт всё равно работает до поры до времени..,..
CODE:string name="окно";
win w;
int x, y;
e:
getmouse(x, y);
w=getwindow(0, x, y);
if (w.name==name) messagebox ("мышь над окном");//Сравнивать.............
sleep(10);
goto e; |
|
|
Adomb |
Отправлено: 27 Июля, 2015 - 15:44:29
|
Мастер
Покинул форум
Сообщений всего: 185
Дата рег-ции: Июль 2015
Репутация: 1
|
Просто, когда запускается скрипт - там будет по любому инициализация as по координатам, которые жёстко указаны
CODE:
win main=getwindow(0, 231, 158);
win as=getwindow(1, 231, 158);
activate(main);
int mx, my, mx1, my1, getmx, getmy;
А дальше только цикл действий, которые происходят при выполнении определённых условий. И вот в теле цикла loop: если курсор опять появился на окне, срабатывает блок определения нового размера окна и as переназначается.
CODE:
loop: //здесь начало действий
//вот этот блок выполнялся бы только если курсор на as
getmouse(getmx, getmy);
win as=getwindow(1, getmx, getmy);
mx1=as.widthclient;
my1=as.heightclient;
mx=mx1/2; //новые координаты центра окна если окну изменили размер
my=my1/2; //
...
...
goto loop;
Наверно мудрёно пытаюсь делать. ))
upd.
Написал ещё до вашего ответа. Щас, осмыслю..
(Добавление)
Ну прямо сказка какая-то.. )
CODE:
win main=getwindow(0, 231, 158);
activate(main);
string name=main.name;
win w;
int mx, my, mx1, my1, getmx, getmy;
loop:
getmouse(getmx, getmy);
w=getwindow(0, getmx, getmy);
if (w.name==name){win as=getwindow(1, getmx, getmy);}
mx1=as.widthclient;
my1=as.heightclient;
mx=mx1/2; //новые координаты центра окна, независимо от его размера
my=my1/2; //
...
...
goto loop;
Работает!!!
Спасибо.
(Добавление)
CODE:
if (w.name==name)win as=getwindow(1, getmx, getmy);
Поторопился отправить, надо так :
CODE:
if (w.name==name);
{
win as=getwindow(1, getmx, getmy);
}
Иначе - Out of memory.(Отредактировано автором: 27 Июля, 2015 - 15:47:19) |
|
|
|