Visual Basic 6.0 translation

Wednesday, February 29, 2012

Visual Basic Online Course - Round and Transparent Form Part 3

أكواد شاشة frmShapedForm
تعريف متغير mChildFormRegion نوعه Long

- أكواد الحدث Form_Load :
   تعريف المتغير i
   تحديد خصية WindowState للفورم كى تكون vbNormal
   قيمة الـ TextBox .
  جملة شرط .....
mShape هو متغير عرفناه فى الموديول سابقا Integer و تحدد قيمته فى الفورم الاولى frmTranspForm فى الـ Command4 حيث يعبر عن قيمة شكل الفورم ... و هنا جملة الشرط :
- اذا كان mShape = صفر .... اى اذا كان الزر المضغوط عليه هو Index = 0 للـ Command4 باسم Shape1
- نفذ على التوالى الاتى ... (x,y) هما الجزء العلوى على اليسار و هما الجزء السفلى على اليمين و حذف الطول و العرض !!
- المتغير mChildFormRegion الذى تم تعريفه فى General Declaration لهذه الفورم و نوعه Long يساوى قيمة الداله CreateRoundRectRgn و هى داله تم شرحها فى الموديول و وظيفتها عمل منطقة مستطيله دائرية الاطراف و معاملاتها هى نفس معاملات الداله CreateRectRgn التى تم شرحها فى الفورم الأولى ... حيث :
   - الركن العلوى الأيسر = 0
   - الركن السفلى الايسر = 0
   - الركن العلوى الايمن = العرض \ xp (حيث xp هو قيمة الـ Pixel للشاشه بالعرض)
   - الركن السفلى الايمن = الطول \ yp (حيث yp هو قيمة الـ Pixel للشاشه بالطول)

و اذا كان mShape = 1 فان :
    - يقوم بتنفيذ الدالة CreateEllipticRgn
و اذا كان mShape = أى رقم اخر فان :
    - i يساوى (عرض الفورم \ عرض الشاشة - طول الفورم \ طول الشاشة) \ 2
    - و المتغير mChildFormRegion = الداله CreateEllipticRgn و التى تم الحديث عنها سابقا فى الموديول بالتفصيل ولها نفس معاملات الداله السابقه ... و تجعل الفورم اكثر استدارة و لاحظ بنفسك .
    - انتهاء جملة الشرط .
    - الداله SetWindowRgn كما شرحناها فى السابق .

- انتهاء الحدث Form_Load
Private Sub Command1_Click()
    Unload Me
End Sub
الخروج من الشاشة الحاليه Exit
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    SetWindowRgn Me.hwnd, 0, False
    DeleteObject mChildFormRegion
End Sub
و الـحدث QueryUnload يتم قبل الحدث Unload حيث يتم انهاء العمل بجميع الفورم الـ mdi ثم الـ mdiChild بمعنى أوضح أن هذا الحدث هو حدث الضغط على علامة X فى شريط عنوان الفورم ..... و هو يحدث قبل الحدث End
تحريك الفورم عند الضغط على Command0 كما شرحناه فى الفورم الأول

تحريك الفورم عند الضغط على أى مكان فى الفورم كما شرحناه فى الفورم الأول

شكرا لمتابعتكم
أى استفسار لا تتردد بوضع Comment و ان شاء الله فى أقرب وقت تجد الاجابه

Friday, February 24, 2012

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 الى وحدة قياس أخرى.
المعادله :
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 (طول الفورم)
Visual Basic Online Course - Rounded Form
Visual Basic Online Course - Rounded Form
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) / 2
topEdge = h - edge - ScaleHeight
الـ Edge هى الحروف التى يستطيع الماوس الامساك بالفورم منها عندما تكون شفافه مثلا .
و يجب ملاحظة التالى :
الفرق بين ScaleWidth أو ScaleHeight و بين Width و Height : انت تعلم أن الفورم 3D اى انك عندما تنظر اليها تكون بارزة من الاحرف و كانها ثلاثية الأبعاد و هو ما يسمى بالـ Bevel و هذا الـ Bevel يكون عبارة عن الفرق بين الـ ScaleHeight مثلا و الـ Height أى أن الـ ScaleHeight هو طول الفورم الداخلى و الـ Height هو الطول الخارجى أو الطول عموما و كذا بالنسبة للعرض .... انظر الصورة !
Rounded Form
visual Basic online Course - Rounded Form
و بالتالى فان :
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) نقطة بداية الرسم من اليسار الى اليمين افقى (أعلى المستطيل) = mLeft
2) نقطة بداية الرسم من أعلى الى اسفل طولى (يسار المستطيل) = mTop
3) نقطة بداية الرسم من اليسار الى اليمين افقى (اسفل المستطيل) = 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. 


المفتاح Command4 : و هو عباره عن Array عن الضغط على أى Index من الـ Array أو بمعنى أصح اذا غطنا على أى مفتاح من مفاتيح Command4 فان المتغير mShape يساوى Index أو قيمة Index المفتاح المضغوط عليه الان . ثم تنفيذ الاجراء UnLoadIfExist حيث الفورم هى frmShapedForm اظهار الفورم frmShapedForm . 

و الـحدث QueryUnload يتم قبل الحدث Unload حيث يتم انهاء العمل بجميع الفورم الـ mdi ثم الـ mdiChild بمعنى أوضح أن هذا الحدث هو حدث الضغط على علامة X فى شريط عنوان الفورم .
و الـحدث Form_MouseDown اى الضغط بزر الماوس على الفورم :اذا كان المفتاح ليس (المفتاح الأيسر للماوس) فبالتالى  اخرج من الاجراء و من جملة الشرط .تنفيذ الدالة ReleaseCapture "الماوس الحالى خارج الخدمه" 
ارسال رساله للنظام (الويندوز) ان الماوس يعمل الأن على الفورم Me.hwnd و أن مضمون الرساله هو (زر الماوس مضغوط عليه

و المفتاح Command0 ايضا عند الضغط عليه بزر الماوس الايسر يمكنك تحريك الفورم عن طريقه .

Visual Basic Online Course - Populate ComboBox with MS-Access 2003

بسم الله الرحمن الرحيم

الموضوع عن : ربط الكمبو بقاعدة بيانات أكسس 2003 + مشروع عملى
المشروع العملى : عباره عن قاعدة بيانات بسيطه تحتوى على جدول واحد حيث اسم قاعدة البيانات هو (data.mdb) اسم الجدول هو (Info) يحتوى الجدول على 4 حقول هى
(ID Text 10 - Sname Text 20 - Saddress Text 50 - Smobile Text 16)
1) نبدأ بتصميم مشروع جديد Windows Application
2) نقوم بحفظة فى أى مجلد و ليكن D:/myCombo
3) شكل الفولدر يكون كما بالشكل (1)
Populate ComboBox with MS-Access 2003
Visual Basic Online Course - Populate ComboBox with MS-Access 2003
4) شكل البرنامج النهائى كما بالشكل رقم (2)
Populate ComboBox with MS-Access 2003
Visual Basic Online Course - Populate ComboBox with MS-Access 2003
5) فكرة البرنامج اضافة البيانات الى قاعدة البيانات عن طريق الأكسس و البحث عنها من خلال الكمبو بوكس .
6) نقوم بالعمل من خلال مكتبة Ado 2.8 حيث يتم اضافتها من Reference الفيجوال بيزك الى المشروع كما بالصورة رقم (3)
Populate ComboBox with MS-Access 2003
Visual Basic Online Course - Populate ComboBox with MS-Access 2003
7) البرنامج بالأكواد مرفوع على MediaFire.com

Tuesday, February 21, 2012

VB 0.6 TreeView Control lesson Part5

بسم الله الرحمن الرحيم



توقفنا فى الجزء الرابع السابق عند خواص الـ Node
و موضوع اليوم ان شاء الله عن ربط الـ Tree-view بقاعدة بيانات MS Access 2003
TreeView & MS Access2003 Database
 و المثال سيكون عباره عن : لدينا قاعدة بيانات Access 2003 سنقوم بعرض اسماء الجداول على شكل Root و اسماء الحقول على شكل Child و البيانات فى Text-boxes قابل للتعديل ( اضافة و حذف ) .
