Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Мышка 
:(
    Опции темы
Kirgston
Дата 20.2.2009, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: 2
Всего: 2



Ребята... вот собственно переношу проект с Делфи под С++ =) мне надо добится результата чтобы мышка ставала по центру, и плавно перемещалась в правый верхний угол... в Делфи код был такой:

Центрую мышку и...

Код

if (Screen.Width=1024) and (Screen.Height=768) then
 begin
  x_:=mouse.CursorPos.X+4;
  y_:=mouse.CursorPos.Y-3;
  SetCursorPos(x_ , y_ );
  if (mouse.CursorPos.X>=980) and (mouse.CursorPos.Y<=55) then
   begin


В результате мышка центруется и движется пока координаты не привысят допустимых... Это всё в таймере с интервалом 1

В С++ я это сделал так:

Код

if (Screen->Width==1024 && Screen->Height==768) {
     while (cur_pos.x<980 && cur_pos.y>55) {
     GetCursorPos(&cur_pos);
     cur_pos.x=cur_pos.x+4;
     cur_pos.y=cur_pos.y-3;
     SetCursorPos(cur_pos.x,cur_pos.y);
     }


Тоисть я запускаю цыкл с проверкой и каждый раз на координаты... после чего их увеличиваю... но у меня мышка центрируется и попадает потом практически в самый конец... и скачет по углам... Пробовал менять цыкл... без него... пробовал с слипами... ничего... этот код также вписал в таймер... но оно чтото не правильно работает... помогите пожалуйста smile 
PM MAIL   Вверх
Dmi3ev
Дата 20.2.2009, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 16
Всего: 41



вот мышка перемещается по экрану плавно по таймеру:
Код

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
static int x=1;
static int y=1;
SetCursorPos(++y, ++x);
}


то же самое, только с условием:
Код

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
static int x=1;
static int y=1;
if (x<10 && y<10)
 SetCursorPos(++y, ++x);
else
 {
  ShowMessage("position 10, 10");
  Timer1->Enabled=false;
 }
}


Это сообщение отредактировал(а) Dmi3ev - 20.2.2009, 00:54


--------------------

PM MAIL   Вверх
Kirgston
Дата 20.2.2009, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: 2
Всего: 2



Спасибо большое уже справился =) итог могу сказать такой... по меньше играйтесь с GetCursorPos smile

Это сообщение отредактировал(а) Kirgston - 20.2.2009, 10:21
PM MAIL   Вверх
Dem_max
Дата 20.2.2009, 10:33 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 14
Всего: 39



Цитата

 по меньше играйтесь с GetCursorPos

что это значит  smile 


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Kirgston
Дата 20.2.2009, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: 2
Всего: 2



Ееее не знаю... почему то у меня туда как бы числа рендомом... вообщем как вы видете сверху код. Вроде всё правильно. Но мышка прыгала по углам. Как только я это всё перевел в 2 переменные и работал с переменными всё стало "как надо" =). Не знаю изза чего это... но факт есть факт )))))


Ребята. Вот у меня появилась проблемка... захотелось чтобы мышка при определенном событии какбы направлялась в центр экрана. Да я понимаю...
SetCursorPos(Screen->Width\2, Screen->Height\2) ;

Но мне хочется больше импровизации =) хочется заставить мышку плавно перемещаться в центр. Да я например знаю как переместить с одного угла в центр или другой угол. Но тут как бы не так... а если мышка будет возле центра сверху... да я знаю что это очень геморойно, но интересно! =) Помогите пожалуйста хоть какимито мыслями  smile 
PM MAIL   Вверх
Anikmar
Дата 20.2.2009, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



И что особо сложного?
Вычисляем разницу: Текущая координата минус координата центра.
Эту разницу делим на желаемое кол-во шагов - получаем смещение
Дальше в цикле по кол-ву шагов прибавляем к текущей координате смещение

Ну естественно можно каждый шаг уточнять на момент того, что пользователь может мышкой и двигать в это время (гад какой).

