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

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

السلام عليكم.. هذي أول مشاركة بالنسبة ليا Blush أنا عبدو من ليبيا خبرتي في الفيجوال البيسك تقريبا 70 %

بالنسبة لسؤالي: أنا عندي برنامج يسمى التمام الشهري للموظفين، المهم أنا عندي عدد 2 فورم كما هو موضح بالصورة أريد أن أجعل Form2 تحت سيطرة Form1 الرئيسي..

توضيح: عند الضغط على إغلاق أو تصغير على Form1 يحدث أيضًا في Form2 وأيضا عند السحب أو تحريك الفورم الرئيسي يتحرك يتحرك الـ Form2

أنا موجود في أي سؤال أو استفسار..

(23-05-14, 06:04 PM)عبدو الليبي كتب : [ -> ]...
...سؤالي: ... أنا عندي عدد 2 فورم كما هو موضح بالصورة أريد أن أجعل Form2 تحت سيطرة Form1 الرئيسي..

توضيح: عند الضغط على إغلاق أو تصغير على Form1 يحدث أيضًا في Form2 وأيضا عند السحب أو تحريك الفورم الرئيسي يتحرك يتحرك الـ Form2
...



منقول (مع تعديل بسيط ليناسب طلبك)

ضع هذا الكود في Module
كود :
Option Explicit

Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal HWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal HWnd As Long, ByVal Msg As Long, ByVal WParam As Long, ByVal LParam As Long) As Long

Private Const GWL_WNDPROC = (-4)
Private Const WM_MOVE = &H3

Dim m_PrevProc As Long

Private Function WndProc(ByVal HWnd As Long, ByVal Msg As Long, ByVal WParam As Long, ByVal LParam As Long) As Long
    WndProc = CallWindowProc(m_PrevProc, HWnd, Msg, WParam, LParam)
    If Msg = WM_MOVE Then
        Form1.Me_OnMove
    End If
End Function

Public Sub WndProcHook(ByVal HWnd As Long)
    m_PrevProc = SetWindowLong(HWnd, GWL_WNDPROC, AddressOf WndProc)
End Sub
Public Sub WndProcUnHook(ByVal HWnd As Long)
    SetWindowLong HWnd, GWL_WNDPROC, m_PrevProc
End Sub

ضع هذا الكود في Form1
كود :
Option Explicit

Private Sub Form_Load()
    Call WndProcHook(Me.HWnd) ' Important مهم
    '----------------------------------------
    
    Form2.Show vbModeless, Me
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Call WndProcUnHook(Me.HWnd) ' Important مهم
End Sub


Friend Sub Me_OnMove()
  Form2.Left = Me.Left
  Form2.Top = Me.Top + Me.Height
End Sub

(إذا لزم الأمر) ضع هذا الكود في Form2 لمنع غلق الفورم باستخدام الزر X بواسطة الحدث Form_QueryUnload
كود :
Option Explicit

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    If UnloadMode = vbFormControlMenu Or UnloadMode = vbFormCode Then Cancel = True
End Sub
انته لمن بتعمل end مثلاً للــ فورم الاول ع طول رح يتنفد مع الفورم الثاني وذا ما يحتاج شي
منور وااااااجد خوي vbnet عطيتني المطلوب وربي يحفظك
لو سمحت أطلب كود يمنع تكبير النافذة بينما زر الإغلاق والتصغير يترك كما هو
واجهتني مشكلة عند التنفيذ بعد وضع كود السابق يا ليت يوجد الحل وشكرا
عرفت المشكلة وهي يوجد تضارب بين Option Explicit و الــ KeyAscii قمت بمسح الأول والأمور تمام