مبرمج مصرى

فائدة : شرح لكيفية تغيير شكل الفورم عن طريق دوال ال API

12 ردود في هذا الموضوع

كيفية استخدام دوال الــ 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

lesson___exampel.zip

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

الف شكر (f) (سؤال : هل المواضيع التي تقدمها بشان جعل الادوات كال XP وما الى ذلك تظهر فقط في اكس بي ؟ لاني جربت الموضوع الاخر ووضعت الملف Projec1.exe.mainfest

بنفس الشرح لكن لم يتغير شئ في الفورم .. فهل هذه المواضيع تظهر تاثيراتها في XP فقط ؟ وشكرا ) (f)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

مشكور اخي العزيز وجزاك الله كل خير ,,,,

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

(f) جعلها الله في ميزان حسناتك بمشيئته تعالى .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

الى الأخ NOP

الدرس يطبق فقط مع الويندوز XP وانا مجربتش على اى نسخة ويندوز تانية لانى مش بستخدم غير XP من اكتر من سنة

وعلى العموم انا عندى وسائل اخرى لعمل ذلك بلغة الاسمبلى واسمك(NOP) بيدل على انك بتتعامل مع الأسمبلى بردو وانا هاحاول ابعت الطرق دى بس بعد ما اخلص من امتحاناتى لان شرحها طويييييييييييييييييييييل جدا

وشكرا لردود بقية الأخو على الموضوع

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شكرا لك على الرد وبانتظار هذه المعلومات القيمة (بالاسمبلي) في منتدى الاسمبلي (f)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

أن شاء الله بمجرد أنتهائى من الأمتحانات هاقوم بوضع الطريقة المستخدمة فى قسم الأسمبلى مع مثال عليها

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

تمام اخي العزيز بارك الله فيك وجعل هذا العمل في ميزان حسناتك ....

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

جزاك الله خيرا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شكراً أخي العزيز , وهذا طبعاً (دوال API) من مسائل الفاجوال المتقدمة مثل ActiveX و DirectX

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

مع تحيات ...

علاء VB

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .