что-то вроде selection tool

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

twinzco
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 22.05.2006 (Пн) 23:36

что-то вроде selection tool

Сообщение twinzco » 27.05.2006 (Сб) 3:48

Я пытаюсь на изображении в picturebox мышкой рисовать рамку. Делаю это с помощью таймера, т.е. в mousedown запоминаю стартовые координаты, в mousemove - текущие, в таймере рисуется прямоугольник, и сразу вызываю invalidate. Но, все достаточно сильно мерцает, даже при установке интервала таймера в 1 ms и включения двойной буфферизации. Подскажите, как лучше реализовать такую задачу, у меня к сожалению, пока ничего не получается. :?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 27.05.2006 (Сб) 6:05

Причем интересно тут таймер? Хочу лицезреть код!
Весь мир матрица, а мы в нем потоки байтов!

twinzco
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 22.05.2006 (Пн) 23:36

Сообщение twinzco » 27.05.2006 (Сб) 11:19

Код: Выделить всё
Private Sub pic_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles pic.MouseMove
        curx = e.X
        cury = e.Y
    End Sub

    Private Sub pic_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles pic.MouseDown
        If e.Button = MouseButtons.Left Then
            startx = pic.Location.X
            starty = pic.Location.Y
            myTime.Interval = 1
            myTime.Enabled = True
            myTime.Start()
            counter = True
        End If
    End Sub

    Private Sub myTime_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles myTime.Tick
        If counter Then
            gr = pic.CreateGraphics
            gr.DrawRectangle(Pens.Black, startx, starty, curx - startx, cury - starty)
            pic.Invalidate()
            gr.Dispose()
        End If
    End Sub
    Private Sub pic_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles pic.MouseUp
        myTime.Stop()
        myTime.Enabled = False
    End Sub
Код: Выделить всё


Только если не таймер, то как? Мне же нужно, чтобы само изображение не менялось.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 27.05.2006 (Сб) 11:26

Собственно такие штуки делаются при помощи XOR-пера. На VB.NET (по крайней мере до версии 2005) такой штуки нет, но где-то год назад тема поднималась, какое то решение было найдено. Стоит поискать.

Добавлено:

А вот и ссылочки:

http://bbs.vbstreets.ru/viewtopic.php?t=17239&highlight=xor
http://bbs.vbstreets.ru/viewtopic.php?t=17151&highlight=xor
http://bbs.vbstreets.ru/viewtopic.php?t=4834&highlight=xor
Весь мир матрица, а мы в нем потоки байтов!

twinzco
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 22.05.2006 (Пн) 23:36

Сообщение twinzco » 27.05.2006 (Сб) 12:00

А в версии VS.NET 2005 уже есть? А как пользоваться?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 29.05.2006 (Пн) 11:07

twinzco писал(а):А в версии VS.NET 2005 уже есть? А как пользоваться?


вроде как тоже нет :(
Весь мир матрица, а мы в нем потоки байтов!

twinzco
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 22.05.2006 (Пн) 23:36

Сообщение twinzco » 30.05.2006 (Вт) 1:24

В принципе, меня устроил вариант с отрисовкой в разных битмапах, так что спасибо за ссылки.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 74

    TopList  
cron