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

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

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

إخواني الكرام ، تحية طيبة وبعد ،

من المعتاد عند تصميم آداة جديدة UserControl ، يمكننا تحديد عرض وإرتفاع الآداة

كما يلي :

UserControl.Width = 1500

UserControl.Height = 315

ولكن كيف يتم معرفة والتعديل في قمة Top وخلف Left الآداة بحيث لما تنزل علي إحدي

النماذج أقدر أغير في موقعها الإفتراضي ، أو علي الأقل معرفة موقعها أثناء تنفيذ مشـــروع

العميل .

أنا أرفقت مثال بسيط هدفي منها هو تصميم آداة جديدة خاصة للألوان ، عند النقر علي زر أمر

يقوم بعرض نافذة Form بها العديد من الألوان ، هذا النموذج أرغب في عرضة تحت الآداة

كما بالصورة المرفقة معة .

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

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

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

أنت وتصرفاتك

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

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

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

My FaceBook

#2

فين المثال,اخي

وهحاول مع ان اسئلتك في المواضيع السابقة كانت صعبة

تم تعديل هذه المشاركة بواسطة hamata في 19 أغسطس 2007 في 03:07

#4

آسف ، ها هو المثال ،

وشكراً علي إهتمامكم ،

Project.rar

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

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

أنت وتصرفاتك

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

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

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

My FaceBook

#5

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

بطبيعة الحال وقت التصميم الusercontrol لا يملك هاتين الخاصيتين لانهما تعبران عن مكان وجوده على الparent وهذا طبيعي وقت التصميم لانه غير موجود على فورم

لكن عند استخدام الاداة فهنا نجد هاتيين الخاصتين موجودتان والحل يكمن في استعمال الأحداث مثلا تعمل حدث للأداة مثلا حدث للنقر على الأداة أو تربط حدث النقر على الزر الموجود في الأداة بالحدث الذي ستنشؤه وتكتب الكود خارج الاداة وليس داخلها

بالتوفيق ان شاء الله

#6
Private Sub UserControl_Click()
	Print Extender.Left
	Print Extender.Top
End Sub

LEFT TO RIGHT
اقتباس
The Extender object is the object that a developer using your control will use to communicate with your control. It contains not only the public members of your control, but additional properties that are added by the container. For example: The Left and Top property describes the location of the upper left corner of your control. You do not need to implement these properties because the container adds them to your control's extender object.

تم تعديل هذه المشاركة بواسطة msayed2004 في 19 أغسطس 2007 في 16:43

#7

إخواني الكرام ، أشكركم كثيراً علي إستجابتكم لي ،ولكن أنا لم أقصد موقع الآداة علي النموذج ، فأنا علم أن خاصية Extender تمثل كافة خصائص الآداة علي النموذج سواء خاصية مصممة بيدي مثل ( BackColor ) و خاصية ثابتة مثل الـ Left و Height و غيرها . ولكن طلبي هو معرفة موقع الآداة علي مستوي الـ Screen بوجة عام.علي سبيل المثال كي أقوم بتوسيط النموذج بمنتصف الشاشة كما يلي :Me.Left = (Screen.Width - Me.Widht) /2Me.Top = (Screen.Height - Me.Height) / 2أنا أرغب في ذلك ، معرفة موقع أي آداة علي مستوي الـ Screen سواء CommandButton أو TextBox أو آداة جديدة UserControl .وشكراً لكم جميعاًإخواني ، أنا آسف أني موضحتش سؤالي من البداية ، فأكرر أسفي علي هذه الغلطة

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

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

أنت وتصرفاتك

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

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

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

My FaceBook

#8

طالما أنه ليها Handle فدالة GetWindowRect هتفى بالغرض :D

#9

أشكرك أخي الكريم علي معاونتك لي ،

ولكن إسمحلي أن أضع سؤال آخر متعلق بنفس الموضوع ، لكن سؤالي هذا يتطلب منك التخيل !!!!

هناك بعضٍ من الأدوات الموجودة بكثرة علي الويب تشبة الـ ComboBox ولكنها للألوان بحيث عند النقر علي زر الأمر يعرض لك

نافذة تحتها مباشرتاً بمجموعة من الألوان ( أنظر المثال المرفق ) !!!

عند النقر علي زر الأمر يعرض نافذة الألوان ولكن كإنها مرتبطة مع برنامج العميل دون حدوث أي تغير في شريط عنوان نموذج العميل

أو الشعور بإظهار نافذة أخري كنوافذ الديالوج !!!

ومثال آخر علي ذلك الـ ComboBox ، إذا قمت بالنقر علي زر الأمر الخاص بالكومبو يعرض لك نافذة بأسفلها كقائمة سرد للبيانات ،

ولكن لا يشعر العميل بأن هذه النافذة خارج نظاق الآداة !!!!

ومثال آخر أيضاً علي القوائم ، القائمة مجرد آداة عادية مثل أي آداة موجودة بلغات البرمجة ، عند النقرعلي القائمة الرئيسية مثلاً ( ملف )

