المساعدة - البحث - قائمة الأعضاء - التقويم
نسخة كاملة: فائدة : شرح لكيفية تغيير شكل الفورم عن طريق دوال الــ API
برمجة - شبكات - كمبيوتر - منتديات الفريق العربي للبرمجة > منتديات لغات البرمجة العام > منتدى مبرمجي لغة Microsoft Visual Basic 6 وما قبلها من إصدارات > قسم الدروس والمواضيع الهامة
مبرمج مصرى
كيفية استخدام دوال الــ API المسئولة عن تغيير شكل الــ (FORM)

والدوال المستخدمة فى ذلك هى

كود
Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long

Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long

Private Declare Function CreateEllipticRgnIndirect Lib "gdi32" (lpRect As RECT) As Long

Private Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long

Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long

Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long



1: شرح الوسائط المستخدمة فى الدوال
( CreateRectRgn و CreateEllipticRgn )

1 : الوسيط الأول فى الدالة الاولى وهو ( X1 ) و هو يعبر عن من اين يبدأ من يسار الفورم
2 : الوسيط الثانى فى الدالة الأولى وهو ( Y1 ) و هو يعبر عن من اين يبدأ من أعلى الفورم
3 : الوسيط الثالث فى الدالة الأولى وهو ( X2 ) و هو يعبر عن عرض الفورم = Form.ScaleWidth
4 : الوسيط الرابع فى الدالة الأولى وهو (ْْY2 ) و هو يعبر عن ارتفاع الفورم = Form.ScaleWidth

* هذه الوسائط تعتبر من أشهر الوسائط المستخدمة فى دوال الرسم عموما

2 : الدالة (CreateEllipticRgnIndirect)

مثلهم تماما لكن بدلا من تمرير الوسائط مباشرة تم تمريرها عبر نوع منشىء بواسطة المستخدم وهو النوع (Rect) وطبعا ده بيكون بناء على ما تطلبه الدالة فسوف تجد ان الدالة تقول لنا انا واسئطها تعرف بواسطة النوع (Rect) وقد فهمنا ان النوع (Rect) هو المستخدم من هذه العبارة (IpRect As Rect)
و للنوع (Rect) اربعة خصائص وهى

1 : Bottom ) ) وهى تعنى بالأنجليزية كلمة (قاع) وهى تساوى فى الوسائط التى ذكرت بالاعلى الوسيط رقم 4 ( Y2 )
2 : ) Left ) وهى تعنى بالأنجليزية كلمة (اليسار) وهى تساوى فى الوسائط التى ذكرت بالاعلى الوسيط رقم 1 ( X1 )
3: ) Right ) وهى تعنى بالأنجليزية كلمة (اليمين) وهى تساوى فى الوسائط التى ذكرت بالاعلى الوسيط رقم 3 ( X2 )
4: Top ) ) وهى تعنى بالأنجليزية كلمة (قمه) وهى تساوى فى الوسائط التى ذكرت بالاعلى الوسيط رقم 2 ( Y1 )

وبعد ان فهمنا النوع ( Rect ) بقى علينا ان نعرف كيف يتم تمرير القيم اليه وهى عن طريق متغير من النوع (Rect )
لكى يحمل خصائصه ومن ثم نمرره الى الدالة (CreateEllipticRgnIndirect)

3 : الدالة ( CreateRoundRectRgn )

اول اربع وسائط بها مثل الوسائط المشروحة بالأعلى تماما ولكن تـزيـد عنهم وسيطين وهما (X3) و (Y3) وعن طريقهم تستطيع عمل حواف دائرية للفورم طبعا تستطيع التحكم فى الارقام المررة اليهم حتى يصل الشكل الى دائرة او بيضاوى وعموما شكل الفورم بعد استخدام الدوال السابقة جميعا سوف يتوقف على الارقام المررة للوسائط لتعطيعك الشكل الذى تريده والان قد انتهينا من عمل شكل الفورم ماذا يتبقى لنا كى نطبقه ؟ تابع شرح الدالة الرابعة لكى تعرف

4 : الدالة ( SetWindowRgn )

وهى المسئولة عن تغير شكل الفورم بعد استخدام الدوال السابقة لكن كيف يتم ذلك ؟ لاحظ شرح الوسائط الموجودة فى هذه الدالة وسوف تعرف .

شرح وسائط الدالة ( SetWindowRgn )

1 : الوسيط الأول وهو مقبض النافذة التى نود تغير شكلها واعتقد انه كلنا نعرفه تماما ومقبض النافذة يعبر عنه بالكود
( Form(X).Hwnd )
2 : الوسيط الثانى هو الذى يتم تمرير اى من الدوال السابقة اليه كى ينفذ الشكل
3 : الوسيط الثالث وهو عبارة عن قيمة ( Boolean ) وفى حالة اردنا تطبيق الشكل نجعل قيمته ( True ) غير ذلك نجعل قيمته (False)

الى هنا تستطيع تنفيذ الكود وسوف يعمل بنجاح ان شاء الله .

5 : الدالة (DeleteObject)

واستخدامها منتهى السهولة وهى لها وسيط واحد وهو الجزء الذى نود مسحه او عدم رؤيته من الفورم


