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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хочу, чтобы можно было двигать картинку в окне, Мышкой а не ScrollBar-ом 
V
    Опции темы
nikaan
Дата 8.4.2009, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

Это надо картинку сделать control-ом и видимым только один кусок ?
И тогда юзер будет как будто control перемещать?
PM MAIL   Вверх
Retro
Дата 8.4.2009, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Диалектик
***


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

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



nikaan, в чем вопрос? Как делать Драг энд Дроп? Или как отображать только часть картинки?
PM MAIL   Вверх
nikaan
Дата 8.4.2009, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



 на худой конец как обрабатывать  drag and drop...

По идее ведь это не должно быть так, чтобы самому писать и заново перерисовывать.

Т.е. так, уточню : не хочется перерисовывать картинку(хотя при scrollbarах вроде надо перерисовывать)

А если нельзя - то да, как обрабатывать этот самый дроп, чтобы понятно было как перерисовывать...

Это сообщение отредактировал(а) nikaan - 8.4.2009, 13:53
PM MAIL   Вверх
diadiavova
Дата 8.4.2009, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Можно забить картинку в пикчербокс и двигать его.
Пример


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
nikaan
Дата 9.4.2009, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Оно самое.
Большое спасибо.
PM MAIL   Вверх
nikaan
Дата 9.4.2009, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ан нет, не всё.
Мне вообще ,по хорошему, надо, чтобы 4 картинки отображались в 4 окошках. И синхронно двигались, когда мы их лапкой двигаем.

Сделать один большой пикчербокс на 4 картинки не поможет тут :(

Добавлено через 19 секунд
так что вопрос остаётся.
PM MAIL   Вверх
nikaan
Дата 9.4.2009, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



снят вопрос. Всё просто smile
PM MAIL   Вверх
Zakonnic
Дата 9.4.2009, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Можно программно, через событие Paint:
Код


        // такскание правой кнопкой мыши

        Point loc = Point.Empty;
        float x, y;
        float w, h;

        private void panel1_MouseUp(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                loc = Point.Empty;
            }
        }

        private void panel1_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                if (loc != Point.Empty)
                {
                    this.x += e.X - loc.X;
                    this.y += e.Y - loc.Y;

                    panel1.Refresh();
                }
                
                loc = e.Location;
            }
        }

        private void panel1_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.DrawImage(_bmp, x, y, w, h); // здесь лучше задать еще границы области отрисовки            
        }


        // масштабирование 

        void panel1_MouseWheel(object sender, MouseEventArgs e)
        {
            if (e.Delta > 0)
            {
                h *= 1.1f;
                w *= 1.1f;
                x *= 1.1f;
                y *= 1.1f;
            }
            else
            {
                h /= 1.1f;
                w /= 1.1f;
                x /= 1.1f;
                y /= 1.1f;
            }

            panel1.Refresh();
        }

Код старый, писан на коленке в целях тестирования. К нему можно двойную буферизацию приделать - создать класс, отнаследованный от нужного контрола, и использовать его:
Код

    public class BufferedPanel : Panel
    {
        public BufferedPanel()
        {
            SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);
        }
    }

--------------------
...и никогда не пишите в комментариях правду
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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