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

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

مغلق
بدأه مبرمج مصرى في 29 مايو 2003 · 11 رد · 9,403 مشاهدة · في قسم الدروس والمواضيع الهامة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

Eng.Mostafa Abd El Zaher
 
Embedded Systems Programmer
Computer Programmer
 
للاطلاع على اعمالنا في مختلف المجالات برجاء زيارة صفحتنا
 
 

https://www.facebook.com/EgyESD

Mostafa_Cool2001@Hotmail.com

00201005674650

#2

جزاك الله خيرا(gift)(f)

ani.gif
#3

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

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

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#4

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

#5

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

#6

الى الأخ NOP

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

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

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

Eng.Mostafa Abd El Zaher
 
Embedded Systems Programmer
Computer Programmer
 
للاطلاع على اعمالنا في مختلف المجالات برجاء زيارة صفحتنا
 
 

https://www.facebook.com/EgyESD

Mostafa_Cool2001@Hotmail.com

00201005674650

#7

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

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#8

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

Eng.Mostafa Abd El Zaher
 
Embedded Systems Programmer
Computer Programmer
 
للاطلاع على اعمالنا في مختلف المجالات برجاء زيارة صفحتنا
 
 

https://www.facebook.com/EgyESD

Mostafa_Cool2001@Hotmail.com

00201005674650

#9

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

اقتباس

آسف الدخول متقطع هذه القتره

اقتباس

[يمين]

.[/يمين]

A7med_prof-4-2007.jpg

اخر مواضيعي 2007

االمثال مطبق على موقع بورصه سعودي

.

.

مواضيع مهمه ومطلوبه بكثره VB6

.

بــرامج ومشــاريع عربيه كامــله {HnHn} والمزيد في قسم برامج الاعضاء || ربط قواعد بيانات اكسس مع الفيجوال بيسك, مادة دراسية كاملة {بنت اليمن}|| المرجع الشامل لجمل SQL ا {GENIUS-IT} || كيفية التعامل مع مكتبة الـ DAO, في الوصول إلى قاعدة بيانات {رمضان} || مثال ريط Visaul Basic 6.0 مع SQL SERVER ا || العمليات التي تجرى على قاعدة البيانات, مثال كامل {بنت اليمن} || تصدير البيانات من الاكسل الي الاكسس بالفيجوال بيسك {HnHn} || البحث في قاعدة البيانات {MANSUR} || قواعد البيانات العلائقية وتقنيات الوصول إليها {عبد الله فتحي} || كيفية أظهار بيانات جدولين بواسطة التاريخ ,,,,,,,

.

أخي ربما سؤالك اجابته في أحدى هذه المواضيع فإن لم تجد قم بالبحث وان لم تجد اطرح سؤالك مع وضع عنوان مناسب بحيث ان يكون هذا العنوان دال على محتوى الموضوع فغير ذلك من أكبر الكبائر في المنتدى وسيؤدي الى غلق او حذف موضوعك .

.

</
#10

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

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#11

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

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

مع تحيات ...

علاء VB

اقتباس
If A is success in life, then A equals x plus y plus z. Work is x; y is play; and z is keeping your mouth shut

Albert Einstein

مدخل إلى برمجة وتصميم الألعاب : كيف أبدأ ؟

#12

الف الف الفشكررررررررر

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

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