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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [VC#] PictureBox - прокрутка ихображения мышью, Как изменять положение картинки при изме 
V
    Опции темы
MuForum
Дата 1.9.2008, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 427
Регистрация: 13.6.2007
Где: Молдова, Кишинев

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



Доброе время суток!
- Использую 'MVS2008', C#, '.NET 2.0'.
- Работаю с компонентом 'PictureBox'.
- Необходимо изменять положение картинки при передвижение мыши.
- То есть, если картинка больше размеров отображения компонента 'PictureBox', то зажав левый клик мыши и изменяя положение мыши относительно системы необходимо перемещать изображение.
- Я вроде сделал это, по почему-то слишком резко перемещается картинка.
- Для прокрутки использовал компоненты:
Код

        private VScrollBar g_vScrollBar;
        private HScrollBar g_hScrollBar;
        private bool _MoveImage = false;
        private Point MovePoint = Point.Empty;
        // ----------------------------------------------------------------------

        private void FMain_Load(object sender, EventArgs e)
        {
            g_hScrollBar = new HScrollBar();
            g_hScrollBar.Visible = false;
            g_hScrollBar.Dock = DockStyle.Bottom;
            g_vScrollBar = new VScrollBar();
            g_vScrollBar.Visible = false;
            g_vScrollBar.Dock = DockStyle.Right;
            // ----
            pb_main.Controls.Add(g_hScrollBar);
            pb_main.Controls.Add(g_vScrollBar);
            // ----
            g_hScrollBar.Scroll += new ScrollEventHandler(g_hScrollBar_Scroll);
            g_vScrollBar.Scroll += new ScrollEventHandler(g_vScrollBar_Scroll);
        }
        // ----------------------------------------------------------------------

        private void pb_main_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                pb_main.Cursor = TCursor.GetCursor("PanToolCursorMouseDown.cur");
                //MovePoint = Cursor.Position;
                MovePoint = e.Location;
                MoveImage = true;
            }
        }
        // ----------------------------------------------------------------------

        private void pb_main_MouseUp(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                MoveImage = false;
                pb_main.Cursor = TCursor.GetCursor("PanToolCursor.cur");
            }
        }
        // ----------------------------------------------------------------------

        private void pb_main_MouseMove(object sender, MouseEventArgs e)
        {
            if (TSaveImage.MoveImage)
            {
                int CorX = ((MovePoint.X - e.X) / 10);
                int CorY = ((MovePoint.Y - e.Y) / 10);
                //int CorX = ((MovePoint.X - Cursor.Position.X) / 10);
                //int CorY = ((MovePoint.Y - Cursor.Position.Y) / 10);
                int CorX2 = g_hScrollBar.Value + CorX;
                int CorY2 = g_vScrollBar.Value + CorY;
                // ----
                if (CorX2 >= 0 && CorX2 <= g_hScrollBar.Maximum) g_hScrollBar.Value += CorX;
                if (CorY2 >= 0 && CorY2 <= g_vScrollBar.Maximum) g_vScrollBar.Value += CorY;
                pb_main.Refresh();
            }
        }
        // ----------------------------------------------------------------------




P.S. -> Прорисовка изображения осуществляется в обработчике 'pb_main_Paint()'
- Что не так парни?
- Смотрел в редактораз 'ACD Photo Editor', 'Paint.NET', там изменения положения мышью делается плавно, а в моём случае очень резко =(


# Добавленo: Вроде с резкостью прокрутки разобрался(поделил изменяемый кофициент на 10), но вот присутствует недочёт, что когда ведёшь в одну сторону, затем начинаешь ввести в другую, изображения почему-то продолжает двигаться в противоположную, пока не отпустишь левый клик и снова не зажмёшь.

Это сообщение отредактировал(а) MuForum - 2.9.2008, 00:31


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
Alekz
Дата 2.9.2008, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(MuForum @ 1.9.2008,  23:52)
Код

              private void pb_main_MouseMove(object sender, MouseEventArgs e)
        {
            if (TSaveImage.MoveImage)
            {
                int CorX = ((MovePoint.X - e.X) / 10);
                int CorY = ((MovePoint.Y - e.Y) / 10);
                //int CorX = ((MovePoint.X - Cursor.Position.X) / 10);
                //int CorY = ((MovePoint.Y - Cursor.Position.Y) / 10);
                int CorX2 = g_hScrollBar.Value + CorX;
                int CorY2 = g_vScrollBar.Value + CorY;
                // ----
                if (CorX2 >= 0 && CorX2 <= g_hScrollBar.Maximum) g_hScrollBar.Value += CorX;
                if (CorY2 >= 0 && CorY2 <= g_vScrollBar.Maximum) g_vScrollBar.Value += CorY;
                pb_main.Refresh();
            }
        }


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

Ты все время отсчитываешь перемещение от MovePoint.
Значит после каждого перемещения в обработчике MouseMove MovePoint нужно модифицировать.
Что-то типа 

MovePoint = e.Location;
PM MAIL   Вверх
MuForum
Дата 2.9.2008, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 427
Регистрация: 13.6.2007
Где: Молдова, Кишинев

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



Цитата(Alekz @ 2.9.2008,  09:18)
Ты все время отсчитываешь перемещение от MovePoint.
Значит после каждого перемещения в обработчике MouseMove MovePoint нужно модифицировать.
Что-то типа 

MovePoint = e.Location;

Точно, ступил малость.
- Исправил и всё работает как надо, благодарю за подсказку.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

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


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

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


 




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


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

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