Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / не получается поимать коардинаты мышки / 9 сообщений из 9, страница 1 из 1
24.12.2016, 20:39
    #39374532
IgorShal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не получается поимать коардинаты мышки
застрял как поимать коардинаты мышки на входе в кнопку...ловить получается но не получается поимать самую первую коардинату на входе и тогда получится расчитать с какой стороны был вход..я так думаю...или есть болие умный вариант?:)

вход допускается только с правой стороны. при входе в любую другую сторону кнопка меняет цвет и запрещенные вызовы EventHandlers то есть кнопка не становится дисейбл или скрытой (Visible), потому что тогда мы больше не будут получать события от кнопки, и это нас не устраивает.
Чтобы пометить пользователю что разрешается вводить только с правой стороны мы красим толстые линии 8 пикселей на всех других сторонах зеленой кнопки. (прикрепил картинку)

использую mousehover  и mousemove
для возврата в нормальное состаяние mouseleave
...
Рейтинг: 0 / 0
25.12.2016, 09:57
    #39374666
Ken@t
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не получается поимать коардинаты мышки
IgorShal,

1. В случае тача , ваша логика не работает.
2. Движением называется изменение состояния физической системы с течением времени.
Следствие: необходимо не определение идиотической первой точки , а определение вектора движения.
...
Рейтинг: 0 / 0
25.12.2016, 12:32
    #39374699
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не получается поимать коардинаты мышки
Логика может не сработать и в случае мыши, ибо при резком движении мыши курсор перемещается скачками (Штирлиц бежал скачками....)

Так что придется отслеживать ВСЕ перемещения мыши, и в момент mouseenter строить этот вектор от предыдущей точки.
...
Рейтинг: 0 / 0
25.12.2016, 14:17
    #39374743
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не получается поимать коардинаты мышки
Shocker.Proи в момент mouseenter строить этот вектор от предыдущей точки.
Меня данная задачка заинтересовала и я провел несколько экспериментов.

Нет такого момента, если двигать мышью достаточно быстро. Не - и все.
Так же не возникают события mousemove и mouseleave
...
Рейтинг: 0 / 0
25.12.2016, 15:43
    #39374784
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не получается поимать коардинаты мышки
Cat2,

Что ты имеешь ввиду? Что курсор просто "перепрыгивает" через кнопку на большой скорости?
Или что ты можешь поймать на кнопке mouseover без предшествующего mouseenter?
...
Рейтинг: 0 / 0
25.12.2016, 16:43
    #39374811
IgorShal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не получается поимать коардинаты мышки
Cat2,

у меня пока что не получается поймать ету точку

class GateButton : Button
{

protected override void OnPaint(PaintEventArgs pevent)
{
base.OnPaint(pevent);
Graphics g = pevent.Graphics;
Pen green_pen = new Pen(Color.Green, 8);
g.DrawLine(green_pen, 0, 3, Width, 3);
g.DrawLine(green_pen, 0, Height - 3, Width, Height - 3);
g.DrawLine(green_pen, 3, 0, 3, Height);


}


protected override void OnMouseMove(MouseEventArgs e)
{


if ((e.Location.X == (this.Size.Width )))// && (e.Location.Y >= this.Size.Height-10))
{
this.BackColor = Color.Green;
}
base.Text = base.Location.X + ":" + base.Location.Y;

base.OnMouseMove(e);
}

protected override void OnMouseLeave(EventArgs e)
{
base.BackColor = SystemColors.Control;
base.OnMouseLeave(e);
}
...
Рейтинг: 0 / 0
25.12.2016, 16:51
    #39374816
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не получается поимать коардинаты мышки
Shocker.ProCat2,

Что ты имеешь ввиду? Что курсор просто "перепрыгивает" через кнопку на большой скорости?
Или что ты можешь поймать на кнопке mouseover без предшествующего mouseenter?
Что "перепрыгивает"
...
Рейтинг: 0 / 0
25.12.2016, 17:18
    #39374820
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не получается поимать коардинаты мышки
IgorShal,

Я поначалу решил, что проще сделать "ворота" через которые над обязательно пройти. Прилепил к правому краю кнопки панельку. Если заходя на кнопку проходишь через панель - все хорошо.

Оказалось, что ни одно событие движения мыши не срабатывает над панелью, если ее ширина мала.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
bool enter = false;
        private void button1_MouseEnter(object sender, EventArgs e)
        {
            if (enter)
            {
                enter = false;
                this.Text = "Добро пожаловать!";
            }
            else
            {
               
                this.Text = "Вход запрещен!";
            }
        }

        private void panel1_MouseEnter(object sender, EventArgs e)
        {
            enter = true;
        }

        private void panel1_MouseLeave(object sender, EventArgs e)
        {
            enter = true;
        }

        private void panel1_MouseMove(object sender, MouseEventArgs e)
        {
            enter = true;
        }
...
Рейтинг: 0 / 0
25.12.2016, 22:50
    #39374901
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не получается поимать коардинаты мышки
Cat2Оказалось, что ни одно событие движения мыши не срабатывает над панелью, если ее ширина мала.и я о том - про перепрыгивание.
Когда курсор двигаешь быстро - его координаты меняются скачками, а не плавно, поэтому курсор и перепрыгивает через твои ворота.
Поэтому принципиально знать предыдущую точку, до входа курсора в кнопку



IgorShal,

Как мне оформить свое сообщение?
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / не получается поимать коардинаты мышки / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]