منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : تحريك النموذج ؟
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته

قمت بتصميم نمودج وقمت بجعل خاصية
FormBorderstyle = None

ثم قمت بوضع Pannel في اعلى النمودج

سؤالي :
كيف يمكن عند الضغط بالماوس على ال Pannel التي في اعلى، ان اتمكن من تحريك النموذج .


والف شكر
نعم بهذه الطريقة

PHP كود :
Dim Drag As Boolean
    Dim MouseX 
As Integer
    Dim MouseY 
As Integer

    
Private Sub MainPanel_MouseDown(ByVal sender As System.ObjectByVal e As System.Windows.Forms.MouseEventArgsHandles MainPanel.MouseDown
        Drag 
True
        MouseX 
Cursor.Position.Me.Left
        MouseY 
Cursor.Position.Me.Top
    End Sub

    
Private Sub MainPanel_MouseMove(ByVal sender As System.ObjectByVal e As System.Windows.Forms.MouseEventArgsHandles MainPanel.MouseMove
        
If (DragThen
            Me
.Left Cursor.Position.MouseX
            Me
.Top Cursor.Position.MouseY
        End 
If
    
End Sub

    
Private Sub MainPanel_MouseUp(ByVal sender As System.ObjectByVal e As System.Windows.Forms.MouseEventArgsHandles MainPanel.MouseUp
        Drag 
False
    End Sub 
موفق
السلام عليكم

شكرا اخي
الشاكي لله على اجابتك

تم تجربة الكود ضمن مثال بسيط، ووجدت ان الحركة تكون غير منطقية على الاطلاق، فعندما اريده ان يتحرك على اليمين يتحرك على اليسار......والحركة غير انسابية، كما هو المعتاد من النموذج العادي

حاولت التعديل قليلا بالكود بعكس الاشارة ....فلم اوفق

ارجو اعادة النظر بالكود

والف شكر

كود :
Dim b As Boolean = False
    Dim x, y As Short
    Private Sub Panel1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseDown
        x = e.X
        y = e.Y
        b = True
    End Sub

    Private Sub Panel1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseMove
        If b Then
            Me.Left = MousePosition.X - x
            Me.Top = MousePosition.Y - y
        End If
    End Sub

    Private Sub Panel1_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseUp
        b = False
    End Sub
اخي العزيز المبدأ بسيط
اي يجب عليك اولاً اخذ قياسات ال panel وحسابحا من حجم الفورم ومعرفة موقع الماوس x,y

والعملية مشروحة بالكود السابق
واذا استعصى عليك الامر راسلني Smile

تحياتي للجميع
ابو سامي
(24-11-13, 01:00 AM)kafi2030 كتب : [ -> ]السلام عليكم

شكرا اخي
الشاكي لله على اجابتك

تم تجربة الكود ضمن مثال بسيط، ووجدت ان الحركة تكون غير منطقية على الاطلاق، فعندما اريده ان يتحرك على اليمين يتحرك على اليسار......والحركة غير انسابية، كما هو المعتاد من النموذج العادي

حاولت التعديل قليلا بالكود بعكس الاشارة ....فلم اوفق

ارجو اعادة النظر بالكود

والف شكر


شي غريب والله

انا استعملت هذا الكود في اغلب برامجي ويعمل 100%

ربما ان المشكلة حدثت بسبب انك استعملت MDI Form

والله اعلم
السلام عليكم
الف شكر اخواني الكرام على مشاركاتكم

إقتباس :ربما ان المشكلة حدثت بسبب انك استعملت MDI Form

نعم بعد التجريب، تبين ان حركة النموذج تكون رائعة ومنطقية، عندما لا يكون النموذج MDI

ولكن ما الحل ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
اذ ان معظم البرامج تكون النماذج فيها MDI


ارجو المساعدة بالحل نظرا للاهمية القصوى

تم ارفاق مثال
والف شكر

[/b]
جربت على MDI

والنتيجة تمام 100%

شوف الصورة كيف احرك بانسيابية




شكلي بنزل مشروعك وبشوف ويش قصته


كشفت المشكلة

لأنك استعملت RightToLeft

لهكذا لااحب استعمال اللغة العربية في برامجي لمثل هذه الاسباب

المهم حاولت في الكود وضبط 100%
PHP كود :
Dim Drag As Boolean
    Dim MouseX 
As Integer
    Dim MouseY 
As Integer

    
Private Sub Panel1_MouseDown(ByVal sender As ObjectByVal e As System.Windows.Forms.MouseEventArgsHandles Panel1.MouseDown
        Drag 
True
        MouseX 
Me.PointToClient(Cursor.Position).X
        MouseY 
Me.PointToClient(Cursor.Position).Y
    End Sub

    
Private Sub Panel1_MouseMove(ByVal sender As ObjectByVal e As System.Windows.Forms.MouseEventArgsHandles Panel1.MouseMove
        
If (DragThen
            Me
.Left += (Me.PointToClient(Cursor.Position).MouseX)
            
Me.Top += (Me.PointToClient(Cursor.Position).MouseY)
        
End If
    
End Sub

    
Private Sub Panel1_MouseUp(ByVal sender As ObjectByVal e As System.Windows.Forms.MouseEventArgsHandles Panel1.MouseUp
        Drag 
False
    End Sub 
الــــــــــــف الــــــــــف شكــــــــــــــــــر

اخــــــي /
الشـــــــــــــــــــــاكي للـــــــــــــــــــــــــــه


على ســـــــرعة ودقة الاجابة
بارك الله فيك
السلام عليكم...

إذا سمحتم لي... أنا أستخدم الكود التالي، و هو يعمل مع أي Form و لا يتأثر بالخاصية RighrToLeft أو RightToLeftLayout لأنه يستخدم الإحداثيات الداخلية للـ Panel:

كود :
Private StartX, StartY As Integer

Private Sub Panel1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseDown
    If e.Button = MouseButtons.Left Then
        StartX = e.X
        StartY = e.Y
    End If
End Sub

Private Sub Panel1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseMove
    If e.Button = MouseButtons.Left Then
        Me.Left += e.X - StartX
        Me.Top += e.Y - StartY
    End If
End Sub

نرجو الاستفادة و السلام.
الصفحات : 1 2