أى أننا سنقوم بعمل برنامج يقوم باستدعاء أى قاعدة بيانات Access 2003 و تعديلها كما نحب , و سنبدأ بمشروع جديد .
حيث سيكون شكل البرنامج النهائى كما بالشكل رقم (1) .
شكل البرنامج النهائى
1) قاعدة البيانات :
قم بتصميم أى قاعدة بيانات Access 2003 , فى المثال قاعدة البيانات باسم (Employees.mdb) تحتوى على جدولين (Info - Salary)
حيث Info عبارة عن 4 حقول هى
(ID P.Key Text 50 - Name Text 50 - Age Text 50 - Section Text 50)
و Salary عبارة عن 5 حقول هى
(ID P.Key Text 50 - Total Number Double - Cuts Number Double - Net Number Double - Month Date/Time)
يتم التوصيل بقاعدة البيانات باستخدام تقنية ADO 2.8 
2) الشرح :
عند بداية البرنامج تختار أى قاعدة بيانات و لتكن قاعدة البيانات التى صممناها عن طريق مفتاح Browse حيث يظهر مسارها فى TextBox ثم نضغط على Connect لتوصيلها بالبرنامج حيث تظهر محتوياتها فى الـ TreeView
عند الضغط على أى Root اذا كان به Child s يقوم بعرضهم فى مستوى أقل منه و تكون عباره عن اسماء الجداول ثم على اسم الجدول عند الضغط عليه يقوم بعرض Child فى مستوى أقل منه و تكون اسماء الحقول ثم عند الضغط على اسم الحقل اذا كان به Child تظهر فى مستوى أقل منه و تكون عباره عن القيمة التى تعرض فى الـ TextBox الثانى .
عند ظهور القيمة فى الـ TextBox يمكن تحديثها , و يمكنك اضافة الاكواد و الافكار كما تشاء حيث يمكنك عمل مشروعات كامله من هذا المثال ....
3) رابط المشروع MediaFire.com
4) اذا كان لديك أى سؤال أضف تعليق و سيتم الرد عليه ان شاء الله فى اقرب وقت

Visual Basic 6.0 Lessons, Tricks, Tutorials and help links :
- Visual Basic 6.0 TreeView Control lesson (Part1 - Part 2 - Part3 - Part4 - Part5) Arabic.

Friday, February 17, 2012

Visual Basic Online Course - TreeView Control lesson Part4

بسم الله الرحمن الرحيم
توقفنا فى الجزء الثالث السابق عند خاصية Style .
و موضوع اليوم ان شاء الله عن خواص الـ Nodes .
Nodes Properties - خواص الـ Nodes
تعريف الـ Node : هى كائن Object من كائنات اداة Control الـ TreeView بينما الـ Nodes هى مجموعه Collection من الـ Nodes .... و الفرق كما ذكرنا أن الـ Nodes مرتبطه ببعضها البعض و كلها معا تمثل TreeView واحده و يميز الـ Node عن الاخرى الـ Index و الـ Key و كلاهما مميز بينما الـ Node بمفردها هى Object مستقل له Index و Key و لها خصائص للتعامل معها و لكن التعامل معها يكون عن طريق الـ TreeView حيث :
الاكواد :
TreeView.Nodes - تمثل مجموعة الـ Nodes داخل TreeView واحده .
TeeView.Nodes.Index - تمثل الـ Node المميزه برقم الـ Index المميز لها .
الخصائص :


و سنقوم بدراسة كل و خاصيه على حدى بالتفصيل .....


أولا : خاصية Bold

و هى خاصية عامه للأدوات ليست للـ Node فقط و وظيفتها تغيير حالة الخط String من الحاله العاديه الى الحالة السميكه (سميك - عادى)
و الكود الخاص بها :
Object.Bold = Boolean

حيث Object تشير الى Node فى هذا المثال . و Boolean أى ان النتيجه ستكون True أو False أو (0 - 1) و سنبدأ الان بتحديث المثال الذى نعمل عليه :

