Điều khiển vị trí của Shape trên UserForm

Liên hệ QC

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,952
Tôi làm 1 file với 1 UserForm và Shape di chuyển trên đó. Có điều tôi không tài nào điều khiển được vị trí của Shape
Các bạn xem đoạn video clip này:

[video=youtube;iWywervo5O8]http://www.youtube.com/watch?v=iWywervo5O8[/video]

Các bạn cũng thấy rằng Shape chưa chạm được đến cạnh dưới và cạnh phải của UserForm mà đã "vội" chuyển hướng rồi
Xem code thì thấy chẳng có điểm nào không hợp lý cả:
PHP:
Sub TimeProc()
  On Error Resume Next
  With UserForm1
    If .CheckBox1 = False Then .Repaint
    DoEvents
    DrawEllipse lLeft, lTop, lWidth, lHeight
    If lLeft <= 0 Then wWay = 1
    If lLeft >= .Width - lWidth Then wWay = -1
    If lTop <= 0 Then hWay = 1
    If lTop >= .Height - lHeight Then hWay = -1
  End With
  lLeft = lLeft + 2 * wWay
  lTop = lTop + 2 * hWay
End Sub
Với:
- lLeft, lTop, lWidth, lHeight là vị trí và kích thước của Shape
- wWayhWay là véc tơ chỉ hướng dọc ngang
--------------------------------------------------------------------
Các bạn chạy code trong file đính kèm và xem giúp có điểm nào chưa ổn không? Giúp tôi với nhé
(Có cảm giác phải đổi các chỉ số Left, Top, Width, Height của UserForm ra đơn vị gì đó thì mới được...)
 

File đính kèm

bác ơi, em ko xem dc code,em ko rõ về phần làm quả bóng chuyển động, phan xạ,mong bác chỉ giáo cho chút ít, bác reply lại cho em nha.Ca?m ơn bác
nhiều
Bạn bấm Alt + F11 sẽ thấy code thôi
Phần điều khiển chuyển động và phản xạ nằm ở chổ này:
PHP:
Sub TimeProc1()
  On Error Resume Next
  DrawEllipse hDC, lLeft1, lTop1, lWidth1, lHeight1, vbRed
  With Rec
    If lLeft1 <= 0 Then wWay1 = 1
    If lLeft1 >= .Right - .Left - lWidth1 Then wWay1 = -1
    If lTop1 <= 0 Then hWay1 = 1
    If lTop1 >= .Bottom - .Top - lHeight1 Then hWay1 = -1
  End With
  lLeft1 = lLeft1 + 2 * wWay1
  lTop1 = lTop1 + 2 * hWay1
End Sub
PHP:
Sub TimeProc2()
  On Error Resume Next
  UserForm1.Repaint
  DrawEllipse hDC, lLeft2, lTop2, lWidth2, lHeight2, vbBlue
  With Rec
    If lLeft2 <= 0 Then wWay2 = 1
    If lLeft2 >= .Right - .Left - lWidth2 Then wWay2 = -1
    If lTop2 <= 0 Then hWay2 = 1
    If lTop2 >= .Bottom - .Top - lHeight2 Then hWay2 = -1
  End With
  lLeft2 = lLeft2 + 2 * wWay2
  lTop2 = lTop2 + 2 * hWay2
End Sub
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom