Visual Basic Online Course - Round and Transparent Form Part 2
لاحظ أننا لم نتكلم عن تصميم الفورم بعد حيث ان التصميم سيكون عادى جدا و لكن النتيجه ستكون مختلفه تماما لذا لن ندخل فى تفاصيل التصميم و لكن هذه هى صورة الفورم فى بيئة IDE او وضع التصميم فى Visual Basic 0.6 يمكنك رسمها ببساطه .
Visual Basic Online Course - Rounded and Transparent Form Example
|
frmTranspForm - IDE
frmTranspForm - Codes
Option Explicit
ما هى Option Explicit ؟
كما نعرف وظيفتها التأكد من أن جميع المتغيرات المستخدمه تم نعريفها مسبقا قبل استخدامها, بمعنى انك اذا كتبت كود مثل
(i = 2)
ثم
(MsgBox i)
على حدث (Form_Load) مثلا, فان عند تشغيل الفورم (تظهر رساله مكتوب بها (2) و لكن اذا اضفت فى منطقة التصريحات العامه الكود (Option Explicit) فان عند تشغيل الفورم (تظهر رساله خطأ من الفيجوال بيزك تفيد Variable Not Defined) أى أن المتغير i غير معرف فى المشروع أو البرنامج و ستضطر الى (تعريف المتغير i سواء فى منطقة التصريحات العامه أو فى الحدث Form_Load كالتالى) :
Dim i As Integer
أو
Dim i As String
كما تشاء و راع علامات التنصيص Quotations "" فى اعطاء قيمة i حيث اذا كان
i As String
فان
i = "2"
و لكن اذا كان
i As Integer
فستكون
i = 2
و فى جميع الحالات الرساله ستكون مضمونها (2) .
Dim formEffectIndex As Integer
تعريف المتغير formEffectIndex متغير رقمى Integer
Dim mFormRegion As Lon
تعريف المتغير mFormRegion متغير نوعه Long
Dim msg1 As String, msg2 As String
تعريف المتغير msg1 متغير نصى String و msg2 متغير نصى String
Private Sub Form_Load()
الحدث Form_Load للشاشة frmTranspForm
Me.ScaleMode = vbPixels
ScaleMode
هى : أحد خواص الـ Form بشكل عام و وظيفتها تحديد وحدة قياس الفورم أو أى اداة لها وحدة قياس او ScaleMode و من أنواع الـ ScaleModes أو وحدات القياس :
القيمة | الوصف
ScaleHeight - ScaleWidth - ScaleTop – ScaleLeft : و تفيد أن أحد خواص الـ (ScaleMode)
vbUser : يتم تحديدها من قبل المستخدم لاحقا
vbPixels : وحدة القياس Pixel اصغر وحدة قياس لشاشة أو طابعه
vbTwips : وحدة القياس Twip
vbPoints : وحدة القياس Point
vbCharacters :وحدة القياس Character
vbInches : وحدة القياس Inches البوصه
vbMillimeters : وحدة القياس Millimeter
vbCentimeters : وحدة القياس Centimeter
فى هذا المثال يتم تحديد وحدة قياس الفورم الى vbPixels أى أنه مهما كانت وحدة قياس الشاشة التى يعرض عليها البرنامج فان البرنامج سيعرض بالـ Pixel .
قيمة المتغير msg1 الذى عرفناه فى منطقة التصريحات العامه لهذه الفورم و القيمه هى نص و الـ (vbCrlf) هى تعادل سطر جديد أو (Enter) كما فى الكتابه على الوورد.قيمة المتغير msg2 الذى عرفناه فى منطقة التصريحات العامه لهذه الفورم و القيمه هى نص و الـ (vbCrlf) هى تعادل سطر جديد أو (Enter) كما فى الكتابه على الوورد.
formEffectIndex = 0
قيمة المتغير formEffectIndex الذى عرفناه فى منطقة التصريحات العامه لهذه الفورم و القيمه هى (صفر) .
Text1.Text = msg1
الـ Text1 على هذه الفورم قيمته تساوى Msg1
Command0.Visible = False
اخفاء الـ Command0 و الذى موجود فى اعلى الفورم و عنوانه Transparent Form عند بداية تحميل الفورم .
Command3.Enabled = False
خاصية Enabled = False للـ Command3 و الذى بعنوان Frame .
changeFormEffect formEffectIndex
الاجراء changeFormEffect و المعرف بمنطقة التصريحات العامه للفورم سيتم دراسته الان ... قيمته formEffectIndex و التى هى صفر عند بداية تحميل الشاشة .....
End Sub
نهاية اجراء Form_Load
Private Sub changeFormEffect(inEffect As Integer)
اجراء باسم changeFormEffect وله معامل (inEffect) نوعه Integer و هو الاجراء الذى بناءا عليه سيتم التحكم فى شكل الفورم الحاليه .
تعريف بعض المتغيرات فى الاجراء تمهيدا لاستخدامها حيث :
Single هو : أى رقم يحمل كسور عشريه
Integer هو : أى رقم صحيح بدون كسور عشريه
Long هو : أى رقم صحيح قيمته كبيره جدا بحيث الـ Integer لا يستطيع تخزينها .
w = ScaleX(Width, vbTwips, vbPixels)
h = ScaleY(Height, vbTwips, vbPixels)
فى هذه المعادله W تساوى ScaleX ... فما هو ScaleX ؟؟
ScaleX هو : من خواص الفيجوال بيزك حيث يقوم بتحويل قيمة طول أو عرض الفورم أو الطابعه أو PictureBox من وحدة القياس المعطاه بخاصية ScaleMode الى وحدة قياس أخرى.
ScaleX هو : من خواص الفيجوال بيزك حيث يقوم بتحويل قيمة طول أو عرض الفورم أو الطابعه أو PictureBox من وحدة القياس المعطاه بخاصية ScaleMode الى وحدة قياس أخرى.
المعادله :
object.ScaleX (width, fromscale, toscale)object.ScaleY (height, fromscale, toscale)
شرح المعادله :
جزء المعادله | الشرح
Object : اختيارى . اذا لم يذكر الـ Object فانه يأخذ قيمة أى أداة نشطه على الفورم يفترض أنها هى الـ Object المطلوب
Width : مطلوب . عرض الـ Object المراد تحويل وحدة قياسه الى وحدة أخرى .
Height :مطلوب . طول الـ Object المراد تحويل وحدة قياسه الى وحدة أخرى .
fromscale : أختيارى . وحدة القياس المراد التحويل منها بالنسبه لطول أو عرض الـ Object . و هى قيمة اما أن تكون ثابته Constant أو قيمه عاديه لتحديد الأبعاد .
و القيم المحتملة (المعطاه) لـ fromscale هى نفسها المحدده بالجدول السابق (عناصر ScaleMode) بالاضافه الى القيمه الجديده HiMetric .
toscale : أختيارى . وحدة القياس المراد التحويل اليها بالنسبه لطول أو عرض الـ Object . و هى قيمة اما أن تكون ثابته Constant أو قيمه عاديه لتحديد الأبعاد . و القيم المحتملة (المعطاه) لـ fromscale هى نفسها المحدده بالجدول السابق (عناصر ScaleMode) بالاضافه الى القيمه الجديده HiMetric .
القيمة | الثابت | الشـــــــــــــــرح
0 vbUser : و تفيد أن أحد خواص الـ ScaleMode من ScaleHeight - ScaleWidth - ScaleTop
ScaleLeft يتم تحديدها من قبل المستخدم لاحقا
vbTwips 1 : وحدة القياس Twip
vbPoints 2 : وحدة القياس Point
vbPixels 3 : وحدة القياس Pixel اصغر وحدة قياس لشاشة
vbCharacters 4 : وحدة القياس Character
vbInches 5 : وحدة القياس Inch
vbMillimeters 6 : وحدة القياس Millimeteres
vbCentimeters 7 : وحدة القياس Centimeters
vbHimetric 8 : لتحديد حجم الأداه .
vbContainerPosition 9 : لتحديد وضع الأداه .
vbContainerSize 10 : لتحديد حجم الاداه
كلا الخاصيتان ScaleX و ScaleY يقوما بتحويل وحدة قياس بقيمه (طول أو عرض) حسب الخاصيه المستخدمه من Fromscale و تحويلها الى Toscale .
و بالعوده الى الكود السابق :
فان المتغير (w) قيمته تساوى قيمة العرض بوحدة قياس Pixel محوله من Twips و بالمثل بالنسبه للمتغير (h) للطول حيث كلا من (Height - Width) يخصان الفورم نفسها أى (Me.Height - Me.Width) ويمكنك التعويض بنفسك و لن يكون هناك فرق .
inEffect
هو معامل الاجراء changeFormEffect و هو الاجراء المسؤل عن تغيير شكل الفورم الحاليه فاذا كانت قيمته = صفر فان :
1) المتغير (mFormRegion) و الذى من نوع Long يساوى الداله (CreateRectRgn) و التى تم تعريفها فى الموديول و هنا يتم تفسير معاملاتها كالتالى :
x1 = 0 أى ان نقطة بداية خط العرض من اعلى اليسار الى اليمين هى صفر
y1 = 0 أى ان نقطة بداية خط الطول من اعلى الى اسفل من اليسار هى صفر (نفس النقطه السابقه)
x2 = w أى ان نقطة بداية خط العرض من اسفل اليسار الى اليمين و هى نقطة بداية الـ w (عرض الفورم)
y2 = h أى ان نقطة بداية خط الطول من اسفل اليمين الى اعلى و هى نقطة بداية الـ h (طول الفورم)
2) ثم الدالة SetWindowRgn و التى عرفناها فى الموديول و هى كما ذكرنا وظيفتها تحديد منطقة بداية الرسم و منطقة نهاية الرسم التى لا يخرج النظام عنها عند تحديدها و هنا قيمتها هى :
hwnd هى مكان الرسم و هنا هو (الفورم) لذا كتبنا hwnd مباشرة كان ممكن (me.hwnd)
hRgn و قيمتها mFormRegion وهى الأبعاد المراد التعامل معها و هى واضحه فى سطر الكود السابق حيث لدينا (4) ابعاد تم تحديدهم عن طريق الداله السابقه CreateRectRgn
bRedraw و هى قيمتها True مما يعنى أن النظام سيقوم بالرسم بالفعل ليس فقط التحديد .
3) الخروج من جملة الشرط IF .
- لاحظ فى الـ Form_Load القيمة formEffectIndex = 0 ثم تنفيذ الاجراء changeFormEffect formEffectIndex بمعنى انه فى بداية تحميل الفورم فان قيمة inEffect و التابعه للاجراء ChangeFormEffect = 0 اى ان شرط IF سيتحقق أولا .
mFormRegion = CreateRectRgn(0, 0, 0, 0)
قيمة الـ mFormRegion = الدالة CreateRectRgn و لكن فى هذه الحاله تساوى 0 حيث ان ابعاد الداله أو ابعاد المنطقة المستطيلة تبدأ كما تبدأ الفورم من نفس النقاط .
edge = (w - ScaleWidth) / 2topEdge = h - edge - ScaleHeight
الـ Edge هى الحروف التى يستطيع الماوس الامساك بالفورم منها عندما تكون شفافه مثلا .
و يجب ملاحظة التالى :
الفرق بين ScaleWidth أو ScaleHeight و بين Width و Height : انت تعلم أن الفورم 3D اى انك عندما تنظر اليها تكون بارزة من الاحرف و كانها ثلاثية الأبعاد و هو ما يسمى بالـ Bevel و هذا الـ Bevel يكون عبارة عن الفرق بين الـ ScaleHeight مثلا و الـ Height أى أن الـ ScaleHeight هو طول الفورم الداخلى و الـ Height هو الطول الخارجى أو الطول عموما و كذا بالنسبة للعرض .... انظر الصورة !
و بالتالى فان :
Edge هنا يمثل (اجمالى العرض - العرض الداخلى) \ 2 ...... يمكنك تغيير الرقم 2 لكى ترى نتائج مختلفه بنفسك
Topedge هنا يمثل (اجمالى الطول - الأحرف - الطول الداخلى) ......
اذا كان inEffect = 1 فان :
1) outer = الداله CreateRectRgn حيث outer متغير Single مثل mFormRegion يقوم بنفس الوظيفة
2) inner = الداله CreateRectRgn حيث inner متغير Single و قيمة متغيرات الداله هى (edge,topedge,w-edge,h.edge) ... و معناه ان حدود أو حروف المنطقة المستطيلة ستختفى أو ستظهر (على حسب) عند تحقق الشرط inEffect = 1
3) الداله CombineRgn كما شرحناها فى أكواد الموديول سابقا حيث يتم دمج منطقتين و يتم تخزين الدمج فى منطقة ثالثه أو ثابت الدالة Rgn_DIFF "المنطقة الثالثه عباره عن الاجزاء من المنطقه الاولى و التى ليست جزءا من المنطقة الثانيه أو Elliptical" حيث المعاملات هنا كالتالى :
أ) تعريف ابعاد المنطقة الجديده (الثالثه) عن طريق المتغير mFormRegionب) المنطقة الأولى المراد دمجها Outterج) المنطقة الثانيه المراد دمجها Innerد) نوع الدمج RGN_DIFF
4) انتهاء جملة الشرط .
جملة For .... Next :
لكل (i المتغير الرقمى) = 0 الى (عدد الأدوات على الفورم) - 1
اذا كان الاداه(ذات الرقم i) خاصية ظهورها فعاله .... اذا
mLeft = (قم بتحويل القيمة بالـ Pixel الى قيمة "تحديد بداية يسار الاداه ذات الرقم i" من القيمة بالمقياس الحالى) + الحافه
mTop = (قم بتحويل القيمة بالـ Pixel الى قيمة "تحديد بداية أعلى الاداه ذات الرقم i" من القيمة بالمقياس الحالى) + الحافه
r = الدالة CreateRectRgn حيث المعاملات هى :
1) نقطة بداية الرسم من اليسار الى اليمين افقى (أعلى المستطيل) = mLeft2) نقطة بداية الرسم من أعلى الى اسفل طولى (يسار المستطيل) = mTop3) نقطة بداية الرسم من اليسار الى اليمين افقى (اسفل المستطيل) = mLeft + mLeft اخرى4) نقطة بداية الرسم من أعلى الى الاسفل طولى (يمين المستطيل) = mTop + mTop اخرى
أى أن (r) يمثل مستطيل له هذه الأبعاد .
الدالة CombineRgn كما شرحنا من قبل .
انتهاء الشرط .
SetWindowRgn hwnd, mFormRegion, True
الدالة SetWindowRgn كما ذكرنا وظيفتها هى رسم المنطقة كما تم تحديدها بالمعاملات .
End Sub
انتهى الاجراء changeFormEffect
Private Sub Command1_Click()End
End Sub
هو مفتاح Exit حيث يتم الخروج من البرنامج .
هو مفتاح Transp أو المسؤل عن شفافية الفورم كما سنشرح طريقة عملة .
جملة شرط if
اذا كان المتغير formEffectIndex لا يساوى صفر .... اذا أو "بناء عليه"
اجعل قيمة formEffectIndex = صفر
قيمة Text1 تساوى msg1
اخفاء Command0 و هو المفتاح المكتوب عليه Transparent Form أعلى الفورم
انهاء فاعلية Command3 و هو المفتاح المكتوب عليه Frame .
اذا لم يتحقق الشرط أى أن قيمة المتغير تساوى اى شىء غير صفر ... قم بتنفيذ بديل وهو
اجعل قيمة المتغير formEffectIndex = 1
قيمة Text1 تساوى msg2
اظهار Command0 و هو المفتاح المكتوب عليه Transparent Form أعلى الفورم
تفعيل المفتاح Command3 و هو المفتاح المكتوب عليه Frame .
نفذ الاجراء changeFormEffect حيث المعامل هو formEffectIndex .
ذكرنا أنه عند تحميل الفورم فان قيمة المتغير formEffectIndex تكون تساوى صفر و بالتالى :
عند بدأ تحميل الفورم فى الـ Command2 اذا قمنا بالضغط عليه فان جملة الشرط تبدأ من Else لأن formEffectIndex يساوى صفر و بالتالى تجد أن جملة الشرط جعلت قيمة formEffectIndex تساوى 1 و تنفذ الاجراء changeFormEffect حيث formEffectIndex تساوى 1 و عند النظر على الاجراء changeFormEffect فى حالة أن معامله يساوى 1 نجد أن :
1) يحدد منطقه outer مستطيله أولى تساوى مستطيل الفورم بالكامل (متضمنه الاحرف)2) يحدد منطقة inner مستطيله ثانيه تساوى مستطيل الفورم و لكن من الداخل فقط (بدون الأحرف)
3) عمل دمج
المنطقه الثالثه mFormRegion
المنطقة الأولى outer
المنطقة الثانيه inner
نوع الدمج Rgn_DIFF كما وضحنا حيث لا يظهر الا الأحرف فقط و الأدوات
ثم يستكمل الاجراء For ... Next حتى End Sub
- المفتاح Command3 باسم Frame أو الحواف .
عند الضغط عليه تنفذ جملة شرط حيث :
اذا كان formEffectIndex = 1 بالتالى
اجعل قيمته = 2
اذا لم تكن تساوى 1
اجعلها تساوى 1
اخرج من الشرط .
نفذ الاجراء changeFormEffect.
و الـحدث QueryUnload يتم قبل الحدث Unload حيث يتم انهاء العمل بجميع الفورم الـ mdi ثم الـ mdiChild بمعنى أوضح أن هذا الحدث هو حدث الضغط على علامة X فى شريط عنوان الفورم .
و الـحدث Form_MouseDown اى الضغط بزر الماوس على الفورم :اذا كان المفتاح ليس (المفتاح الأيسر للماوس) فبالتالى اخرج من الاجراء و من جملة الشرط .تنفيذ الدالة ReleaseCapture "الماوس الحالى خارج الخدمه"
ارسال رساله للنظام (الويندوز) ان الماوس يعمل الأن على الفورم Me.hwnd و أن مضمون الرساله هو (زر الماوس مضغوط عليه
جدول اعدادات Fromscale و Toscale
♥ Visual Basic 6.0 Course Online :
- Automate MS-Access Database in Visual Basic 6.0 though a network
- Visual Basic 6.0 Analog Clock
- Visual Basic 6.0 Temperature Convertor
- Visual Basic 6.0, MS-Access 2003 and Crystal Reports - Phone book
- Visual Basic 6.0, MS-Access 2003 Database and DataGridView
- Visual Basic 6.0 FTP full application source code
- Visual Basic 6.0 Color Picker tool source code
- Visual Basic 6.0 Tree-View Control lesson (Part1 - Part 2 - Part3 - Part4 - Part5) Arabic.
- Visual Basic 6.0 - Introduction to Graphics (Part1 - Part2 - Part3)
- Visual Basic 6.0 and MS-Excel 2003 tutorials (Part1 - Part2 - Part3 - Part4 - Part5 - Part6)
I used to be able to find good advice from your blog articles.
ReplyDeleteHave a look at my webpage - TerranceZLeiss
You could definitely see your expertise within the work you write.
ReplyDeleteThe sector hopes for even more passionate writers such as
you who are not afraid to mention how they believe. At all times
follow your heart.
Feel free to surf to my page - CletaURuyz
Heya! I just wanted to ask if you ever have any issues with hackers?
ReplyDeleteMy last blog (wordpress) was hacked and I ended up losing several weeks of hard work due
to no backup. Do you have any methods to prevent hackers?
my homepage; WilheminaGDefries
I like the valuable info you provide in your articles.
ReplyDeleteI'll bookmark your blog and check again here frequently. I'm
quite sure I will learn lots of new stuff right here!
Best of luck for the next!
Review my website - WillianJMassaglia
Awesome issues here. I am very happy to peer your post.
ReplyDeleteThank you a lot and I am looking forward to contact you.
Will you please drop me a mail?
My site :: GaleZTerhark
Hi there, yes this piece of writing is genuinely good and I have learned lot
ReplyDeleteof things from it concerning blogging. thanks.
Feel free to visit my blog :: DesiraeEBaros
This is my first time visit at here and i am in fact happy to read all at one place.
ReplyDeleteHere is my weblog: BenedictNGignac
I’m not that much of a online reader to be honest but your blogs really nice, keep it
ReplyDeleteup! I'll go ahead and bookmark your site to come back later.
All the best
Here is my web-site; DorthaCWilden