الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

معرفة خلف وقمة Usercontrol علي مستوي ال Screen

مغلق
بدأه MMA_EG_Cairo في 19 أغسطس 2007 · 32 رد · 2,190 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#26

أخي الكريم ، ما أرفقتة لي هو المطلوب بالضبط ،

فعلاً هذا الكود مناسب لي ، ولكن بالطبع قمت بالتعديل فية بعض الشيء !!!

وهذا الكود أيضاً سيفتح لي أبواب إنشاء عدة عناصر تحكم جديدة خاصة بي !!

علي العموم سأرفق لك المشروع مرة أخري بعد الإنتهاء التام منه !!!

ملحوظة : إذا كان هناك أي خطأ رجاء التوضيح كي أحسن من آداءة ، وهذة

الرسالة متروكة للجميع .

وشكراً لك ولجميع أعضاء المنتدي الكرام ،

والسلام ختام ،

MyControl.rar

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#27

أنا بصيت فى الكود بصة سريعة ( بالـ Notepad ) , عايز أعرف ايه أهمية الـ Timer اللى فى الـ Control ؟

يفضل أستبدال الـ SSubTmr6.dll بالـ Self Sub أو العكس علشان يبقى Subclasser واحد بالمشروع مش 2 ( أنصحك بالتعامل دائما مع الـ Self Sub )

حاول تتعود على أستعمال Option Explicit علشان تتأكد من التعريف الصحيح لكل متغيراتك و ثوابتك.

------------------------

تعديل : @ DreamNet : الـ Subclassing لم يعد مشكلة بتوافر Safe Subclasser و مبروك على اللقب :)

تم تعديل هذه المشاركة بواسطة msayed2004 في 23 أغسطس 2007 في 01:25

#28

أولاً : آداة الـ Timer :

عند عرض نموذج من UserControl كنت معتاد أن أعرضها في صورة Dialog ،

فمن الطبيعي لا يتم تنفيذ ما بعدة من الأكواد إلا بعد إغلاق النموذج ( الديالوج ) .

أما نموذج الألوان فقمت بعرضة عادي وليس ديالوج فالآداة الـ Timer يتم تفعيلها عند

النقر علي زر الأمر لعرض النموذج ، ولا ينفذ أي شيء إلا بعد إغلاق النافذة الرئيسية

وذلك بإستخدام متغير ( bolCancel ) لإجراء عملية التحقق . وأنا أرغب في عرض

اللون عند تساوي المتغير False ، وكذلك تنفيذ حدث العميل .

ثانياً : بصراحة أنا حاولت أستخدم الـ Self Sub ولكنني فشلت ، فياريت لو توضحلي

كيف أستخدمة بمثال عملي كي أحذف ملف SSubTmr6.dll ، وكما تعلم أنا أفضل

دائماً إستخدام الكود ..... لكن يا أخي أنا بصراحة محبتش أسأل تاني لأني أنا حاسس

بأني مزعج بالنسبة لك ..........

علي فكرة أنا أعتبر مبتديء في توابع الـ API . ولكن بفضل هذا المنتدي تعلمت حجات

كثيرة خلال الفترة السابقة أكثر مما كنت أتصور ...............

ثالياً : علي فكرة إستعمال الـ Option Explicit أنا أحب دائماً إستخدامها ولكن

في هذه المرة أنا كنت مستعجل ، لكن علشان ماغلطش دائماً أضبط خاصية

Require Variable Declaration من نافذة Options !!!

فلا تقلك أخي الكريم ، فأنا والحمد لله أعلم إستعمال هذه الوظيفة الهامة !!

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#29

بسم الله الرحمن الرحيم

السلام عليكم و رحمة الله و بركاته

أستخدام الـ Self Sub :

الكود المرفق بالملف النصى هنرميه جوا اى حاجة يعنى ينفع بـ Module أو Form أو Usercontrol أو ............. , على عكس الـ Subclasser العادى لازم يكون فى Module.

SelfSub.txt

لعمل Hook على رسالة ما هنحط الكود التالى ( غالبا حدث الـ Form_Load للـ Forms و الـ UserControl_ReadProperties للـ UserControls)

نفترض أن هنشتغل على الـ Form اللى فيها الكود و الرسالة الخاصة بضغط الزر الأيسر للماوس :

With Me
   sc_Subclass .hwnd
   sc_AddMsg .hwnd, WM_LBUTTONDOWN
 End With
 bHooked = True

يبقى الأول حددنا الـ Handle و بعد كده الرسالة و الـ Handle