ملاحظات مهمة
1 : استخدمت المتغير(Rgn) من النوع (Long) كى يحمل كل خصائص الدالة ومن ثم قمت بتمريره الى الوسيط الثانى للدالة ( SetWindowRgn ) وهذا لتسهيل شكل الكود لكنك تستطيع ان تمرر الى الوسيط الثانى الدالة مباشرة بهذا الشكل

كود
SetWindowRgn Me.hWnd, CreateEllipticRgn(0, 0, 200, 200), True


2 : استخدمت المتغير (Rct) من النوع (Rect) كى يحمل خصائص النوع (Rect)
3 : غير الأرقام المررة الى وسائط الدوال الاربعة الأولى و شاهد النتيجه
4 : طبعا هذه ليست كل الدوال المسئوله عن تحديد شكل الفورم لكن ده اللى ربنا قدرنى عليه النهارده
5 : الكود المستخدم فى البرنامج المرفق مع الشرح وتعريفات الدوال بالأسفل

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

وأن شاء الله سوف أحاول فى المرة القادمة شرح الدوال المستخدمة فى الرسم على الفورم

يوجد فى المرفقات مع الرسالة شرح الدرس فى ملف وورد + مثال تطبيقى


من أعداد : مصطفى عبد الظاهر (مبرمج مصرى)

وهذه هى الاكواد المستخدمة فى المثال المرفق مع الدرس

كود
Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long

Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long

Private Declare Function CreateEllipticRgnIndirect Lib "gdi32" (lpRect As RECT) As Long

Private Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long

Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long

Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long



Private Type RECT

   Left As Long

   Top As Long

   Right As Long

   Bottom As Long

End Type



Dim Rct As RECT

Dim Rgn As Long



Private Sub Command1_Click()

   

   Rgn = CreateEllipticRgn(0, 0, 200, 200)

   SetWindowRgn hWnd, Rgn, True

   DeleteObject Rgn

   

End Sub



Private Sub Command2_Click()



   Rgn = CreateRectRgn(0, 0, Me.ScaleWidth, Me.ScaleHeight)

   SetWindowRgn hWnd, Rgn, True

   DeleteObject Rgn

   

End Sub



Private Sub Command3_Click()

   

   Rct.Bottom = 700

   Rct.Left = 0

   Rct.Right = 200

   Rct.Top = 0

   

   Rgn = CreateEllipticRgnIndirect(Rct)

   SetWindowRgn hWnd, Rgn, True

   DeleteObject Rgn

   

End Sub



Private Sub Command4_Click()

   

   Rgn = CreateRoundRectRgn(0, 0, 200, 200, 80, 80)

   SetWindowRgn hWnd, Rgn, True

   DeleteObject Rgn

   

End Sub    

   Rgn = CreateRoundRectRgn(0, 0, 200, 200, 80, 80)

   SetWindowRgn hWnd, Rgn, True

   DeleteObject Rgn

   

End Sub
عبد الله فتحي
جزاك الله خيرا(gift)(f)
Xacker
الف شكر (f) (سؤال : هل المواضيع التي تقدمها بشان جعل الادوات كال XP وما الى ذلك تظهر فقط في اكس بي ؟ لاني جربت الموضوع الاخر ووضعت الملف Projec1.exe.mainfest
بنفس الشرح لكن لم يتغير شئ في الفورم .. فهل هذه المواضيع تظهر تاثيراتها في XP فقط ؟ وشكرا ) (f)
Visitor_OM
مشكور اخي العزيز وجزاك الله كل خير ,,,,
m_59
(f) جعلها الله في ميزان حسناتك بمشيئته تعالى .
مبرمج مصرى
الى الأخ NOP
الدرس يطبق فقط مع الويندوز XP وانا مجربتش على اى نسخة ويندوز تانية لانى مش بستخدم غير XP من اكتر من سنة
وعلى العموم انا عندى وسائل اخرى لعمل ذلك بلغة الاسمبلى واسمك(NOP) بيدل على انك بتتعامل مع الأسمبلى بردو وانا هاحاول ابعت الطرق دى بس بعد ما اخلص من امتحاناتى لان شرحها طويييييييييييييييييييييل جدا

وشكرا لردود بقية الأخو على الموضوع
Xacker
شكرا لك على الرد وبانتظار هذه المعلومات القيمة (بالاسمبلي) في منتدى الاسمبلي (f)
مبرمج مصرى
أن شاء الله بمجرد أنتهائى من الأمتحانات هاقوم بوضع الطريقة المستخدمة فى قسم الأسمبلى مع مثال عليها
A7med_prof
تمام اخي العزيز بارك الله فيك وجعل هذا العمل في ميزان حسناتك ....
حريف برمجة
جزاك الله خيرا
Delphawi
شكراً أخي العزيز , وهذا طبعاً (دوال API) من مسائل الفاجوال المتقدمة مثل ActiveX و DirectX

مجهود عظيم , بارك الله فيك أخي



مع تحيات ...
علاء VB
mahmoud nouh
الف الف الفشكررررررررر
هذه "نسخة - خفيفة" من محتويات الرئيسية للإستعراض الكامل مع المزيد من الصور والخيارات الرجاء إضغط هنا.
Invision Power Board © 2001-2009 Invision Power Services, Inc.