Забавно получится - дурак пользователь мышку двигает, а она упорно в центр сползает. Думаю очень обрадует такой наворот  smile 
PM MAIL ICQ   Вверх
Kirgston
Дата 20.2.2009, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: 2
Всего: 2



Неа что то тут не то... а если текущая координата меньше координаты центра? ... то что?... тогда курсор уплывает в минус...
PM MAIL   Вверх
Anikmar
Дата 20.2.2009, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(Kirgston @  20.2.2009,  15:12 Найти цитируемый пост)
Неа что то тут не то... а если текущая координата меньше координаты центра? ... то что?... тогда курсор уплывает в минус... 

Тогда и смещение будет отрицательным само собой.

Добавлено через 3 минуты и 11 секунд
Беру пример на основе одной координаты. 
Допустим Х
Кол-во шагов 100

Текущая мыши 10
Центр 700
Разница координат = 700-10=690

Смещение = 690/100=6.9

В цикле 100 раз прибавляем к 10 6.9 - в итоге получим 700

Теперь с другой стороны
Текущая координата = 1100
Разница координат 700-1100 = -400
Смещение = -400/100 = -4

В цикле 100 раз прибавляем к 1100 -4 получаем те же 700

Математика однако.
PM MAIL ICQ   Вверх
Kirgston
Дата 20.2.2009, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: 2
Всего: 2



Вот формула координат центра

SetCursorPos( ((Screen->Width/2)-x)+x, ((Screen->Height/2)-y)+y);

Как мне сделать теперь чтобы курсор бежал плавно? smile 
PM MAIL   Вверх
Anikmar
Дата 20.2.2009, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Чем мой вариант не подходит не пойму?!
PM MAIL ICQ   Вверх
Dmi3ev
Дата 20.2.2009, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 16
Всего: 41



Цитата

Как мне сделать теперь чтобы курсор бежал плавно? 

я же тебе в начале написал, только интервал таймера поменьше поставь и наслаждайся... будет плавно...


--------------------

PM MAIL   Вверх
Kirgston
Дата 20.2.2009, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: 2
Всего: 2



Извините просто не увидел вашего варианта. Щас попробую!
PM MAIL   Вверх
Anikmar
Дата 20.2.2009, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(Kirgston @  20.2.2009,  16:25 Найти цитируемый пост)
SetCursorPos( ((Screen->Width/2)-x)+x, ((Screen->Height/2)-y)+y);


Интересная формула.
А можно узнать зачем -х+х?
PM MAIL ICQ   Вверх
Kirgston
Дата 20.2.2009, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: 2
Всего: 2



Еххххх ребята )))) не вьежаете вы ))))

Anikmar, тоже что и я сделал ))))) в итоге будет перемещение буквой Г. Сначала по Х, а потом по У. Уже также думал... надо заставить перемещатся одновременно... и учитывать что экран 4:3 делать просто инкремент или декремент нельзя...


Dmi3ev, также повторюсь =) нельзя. А если у меня курсор будет с правой стороны? Тогда надо отнимать. А если сверху? А если сбоку? А если рядом с центром? Простой инкремент тут не выход...  я уже думал над этим всем ))))) уже 6ой час сижу и думаю ))))
PM MAIL   Вверх
Anikmar
Дата 20.2.2009, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(Kirgston @  20.2.2009,  16:52 Найти цитируемый пост)
Еххххх ребята )))) не вьежаете вы ))))

Да мы тут просто, так... Это...  smile 

Код

    POINT CurPos;
    float x,y,dx,dy,xc,yc;
    int i;
    const int Count = 1000;

    Timer1->Enabled = false;

    xc = Screen->Width/2;
    yc = Screen->Height/2;

    i = Count;

    GetCursorPos(&CurPos);
    x = CurPos.x;
    y = CurPos.y;
    dx = (xc - x) / i;
    dy = (yc - y) / i;

    while (i-->0)
    {
        Sleep(1);
        x+=dx;
        y+=dy;
        SetCursorPos(x,y);
    }


Не знаю, где там буква Г

PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0522 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.