فى حالة الرغبة بعمل Subclassing على كل الرسائل بنستعمل ALL_MESSAGES اللى هيه متعرفة بالكود.

فى حالة التعامل مع Usercontrols لازم نتأكد من أن الـ Subclassing هيحصل وقت التنفيذ مش وقت التصميم عن طريق :

If Ambient.UserMode Then


End If

للتحرر من الـ Subclassing ( فى الغالب بحدث الـ Form_Unload للـ Forms و حدث الـ UserControl_Terminate للـ Usercontrols ) نستعمل الكود التالى :

If bHooked = True Then
	 sc_Terminate
	 bHooked = False
 End If

فى الـ Sub المسمى zWndProc1 هنبدأ نتعامل مع الرسائل و نحدد المطلوب عمله لما تيجى رسالة معينة.

ملحوظة هامة جدا جدا جدا جدا

الـ Sub اللى أسمه zWndProc1 لازم يكون آخر شئ بنافذة الـ Code يا أما هيحصل فى الغالب Crash , لا أعلم السبب و لا أعتقد أنه سبب معلوم.

------------------------------------------

ملحوظة أخرى Paul Caton صاحب الكود لم يعد يعمل بالـ Classic VB و القائم على تطوير المشروع حاليا هو LaVolpe ( عضو آخر بـ PSC ) و هو بالفعل قام بعمل تطويرات لكن هو لسه شغال عليه و بالتالى بعد فترة يستحسن ننتقل لأستعمال تعديلات LaVolpe

تعديل : طبعا الرسائل هنعرفها بنفسنا ;) لأنها مش متعرفة لوحدها بالكود.

و السلام عليكم و رحمة الله و بركاته

تم تعديل هذه المشاركة بواسطة msayed2004 في 23 أغسطس 2007 في 13:45

#30

أخي الكريم ، الكود المرفق هو نفس الكود الموجود في آداة الـ Focus التي قمت بإرفاقها من قبل ،

وبالفعل قمت بنسخة في وحدة نمطية و قمت بإضافة الثوابت التالية :

WM_NCACTIVATE

WM_ACTIVATEAPP

WM_ACTIVATE

WM_DESTROY

فأنا أستدعيت إجراء الـ sc_Subclass في البداية ، ومن ثم إستدعيت إجراء sc_AddMsg بالثوابت الموضحة ،

وهذه الثوابت هي المستخدمة في المكتبة SSubTmr6.dll وفي الفئة cActiveTitleBar ، لكن حتي

الآن لا تعطي لي نتائج لأن الإجراء zWndProc1 يجب أن يتم ضبطة !!!

أنا قمت بتعديل الإجراء zWndProc1 كما يلي :

Private Sub zWndProc1(ByVal bBefore As Boolean, _

ByRef bHandled As Boolean, _

ByRef lReturn As Long, _

ByVal lng_hWnd As Long, _

ByVal uMsg As Long, _

ByVal wParam As Long, _

ByVal lParam As Long, _

ByRef lParamUser As Long)

Select Case uMsg

Case WM_ACTIVATE

If LoWord(wParam) = WA_INACTIVE Then

RaiseEvent LostFocusForm(lParam)

Debug.Print "LostFocus"

Else

RaiseEvent GotFocusForm(lParam)

Debug.Print "GotFocus"

End If

End Select

End Sub

وقمت بإضافة تعديلات أخري مثل الـفأرة ولوحة المفاتيح ،

فياريت لو سمحت تحددلي عملية ضبط الإجراء zWndProc1 كي تعمل مثل المكتبة SSubTmr6.dll ؟

حتي أتمكن من عرض النافذة كآداة مرتبطة مع الـ UserControl ؟

وأعزرني أخي الكريم ، أنا ضعيف شوية في توابع الـ API ،

وشكراً

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#31

رجاء المساعدة

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#32
اقتباس
فياريت لو سمحت تحددلي عملية ضبط الإجراء zWndProc1 كي تعمل مثل المكتبة SSubTmr6.dll ؟

أنا فشلت فى حاجة واحدة و هى أرجاع الرسائل للـ CallWindowProc , عموما لو عرفت أحول بينهم هبقا أقلك.

#33

أنا آسف أخي ، بس إلي خلاني أراسلك مرة أخري أنك قلت لي أن أستخدم الـ SelfSub بدلاً من SSubTmr6.dll !!

فكنت مقطنع أنك تعرفها حالياً ، علي العموم أشكرك كثيراً علي الرد والإهتمام وأنا في إنتظارك

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

هذا الموضوع مغلق.

مواضيع مشابهة