Модераторы: Partizan, gambit

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Компонент координатная сетка 
V
    Опции темы
mr.DUDA
Дата 16.3.2006, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Цитата(4YBAK @ 16.3.2006, 12:41 Найти цитируемый пост)
В данном коде отклонение мыши накапливается, т.е. надо какое-то время (расстояние) вести мышью, чтобы она перепрыгнула на следующий узел. А как сделать, чтобы провел мышью один пиксел влево - она и прыгнула на узел влево, провел - вверх - прыгнула вверх и т.д.
Ну, конечно, один пиксел это мало. В этом случае попасть в нужный узел будет невозможно. Лучше взять пикселов 10. При этом чтоб шаг прыжка по-прежднему оставался 50.
Добавлено @ 12:44
Т.е. проехали вправо 10 пикселов, после чего совершаем прыжок на 50, считая от начальной точки(предыдущего узла)


Умножаем отклонение мыши на целый коэффициент:
Код
// добавляем отклонения мыши в накапливаемые значения
_accumDX += 2 * (pt.X - _prevX);
_accumDY += 2 * (pt.Y - _prevY);





--------------------
user posted image
PM MAIL WWW   Вверх
4YBAK
Дата 16.3.2006, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Стопудова!!! Пасиб!
И еще одна проблема: если поездить мышой за пределами формы, она потом по форме вообще прыгать не будет....

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


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Цитата(4YBAK @ 16.3.2006, 14:08 Найти цитируемый пост)
И еще одна проблема: если поездить мышой за пределами формы, она потом по форме вообще прыгать не будет....

Это надо обрабатывать уход и приход курсора на форму и соответственно приостанавливать обновление _accumDX/DY и сбрасывать их в 0. Поищи события типа MouseLive, MouseHover...


--------------------
user posted image
PM MAIL WWW   Вверх
Exception
Дата 16.3.2006, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(mr.DUDA @ 16.3.2006, 17:06 Найти цитируемый пост)
MouseLive

живая мышь smile )))
MouseLeave smile
PM   Вверх
4YBAK
Дата 16.3.2006, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



При наведении мыша на форму установил отклонение=0 но ниче не изменилось...
Код

private void Form1_MouseHover(object sender, System.EventArgs e)
        {
            _accumDX=0;
            _accumDY=0;
                    

PM MAIL   Вверх
mr.DUDA
Дата 16.3.2006, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



А ларчик просто открывался... smile

Код
        private void Form1_MouseEnter(object sender, EventArgs e)
        {
            _first = true;
        }

Добавлено @ 18:39
З.Ы. там ещё неприятный глючок есть: при заходе курсора на форму справа или снизу, форма "не пускает" курсор до определённого момента, с этим уже разбирайтесь сами...


--------------------
user posted image
PM MAIL WWW   Вверх
4YBAK
Дата 16.3.2006, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Действительно просто! )


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


Бывалый
*


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

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



Кстати, если поставить
_accumDX += 3*(pt.X - _prevX);
_accumDY += 3*(pt.Y - _prevY);
то форма без проблем пускает курсор...
Добавлено @ 21:06
Главное вести им не очень медленно....
Добавлено @ 21:08
Еще вопросец: зачем давать имя переменной, начинающееся с "_"?

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


Бывалый
*


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

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



Блин, фигня какая-то.
Мне нужно при клике мыши отловить ее координаты...
Для примера положим, что мне надо вывести их на лабеле:
Код

private void panel1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
label1.Text=e.X.ToString()+ " "+e.Y.ToString();
}

Но почему-то координаты выводятся только после того, как мыша покинет пределы етого самого панела. (Все, что было написано выше, я переделал под панел. Т.е. было Form1_MouseMove, стало Panel1_MouseMove и т.д.) А мне надо их вывести сразу, чтоб можно было тут же кликнуть в другом месте, и вывести уже другие координаты...


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

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


Почётный халявщик
**


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

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



Цитата(4YBAK @ 16.3.2006, 21:05 Найти цитируемый пост)
зачем давать имя переменной, начинающееся с "_"?


Признак локальной переменной.


--------------------
3 ГОДА НА user posted image 
PM MAIL ICQ   Вверх
mr.DUDA
Дата 16.3.2006, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Цитата(4YBAK @ 16.3.2006, 20:58 Найти цитируемый пост)
Но почему-то координаты выводятся только после того, как мыша покинет пределы етого самого панела.