سنضيف TreeView5 الى الفورم و سنضيف Command5 كما بالصورة (1)
صورة رقم 1
سنقوم بتسمية Command5 باسم Bold و فى المثال عند الضغط على مفتاح Bold فان الـ Node المختاره بالماوس تتحول الى Bold سواء كانت Root أو Child .
الاكواد :
فى الحدث Form_Load
بعد اخر سطر كود سنضيف الاتى :
Dim Nodd As Node
   Set Nodd = TreeView5.Nodes.Add(, , "P", "Root")
   Set Nodd = TreeView5.Nodes.Add("P", tvwChild, "P1", "Child1")
   Set Nodd = TreeView5.Nodes.Add("P", tvwChild, "P2", "Child2")
   Set Nodd = TreeView5.Nodes.Add("P", tvwChild, "P3", "Child3")
   Set Nodd = TreeView5.Nodes.Add(, , "PP", "Root1")
   Set Nodd = TreeView5.Nodes.Add("PP",
tvwChild, "PP1", "Child1")
و هذا سيقوم بانشاء Nodes كما بالشكل (2) عند تشغيل البرنامج :
شكل رقم 2
ثم فى الحدث Command5_Click نضع الكود :
TreeView5.SetFocus
Dim n_INDEX As Integer
n_INDEX = TreeView5.SelectedItem.INDEX
TreeView5.Nodes.Item(n_INDEX).Bold = True


حيث :
- خاصية SetFocus للـ TreeView عند تشغيل البرنامج تمنع رسالة الخطأ Run-Time Error 91 حيث عند الضغط على Command5 المفروض ان يعود بقيمة و اذا لم تكن خاصية SetFocus للـ TreeView5 متحققة فان القيمة ستكون 0 و بالتالى تظهر رسالة الخطأ Run-Time Error 91 و التى تفيد أن القيمة العائده عير مضبوطه .
- ثم نقوم بتعريف متغير n_INDEX كمتغير رقمى Integer لتخزين القيمة العائده من الـ TreeView عند الضغط على أحد مكوناتها و هو Node المراد معرفة رقم الـ Index الخاص به لتغيير حالة خطه .
- المتغير n_INDEX = رقم الـ Index للعنصر المختار من اداة الـ TreeView5
- خاصية Bold للعنصر ذو رقم الـ Index المساوى للرقم العائد من ضغطة الـ Click عليه وهو True = n_INDEX
- قم بتجربة البرنامج الان و اضغط على Bold حتى قبل أن تختار Node معين و لاحظ أن خاصية SetFocus فى أول الكود مفيده ثم اختار أى Node و تعامل معه .


ثانيا : خاصية Checked
و هى خاصية عامه للأدوات ليست للـ Node فقط و لها وظيفه فقط عندما تكون خاصية CheckBoxes للـ TreeView متحققة أو = True . 
و الكود الخاص بها :
Object.Checked = Boolean

حيث Object تشير الى Node فى هذا المثال . و Boolean أى ان النتيجه ستكون True أو False أو (0 - 1) قم بفتح المثال و اجعل خاصية CheckBoxes للـ TreeView من شاشة الخصائص  = True كما بالصورة (3) 
CheckBoxes = True
ستجد أن شكل الـ TreeView5 تغير و ظهرت CheckBoxes بجوار الـ Nodes .
الان أضف Command6 بجوار و غير اسمه Caption الى Check و اضف الكود الاتى الى الحدث
Command6_Click :
TreeView5.SetFocus
Dim n_INDEX As Integer
n_INDEX = TreeView5.SelectedItem.INDEX
TreeView5.Nodes.Item(n_INDEX).Checked = True
لاحظ أنه لايختلف عن الكود السابق الا كلمة واحده و هى Checked .
قم بتجربة المثال .


ثالثا : خاصية Child
وهى احدى الخصائص التى تنتمى الى Node فقط حيث :


Object.Child