نري أن هذه القائمة قامت بعرض نافذة بأسفلها بها العديد من الأوامر ، وكذلك دون شعور العميل بأنة قام بعرض نافذة !!!!

أخي الكريم ، إذا كنت فاهم ما أقصدة فأتمني أن أجد رداً علي هذه المشكلة كي يستفاد منها الجميع

علي العموم أنا أرفقت آداة من تصميمي ( بسيطة جداً ) للألوان ، لكن عند النقر علي زر أمر الآداة يعرض نافذة أخري وملاحظ أنها

نافذة كـديالوج ؟

وشكراً للجميع

Project.rar

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

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

أنت وتصرفاتك

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

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

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

My FaceBook

#10

عندى ملحوظتين فى الأول :

1- بتعجبنى مشاريعك , بحس أنك عايز تتحرر من عادات العرب و من حبهم للأدوات الجاهزة :D .

2- طالما انك بتحب الخط اللى بتكتب بيه مشاركاتك ده فأكتب بيه براحتك بس ياريت لو تكبر حجمة شوية :) .

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

أنت أستعملت Form جديدة عليها الألوان و بالتالى اللى بيحصل ده هو الطبيعى.

أعمل الموضوع كله فى Usercontrol بمعنى بدون Form اخرى.

الـ UserControl بتغير فى طولها نفسها بحيث تبان أكن فيه قائمة خرجت منها لكن فى الحقيقة هى مجرد طولت الـ Length بتاعها و يبان على الجزء اللى طول الألوان اللى المستخدم يختار منها , و لما يختار لون أو يقع أى حدث خارجى زى النقر على الـ Form ترجع الـ Control لحجمها , مش عارف كده قصدى وضح و لا لأ , قللى أنت :)

#11

هيا فكرة حلوة ومن المعتاد أننا جميعاً نتعامل مع هذا الأسلوب ، بس أخي الكريم إليك ملاحظاتي :

1- عند تكبير إرتفاع الآداة لا تخفي أو لا تقع فوق الأدوات الموجودة بأسفلها ، علي سبيل المثال

إذا وضعت آداة Combo ومن ثم قمت بوضع TextBox تحتها ، عند النقر علي زر الـ Combo

يضع قائمة السرد أعلي الـ TextBox .

2- يحتوي برنامجي علي شريط أدوات أو عنصر Picture لإسخامها كشريط أدوات ، سأقوم بوضع

هذه الآداة علي شريط الأدوات ، عند تكبير العنصر يختفي الآداة داخل شرط الأدوات.

أنظر المثال المرفق !!!

أما بالنسبة للخط ، فأعتزر وسأحاول عدم تكرار هذا الخطأ مرة أخري ....

أما عن التحرر ، فصدقني أخي الكريم الفيجوال بيزيك لا يمكننا من هذه الفرصة لكثرة قيودة مثل

عدم إمكانية التعامل مع العديد من أنظمة التشغيل .... الي آخرة ..

وشكراً أخي الكريم

Project1.rar

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

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

أنت وتصرفاتك

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

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

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

My FaceBook

#12

زى ما حزوووم قال بالمشاركة 3 , الموضوع يتحل بفكرة الـ Z Order , أستعمل دالة BringWindowToTop و ناديها مع حدث الـ Click

#13

بهذه الطريقة قد إنحلت مشكلتي الأولي ، وهي إضافة الآداة فوق كل الأدوات بإستخدام التابع BringWindowToTop ..

ولكن ماذا عن مشكلتي الثانية ، عند إضافة الآداة في شريط الأدوات أو إضافتها في حاوية ، ماذالت موجودة ؟

فما هو الحل إذاً ؟؟؟؟؟؟

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

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

أنت وتصرفاتك

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

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

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

My FaceBook

#14

همممم , صحيح مفكرتش فى الموضوع ده.

نرجع لفكرة الـ Form + الموضوع دهKeep Form Titlebars in Focus when ToolWindows are Shown

معرفش ينفع مع النوافذ العادية و لا لأ بس جرب.

#15

أخي الكريم ، أنا فتحت الرابط بس معرفتش أتعامل معاة ، ياريت سلو سمحت تعطيلي مثال بسيط عما تتحدث عنة

وشكراً

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

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

أنت وتصرفاتك

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

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

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

My FaceBook

#16

لو الشرح ملخبطك , نزل المشروع نفسه من هنـــــــــــــــــــــــــــــا و الـ ssubtmr6.dll من هنــــــــــــــــــــــــــــــــــا

#17

أخي الكريم ، فعلاً هذا ما كنت أود معرفتة ، ولكنني كنت أرغب التصميم بالكود بدلاً

من الآداة SSubTmr6.dll ولوكان هناك كود مباشر ياريت ترفقهولي وأكون

شاكر ...

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

ولكن سؤال آخر أخي الكريم . وهو متعلق بنفس الموضوع !!!!!