Это лечится так: вместо Cursor.Position=pt делаем
Код
                if(Cursor.Position != pt)
                    Cursor.Position = pt;



Цитата(4YBAK @ 16.3.2006, 20:58 Найти цитируемый пост)
з.ы. всетки панел не пускает мышь, и это немного нервирует, так что буду благодарен за помощь в решении этой проблемы ))

Пишу же "сами решайте"... всё-таки смекалку надо проявлять хоть изредка и самому ! smile

Цитата(4YBAK @ 16.3.2006, 20:05 Найти цитируемый пост)
Еще вопросец: зачем давать имя переменной, начинающееся с "_"?

Это всего моя старая привычка: раньше везде употреблял "m_Переменная", после перехода на шарп как-то роднее стали имена полей, начинающиеся с маленькой буквы, а чтобы не терять преимущества работы с IntelliSence (и не путать локальные переменные методов с полями), первый символ всегда ставлю "_". Иногда даже "__" - это для особо скрытных мега-методов и полей, которые никому показывать низзя smile
Добавлено @ 22:29
Цитата(VisualProgrammerNET @ 16.3.2006, 21:21 Найти цитируемый пост)
Признак локальной переменной.

наоборот, признак поля объекта класса smile


--------------------
user posted image
PM MAIL WWW   Вверх
VisualProgrammerNET
Дата 16.3.2006, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почётный халявщик
**


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

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



я обычно ставлю у всех private "_". Думал, у тебя так же smile


--------------------
3 ГОДА НА user posted image 
PM MAIL ICQ   Вверх
mr.DUDA
Дата 16.3.2006, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Цитата(VisualProgrammerNET @ 16.3.2006, 21:30 Найти цитируемый пост)
я обычно ставлю у всех private "_". Думал, у тебя так же

ну дык я про то же и говорю smile...
а у тебя было другое:

Цитата(VisualProgrammerNET @ 16.3.2006, 21:21 Найти цитируемый пост)
зачем давать имя переменной, начинающееся с "_"?
Признак локальной переменной.



--------------------
user posted image
PM MAIL WWW   Вверх
4YBAK
Дата 17.3.2006, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(mr.DUDA @ 16.3.2006, 22:27 Найти цитируемый пост)

if(Cursor.Position != pt)
Cursor.Position = pt;

Ай пасиба!!!

А как сделать, чтоб мышь не прыгала постоянно по узлам, т.е. ездила плавно, а прыгала на ближайший узел только при клике? Подозреваю, надо всего пару строчек кода поменять smile


PM MAIL   Вверх
mr.DUDA
Дата 17.3.2006, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Цитата(4YBAK @ 17.3.2006, 00:47 Найти цитируемый пост)
А как сделать, чтоб мышь не прыгала постоянно по узлам, т.е. ездила плавно, а прыгала на ближайший узел только при клике? Подозреваю, надо всего пару строчек кода поменять

грррррррр.... smile

Код
using System;
using System.Drawing;
using System.Windows.Forms;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        int _accumDX = 0, _accumDY = 0;
        int _prevX, _prevY;
        bool _first = true;
        
        private void panel1_MouseEnter(object sender, EventArgs e)
        {
            _first = true;
        }

        private void panel1_MouseMove(object sender, MouseEventArgs e)
        {
            int step = 50;

            Point pt = Cursor.Position;

            if(!_first)
            {
                _accumDX += pt.X - _prevX;
                _accumDY += pt.Y - _prevY;
                int dx = step * (_accumDX / step);
                int dy = step * (_accumDY / step);
                if(dx != 0)
                {
                    _accumDX -= dx;
                    pt.X += dx;
                }
                if(dy != 0)
                {
                    _accumDY -= dy;
                    pt.Y += dy;
                }
                pt.X += step / 2 - pt.X % step;
                pt.Y += step / 2 - pt.Y % step;
            }

            _prevX = pt.X;
            _prevY = pt.Y;
            _first = false;
        }

        private void panel1_MouseDown(object sender, MouseEventArgs e)
        {
            Cursor.Position = new Point(_prevX, _prevY);
        }
    }
}



--------------------
user posted image
PM MAIL WWW   Вверх
Страницы: (3) Все 1 [2] 3 
Закрытая темаСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


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

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


 




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


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

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