جابجای کنترل ها و ماوس در ویژوال بیسیک

باز هم سلام
1-چطوري مي شه در زمان حالت اجراي برنامه بشود يك كليد يا... حركت داد؟
2- چطوري مي شه وقتي كه موس روي كليد مي يايد اون كليد از گير موس فرار كند و نشوند روي ان كليد كليك كرد؟
3-چطوري مي شه وقتي با موس روي كليد مي يايم اون كليد به همراه موس حركت كند؟
 

the_king

مدیرکل انجمن
باز هم سلام
1-چطوري مي شه در زمان حالت اجراي برنامه بشود يك كليد يا... حركت داد؟
همه کنترل هایی که روی فرم قرار می دهید یک مشخصه Left و یک مشخصه Top دارند که موقعیت شان را روی
صفحه نشان می دهد. می توانید با تغییر دادن مستقیم این دو مشخصه یا استفاده کردن از تابع Move آنها را
جابجا کنید.

مثال : یک CommandButton با نام Command1 و یک Timer با نام Timer1 روی فرم قرار دهید و کد زیر رو در فرم
نوشته و اجرا کنید :

کد:
Option Explicit

Private x As Long, Step As Long

Private Sub Form_Load()
    Timer1.Interval = 15
    x = Command1.Left
    Step = 30
End Sub

Private Sub Timer1_Timer()
    x = x + Step
    If x < 0 Or x > Width - Command1.Width Then Step = -Step
    Command1.Left = x
End Sub

2- چطوري مي شه وقتي كه موس روي كليد مي يايد اون كليد از گير موس فرار كند و نشوند روي ان كليد كليك كرد؟
اگه بخواهید الگوریتم دقیقی بنویسید باید از توابع API ویندوز کمک بگیرید.
مثال : یک CommandButton با نام Command1 و یک Timer با نام Timer1 روی فرم قرار دهید و کد زیر رو در فرم
نوشته و اجرا کنید :
کد:
Option Explicit

Private Type POINTAPI
    X As Long
    Y As Long
End Type

Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Private Declare Function GetCursorPos Lib "user32.dll" (ByRef lpPoint As POINTAPI) As Long
Private Declare Function WindowFromPoint Lib "user32.dll" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function GetWindowRect Lib "user32.dll" (ByVal hWnd As Long, ByRef lpRect As RECT) As Long

Private Sub Form_Load()
    Timer1.Interval = 15
End Sub

Private Sub Timer1_Timer()
    Dim Pos As POINTAPI
    Dim R As RECT
    Dim X As Long, Y As Long
    GetCursorPos Pos
    If WindowFromPoint(Pos.X, Pos.Y) = Command1.hWnd Then
        GetWindowRect Command1.hWnd, R
        If (R.Left + R.Right) \ 2 > Pos.X Then
            X = Pos.X - R.Left
        Else
            X = Pos.X - R.Right
        End If
        If (R.Top + R.Bottom) \ 2 > Pos.Y Then
            Y = Pos.Y - R.Top
        Else
            Y = Pos.Y - R.Bottom
        End If
        Command1.Move Command1.Left + X * Screen.TwipsPerPixelX * 2, Command1.Top + Y * Screen.TwipsPerPixelY * 2
    End If
End Sub


3-چطوري مي شه وقتي با موس روي كليد مي يايم اون كليد به همراه موس حركت كند؟
کافی است برای رخداد های ماوس در روی کنترل کد بنویسید.
مثال : یک CommandButton با نام Command1 روی فرم قرار دهید و کد زیر رو در فرم
نوشته و اجرا کنید :
کد:
Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Command1_MouseMove -1, Shift, X, Y
End Sub

Private Sub Command1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Static XX As Single, YY As Single
    If Button = -1 Then
        XX = X
        YY = Y
    ElseIf Button <> 0 Then
        Command1.Move Command1.Left + X - XX, Command1.Top + Y - YY
    End If
End Sub
 

1qazxsw255555

New Member
سلام میخواستم در ویژوال بیسیک یک بازی ساختم میخواستم بدونم چه کدی را بزنم موس بیاد از یک جا وایسا و خودکار همون جا باشه وقتی پروژه را اجرا میکنم موس همون جا باش
 

the_king

مدیرکل انجمن
سلام میخواستم در ویژوال بیسیک یک بازی ساختم میخواستم بدونم چه کدی را بزنم موس بیاد از یک جا وایسا و خودکار همون جا باشه وقتی پروژه را اجرا میکنم موس همون جا باش
در ویژوال بیسیک 6 (کلاسیک) فرضا انتقال به موقعیت (100,100) صفحه نمایش
کد:
Private Declare Function SetCursorPos Lib "user32.dll" (ByVal x As Long, ByVal y As Long) As Long

Private Sub Command1_Click()
    SetCursorPos 100, 100
End Sub
موقعیت بر اساس گوشه صفحه نمایش است، لذا اگر بخواهید ماوس روی یک جای خاص از فرم خودتان قرار بگیرد باید موقعیت نسبی داخل فرم را به موقعیت بر اساس صفحه نمایش تبدیل کنید.
مثلا قرار گرفتن روی یک TextBox به نام Text1 که روی فرم قرار دارد :
کد:
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Private Declare Function SetCursorPos Lib "user32.dll" (ByVal x As Long, ByVal y As Long) As Long
Private Declare Function GetWindowRect Lib "user32.dll" (ByVal hwnd As Long, ByRef lpRect As RECT) As Long

Private Sub Command1_Click()
    Dim r As RECT
    GetWindowRect Text1.hwnd, r
    SetCursorPos r.Left + 10, r.Top + 10
End Sub

در ویژوال بیسیک NET. کد ساده تر است. انتقال به موقعیت (100,100) صفحه نمایش :
کد:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Cursor.Position = New Point(100, 100)
End Sub

و انتقال به روی یک TextBox به نام textBox1 :
کد:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim pos As Point = TextBox1.Parent.PointToScreen(TextBox1.Location)
    Cursor.Position = New Point(pos.X + 10, pos.Y + 10)
End Sub
 

جدیدترین ارسال ها

بالا