نفس المشكلة موجودة في أيقونة البرنامج بشريط مهام الويندوز ، فهل هناك حل ؟

وإذا كان ليس هناك أي حلول فتجاهل سؤالي ، فأنا واللحمد لله إكتفيت بهذا الجزء

والفضل يرجع لله عز وجل ثم إليك أخي الكريم

وشكراً للجميع

ToolColors.rar

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

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

أنت وتصرفاتك

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

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

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

My FaceBook

#18

الـ SSubTmr6.dll مفتوح المصدر VB6 SSubTmr Source Code

الجزء الخاص بالـ Subclassing ممثل فى 2 Classes و واحد Module أسمائهم :

isubclass.cls

subclass.cls

subclass.bas

اقتباس
فهل هناك حل ؟
و الله لا يوجد حل برأسى الآن , لكن لو عرفت اى فكرة هبلغك.

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

#19

أمممممممممممممم !!!

بصراحة أخي الكريم أنا مشعارف ماذا أقول ، ولكن هذا خطأ مني لأنني لم أنفذ المشروع قبل طرح السؤال !!!!

فبالنسبة لأيقونة البرنامج بشريط المهام قد تمت حلها بمجرد تحويل الآداة الي OCX !!!!

ولكن ظهرت لي مشكلة أخري غير متوقعة !!!!

ففي المشروع المرفق كنت أستخدم الحدث Dectivate لإنهاء النموذج عند عدم التركيز علية !!!

ولكن عند تحويلة الي ملف تنفيذي OCX لم ينفذ الحدث نهائياً ، وأستخدمت أحداث أخري مثل LastFocus !!

فياريت لو سمحت ترفقلي مثال علي كيفية معرفة هل النموذج منشط Active أم لا ؟

وشكراً لك أخي الكريم ، وآسف علي الإزعاج ،

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

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

أنت وتصرفاتك

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

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

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

My FaceBook

#20

على ما أذكر ( مجربتش دلوقتى قبل ما أرد عليك بس كنت بعمل حاجة زى كده زمان ) كنا بنعمل Hook على الـ Form اللى عليها الـ Control لأصطياد رسالة WM_KILLFOCUS

Private Const WM_KILLFOCUS As Long = &H8
#21

بصراحة أنا مشفاهم قصدق بالضبط ،

هوا اللغة الإنجليزية ضعيفة عندي شوية ، علشان كدة دايماً ملغبطني الكود ،

لكنني سأعطي لك ما أقصدة مرة أخري ،

إذا نظرت في آخر تحميل لملف الآداة MyColors ، كنت دائماً أستخدم حدث Dectivate كي أغلق النموذج المفتوح ، لأنني أفتحة كنموذج عادي وليس كديالوج !!!

وعند تحويلة الي آداة لا ينفذ الحدث Dectivate ؟

أنا كنت أستخدم هذا التابع الوظيفية لجعل نموذج منشط ( Activate ) :

Private Declare Sub SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)

ولكن كيف أعرف أن النموذج الخاص بي غير منشط ( Activate ) ؟

وشكراً لك أخي الكريم ،

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

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

أنت وتصرفاتك

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

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

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

My FaceBook

#22

أقصد بعمل Subclass على الـ Form اللى عليها الـ Control و لما توصل رسالة WM_KILLFOCUS تعرف أن النافذة هتفقد التركيز.

#23

أخي الكريم ، هوا بصراحة مش وصلالي الفكرة ، لكن ممكن تعطيلي مثال !!!!

لكن ما فهمتة منك هو التحكم الخارجي للآداة !!!

ولكن ما أقصدة أن أفصل الآداة عن أي عمل خارجي سواء Subclass أو غيرة .....

ولو كانت المشكلة في الـفأرة فكنت إستخدمت SetWindowPos كما ذكرت ...

ولكن المشكلة في التركيز نفسة علي النموذج ....

أعتقد أنني رأيت كود التركيز من قبل ، ولكن بصراحة غير قادر علي العثورعثر علية الآن ...

علي العموم أنا مش مستعجل ، وأشكرك علي ردك الكريم ....

والسلام ختام

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

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

أنت وتصرفاتك

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

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

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

My FaceBook

#24

عملتلك مثال بس بيعتمد على الرسالة WM_ACTIVATE لأن التانية فيها وجع دماغ و أشتغالات غريبة.

Container_focus.rar

بكده أنت من خلال الأداة هتعرف هل البرنامج فقد التركيز أم لا.

تعديل : أنا أستعملت الـ Self Sub كـ Subclasser فى المثال ده.

تم تعديل هذه المشاركة بواسطة msayed2004 في 22 أغسطس 2007 في 16:55

#25

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

حقيقة الsubclassing يفقد الأعصاب :wacko:

الحمد لله أننا نستعمل الآن الوراثة على الدوت نت ومن ثم نقوم باستدعاء الإجراء WndProc

شكرا أخ محمد حقيقة لأول مرة أسمع ب Extender

بالتوفيق للجميع دائما

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

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