Программирование
Веб программирование

Графика в visual basic

 
 

Часто народ спрашивает: "Как убрать мерцание при передвижение объектов??? КАК?????". Вобще для этого есть DirectX, но его хрен два освоишь(по себе знаю), а есть еще и функция BitBlt. У ней возможности намного меньше, но работать с графикой без мерцания она может. Начнем`с... Сделаем программу которая будет перемещать наш рисунок, БЕЗ мерцания.
На форму кинь, Таймер, Picture, и засунь туды какой - нибуть рисунок(главное чтоб не очень большой, можешь мою фотку взять:

Падре)

Теперь установи свойства для формы:
Form1:
Scalemode = 3-Pixel AutoRedraw = True

Теперь свойства для Picture1:
ScaleMode 3-Pixel
Picture1 AutoRedraw True
Picture1 Visible False

У таймера:
Timer1 Interval 1

Код:

' Объявляем API
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Dim x As Long, y As Long

Private Sub Form_Load()
Draw ' Запускаем функцию
x = 0
y = 0
End Sub

Function Draw() ' Функция Draw
Form1.Cls ' Очищаем форму
' При помощи функции BitBlt берем картинку из Picture1(ширина и высота картинки равна ширине и высоте Picture1), и начинаем рисовать ее на форме с координатами x и y
BitBlt Form1.hDC, x, y, Picture1.ScaleWidth, Picture1.ScaleHeight, Picture1.hDC, 0, 0, vbSrcCopy 
Form1.Refresh ' Обновляем форму(при использование свойства AutoRedraw = True, форму надо всегда обновлять...)
End Function

Private Sub Timer1_Timer()
' Перемещаем картинку в право на 1 пиксель
x = x + 1
' Опускаем ее вниз
y = y + 1
' Повторяем функцию Draw
Draw
End Sub

Исходник ищи Здесь


Есть вопросы? Спроси на нашем форуме!!
Татьяна [28.01.2010 13:58]

Искала урок Paint на VB, не нашла, а когда-то я его у вас встречала. Срочно надо рисовать на форме мышкой!!!!! хЕЛП!!!

Дима [06.12.2010 21:13]

Хм, а как понять нули тут:
(которые после Picture1.hDC)

BitBlt Form1.hDC, x, y, Picture1.ScaleWidth, Picture1.ScaleHeight, Picture1.hDC, 0, 0, vbSrcCopy

Что они означают??
и что значит hDC
Обьясните пожалуйста, очень прошу!

Владимир [14.12.2010 15:31]

Скажите, а как сделать так, чтобы передвигающаяся картинка была ещё и связана с передвиганием "ползунка" TrackBar, т.е. чтобы эта картинка передвигалась на определенное расстояние при помощи ползунка.

alex13sh [16.03.2011 20:47]

Искала урок Paint на VB, не нашла, а когда-то я его у вас встречала. Срочно надо рисовать на форме мышкой!!!!! хЕЛП!!!


вот код :
Dim n As Byte

Private Sub FormMouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
n = 1
End Sub

Private Sub Form
MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If n = 1 Then
Form1.DrawWidth = 4
PSet (X, Y)
End If
End Sub

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
n = 0
End Sub

Вот не большой код, вполне достаточно им риовать на форме) [31.05.2011 11:34]

Private Sub FormMouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then PSet (X, Y) 'Если левая клавиша мыши нажата, то рисуем
End Sub
Private Sub Form
MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then DrawWidth = DrawWidth + 1 'Если правая клавиша мыши нажата, то увеличиваем толщину линии
End Sub

Гость [03.08.2011 15:16]

BitBlt не помогает, при передвижении картинки мерцают. Это только в VB или в C++ тоже самое с BitBlt и надо только через DirectX, OpenGL

Александр [04.09.2011 17:56]

Dim i As Variant
Dim q As Boolean

Private Sub Command1Click()
Unload Shape1(i)
i = i - 1
End Sub

Private Sub Command2
Click()
If q = True Then
i = i + 1
Load Shape1(i)
Shape1(i).Top = Label(1).Caption
Shape1(i).Left = Label(0).Caption
Shape1(i).Visible = True
End If
End Sub

Private Sub FormMouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
q = False
End Sub

Private Sub Form
MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Label(0).Caption = X
Label(1).Caption = Y
End Sub

Private Sub FormMouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
q = True
End Sub

Private Sub Label
Change(Index As Integer)
Ris
End Sub
Sub Ris()
If q = True Then
i = i + 1
Load Shape1(i)
Shape1(i).Top = Label(1).Caption
Shape1(i).Left = Label(0).Caption
Shape1(i).Visible = True
End If
End Sub

Нуб [17.02.2012 17:52]

помогите киньте ссылку на DirectX

и мне [19.03.2012 14:41]

пожалйста директ 7 для вб

И мне тоже! [23.03.2012 21:43]

только чтоб понятным языком написано было))

werylazy20 [12.01.2015 03:17]

«а как установить картинку в конце формы и запустить новую форму»?

pjp07190 [12.01.2015 08:32]
  1. Размещаешь PictureBox1 и кнопку Command1 на Form1
  2. Добавляешь в проект Form2

    Private Sub Command1_Click()
    Picture1.Top = Form1.Height - Picture1.Height - 700
    Picture1.Left = Form1.Width - Picture1.Width - 700
    Form2.Show
    End Sub
Stertor370 [12.01.2015 22:31]

Размещаешь PictureBox1

Image? Нет, не приходилось слышать..



Оставлять комментарии можно только зарегистрированным




Предупреждение: Вся информация представлена исключительно в образовательных целях.
Ни авторы, ни администрация не несут ответственности в случае ее использования в противозаконных целях.