و هذه الخاصيه يمكنها تحديد متغيرات الـ Node و ايضا تعود بقيمتها بمعنى :
الـ Child هى نوع من أنواع الـ Node نفسها فعندما تكون الـ Node درجة قرابتها فى الـ TreeView هى Child معناه أنها لها Root أو Parent أو لها Node فى مستوى أعلى منها و هى فرعيه منها. و كونها Child له خصائص مستقله عن الـ TreeView مثل Key و Index و Text و Image ....
اذا Object فى الكود السابق هو Node .
من ناحيه أخرى Child تعنى اننا سنتعامل مع Child و ليس Root و بالتالى فان Object فى الكود السابق هو Node نعم و لكنه ليس Child بل Root أو Parent حيث من خلال سيتم تحديد الـ Child و التعامل معه .
فى المثال قم باضافة Command7 و اسمه Child حيث عند الضغط عليه سيقوم بتغيير خصائص أول Child بعد الـ Root المختار .
و يكون الكود :
TreeView5.SetFocus
Dim n_INDEX As Integer
n_INDEX = TreeView5.SelectedItem.INDEX
With TreeView5.Nodes.Item(n_INDEX).Child
.Key = "New Key"
.Text = "Just This Child"
.BackColor = vbRed
End With
- قم بعمل Run للبرنامج و اضغط على Child و لاحظ عند فتح علامة + تغير الـ Node التى تلى الـ Root الذى قمت باختيارة .


رابعا : خاصية Children
هذه الخاصية وظيفتها تعود بقيمة الـ Child Nodes الموجوده فى Node معين فى الـ TreeView .




Object.Children

يفضل استخدام هذه الخاصية قبل التعامل مع الـ Nodes خصوصا الـ Root حيث أنها تتأكد بل و تعود بقيمه هى عدد الـ Child Nodes الموجوده فى الـ Node .

و سنجرى تطبيق صغير على مثالنا :
سنقوم بكتابة كود يعود بعدد الـ Child Nodes اذا كان الـ Node به Child Nodes .
فى نهاية الـ Form بعد اخر كود نقوم بلصق الكود التالى :
Private Sub TreeView5_NodeClick(ByVal Node As MSComctlLib.Node)
'Children Property
If Node.Children > 0 Then
MsgBox "Node Starts With Child Called : " & Node.Child.Text _
& vbCrLf _
& "and it has : " _
& TreeView5.Nodes(TreeView5.SelectedItem.Index).LastSibling.Index _
& " Childs"
End If
End Sub
نقوم بتجربة البرنامج Ctrl+F5 .

و الى هنا نصل الى نهاية خصائص الـ Nodes و يمكنك السؤال عن أى خاصيه فى Comment أو فى الجروب على الفيسبوك .
ننتقل الى الموضوع التالى و هو : ربط الـ TreeView بقاعدة بيانات من نوع MS Access 2003 ان شاء الله الدرس القادم و الاخير - تابعونا .


Visual Basic Online Course

vb6 (63) Application Development (45) Visual Basic Online Course (45) Online Visual Basic Course (44) Visual Basic Help (44) Visual Basic Programming (42) IT Jobs (39) VB6 developer (38) Visual Basic Course (38) Visual Basic 6.0 (26) Microsoft Visual Basic 6.0 (25) VB6.0 (24) Visual Basic Programmers (24) vb 6.0 (24) visual basic programming tutorial (19) Third lesson (16) Source code download for Visual Basic 6.0 (14) Source code for Visual Basic 6.0 (10) visual basic tutorial (9) Visual Basic 6 (5) Visual Basic Courses (5) Lesson 3 (4) VB 0.6 - TreeView control (4) VB 0.6 With TreeView Control (4) VB6 Course (3) Create ActiveX (2) How to automate MS-Access from Visual Basic 6.0 (2) Add controls at runtime (1) Back up your Database (1) Change ActiveX icon (1) Change screen resolution (1) Create FTP (1) Crystal Reports 4.6 (1) Crystl32.ocx could not be loaded (1) DataGrid Columns re-size (1) Date Calculation (1) DateAdd Function (1) DateDiff function (1) FTP (1) Marquee Title Bar (1) Marquee VB 6.0 TitleBar (1) Method 'Action' of object 'CrystalCtrl' Failed (1) Microsoft Access with Visual Basic 6.0 (1) OpenSchema method (1) Save File Using CommonDilog (1) Track Database path (1) VB 0.6 - Registry (1) VB 0.6 With Registry Editor (1) VB 6.0 Access (1) VB 6.0 OOP (1) VB6 Access2003 ADO Like % (1) VB6 Add Date (1) VB6 Add Time (1) VB6 Date calculation (1) VB6 Subtract Date (1) Visual Basic Remote (1) Win7 (1) Windows7 (1) ms access networking details (1) remote Visual Basic DB (1) rounded and transparent forms (1) vb 0.6 style (1) vb 6.0 Remote Database (1)