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

أداة تحرير (Edit Control) متعدد الخانات

بدأه najy_zl في 8 فبراير 2012 · 12 رد · 1,543 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم...

بناءً على سؤال الأخ جواد في أحد المواضيع حول الكتابة في مربع النص مع الاحتفاظ بفواصل معينة ضمن النص، فقد قمت بتصميم المكون الموجود في المرفقات (الكود المصدر - Source Code - و ملف الـ OCX).

لاستعمال المكون في VB6 يتم نسخ الملف MultiPartEdit.ocx إلى المجلد System32، ثم تسجيله في النظام بتنفيذ الأمر regsvr32 MultiPartEdit.ocx عن طريق الأمر "تشغيل" (Run) من القائمة "ابدأ" (Start). وعندما تريد إضافته إلى المشروع (من الأمر Components في القائمة Project) ابحث في القائمة عن TMultiPartEdit: Edit Control with multiple fields.

وصف المكون:

المكون عبارة عن أداة تحرير تتكون من خانة واحدة أو عدة خانات مفصولة بفواصل، و يت التحكم في عدد الخانات و الرمز الفاصل عن طريق الخصائص. الملف النصي المرفق باسم HowToUse.txt يحتوي على الشرح الوارد أدناه.

الخصائص (Properties):

الخاصية BackgroundColor

تحدد لون خلفية المكون التي تظهر من بين الحقول أو الخانات.

النوع: OLE_COLOR

القيمة الافتراضية: لون خلفية النافذة المحتوية على المكون.

الخاصية FieldColor

تحدد لون الحقول أو الخانات.

النوع: OLE_COLOR

القيمة الافتراضية: لون خلفية مربعات النص في النظام (vbWindowBackground).

الخاصية FieldCount

تحدد عدد الحقول أو الخانات. الحد الأدنى 1، أي خانة نص واحدة.

النوع: Long

القيمة الافتراضية: 1.

إذا تم إنقاص عدد الخانات أو الحقول، و كان المكون يحتوي على نص (Text) فإنه يتم بتر النص ليتناسب مع عدد الخانات أو الحقول. و إذا تمت زيادة عدد الخانات أو الحقول فإن الخانات أو الحقول الجديدة تكون خالية من النص.

الخاصية FieldLength

تحدد حجم الحقول أو الخانات. أي عدد الحروف أو الأرقام أو الرموز التي يقبلها أي خانة أو حقل. القيم المقبولة من 1 إلى 25.

النوع: Long

القيمة الافتراضية: 3.

الخاصية FieldTextAlignment

تحدد محاذاة النص أفقياً في الحقول أو الخانات.

النوع: Integer و تأخذ إحدى قيم التعداد AlignmentConstants.

القيمة الافتراضية: vbCenter أي توسيط النص في كل خانة أو حقل.

الخاصية ReadOnly

للقراءة-فقط: تحدد ما إذا كان بإمكان المستخدم تعديل محتويات الحقول أو الخانات.

النوع: Boolean

القيمة الافتراضية: False، أي يمكن للمستخدم تعديل محتويات الحقول أو الخانات.

الخاصية RTLLayout

تحدد ما إذا سيكون تخطيط المكون من اليمين-إلى-اليسار، أي أن أول خانة أو حقل من جهة اليمين، و آخر خانة أو حقل من جهة اليسار.

النوع: Boolean

القيمة الافتراضية: تعتمد على الخاصية RightToLeft للنافذة المحتوية على المكون.

الخاصية RTLReading

تحدد ما إذا ستكون قراءة النص (في كل خانة أو حقل على حدة) من اليمين-إلى-اليسار (كالعربية مثلاً).

النوع: Boolean

القيمة الافتراضية: تعتمد على الخاصية RightToLeft للنافذة المحتوية على المكون.

الخاصية Separator

تحدد الرمز الذي سيستخدم كفاصل بين الخانات أو الحقول. هذا الرمز يكون ضمن الخاصية Text، أي يعتبر جزءاً من نص المكون.

النوع: String

القيمة الافتراضية: الشرطة الأفقية ( - ).

إذا تم تعيين نص (String) يتكون من أكثر من رمز أو حرف واحد فإنه يتم أخذ أول رمز أو حرف من ذلك النص.

الخاصية SizeUnit

تحدد حرفاً أو رقماً أو رمزاً يستخدم كوحدة لقياس حجم الخانات أو الحقول أفقياً (أي عرض كل خانة أو حقل)

النوع: String

القيمة الافتراضية: حرف دبليو كبير ( W ).

إذا تم تعيين نص (String) يتكون من أكثر من رمز أو حرف أو رقم واحد فإنه يتم أخذ أول رمز أو حرف أو رقم من ذلك النص.

مثلاً إذا ضبطنا هذه الخاصية (SizeUnit) على الرقم 9، و كان حجم الحقل (FieldLength) مضبوطاً على 5 فإن عرض كل خانة أو حقل سيكون بحجم 5 تسعات.

الخاصية Text

تحدد النص الذي يحتوي عليه المكون. هذا النص يتكون من محتويات الحقول أو الخانات مفصولة بالرمز المحدد كفاصل (الخاصية Separator).

النوع: String

القيمة الافتراضية: نص فارغ.

عند تعيين قيمة لهذه الخاصية فإنه يتم تقسيم النص على الخانات أو الحقول حسب أماكن تواجد الرمز الفاصل (المحدد بالخاصية Separator).

للحصول فقط على محتوى الخانات أو الحقول كنص واحد دون فواصل استعمل الوظيفة GetText مع تمرير القيمة gtmEditFieldsOnly كبارامتر.

الخاصية TextColor

تحدد لون النص في الحقول أو الخانات، و كذلك لون الرمز الفاصل.

النوع: OLE_COLOR

القيمة الافتراضية: لون النص (ForeColor) للنافذة المحتوية على المكون.

الخاصية UseTabs

تحدد ما إذا سيتم استعمال المفتاح Tab للتنقل بين خانات أو حقول المكون.

النوع: Boolean

القيمة الافتراضية: False، أي أن ضفط المفتاح Tab لا يؤدي إلى انتقال البؤرة من حقل إلى الحقل التالي ضمن نفس المكون، و إنما سينتقل إلى المكون التالي في النافذة.

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

سواء أكانت هذه الخاصية مضبوطة على False أو True فإنه يمكن التنقل بين خانات أو حقول المكون باستعمال مفتاحي الأسهم الأيمن و الأيسر.

========================

الوظائف (Methods)

الوظيفة GetText

تستعمل للحصول على نص المكون (تشبه الخاصية Text)

الصيغة:

Function GetText(TextMode As TGetTextMode) As String

حيث البارامتر TextMode يمكن أن يأخذ إحدى قيمتين:

القيمة gtmEditFieldsOnly حيث تعيد الدالة نصاً يتكون فقط من محتويات الخانات أو الحقول دون فواصل.

القيمة gtmIncludeSeparators حيث تعيد الدالة نصاً يتكون من محتويات الخانات أو الحقول مفصولة بالرمز الفاصل (مثل الخاصية Text).

========================

الأحداث (Events)

إجراءات الأحداث التالية تحتوي على رقم الخانة أو الحقل الذي تم فيه الحدث كأول بارامتر (اسم البارامتر FieldIndex):

Change و Click و KeyDown و KeyUp و KeyPress و MouseDown و MouseUp و MouseMove و FieldEnter و FieldExit.

========================

مزايا أخرى:

الانتقال بين الحقول أو الخانات بمفتاحي الأسهم الأيمن و الأيسر.

تحديد كامل النص عند الدخول إلى حقل أو خانة.

عند امتلاء خانة أو حقل بالعدد المسموح به من الحروف أو الأرقام أو الرموز يتم الانتقال إلى الخانة التالية أو الحقل التالي.

========================

المرفقات:

MultiPartEditOCX.rar

* قد يتم تطوير الأداة لاحقاً لإضافة بعض المزايا الأخرى، مثلاً قبول الأرقام فقط أو تحديد حجم كل خانة على حدة ... إلخ.

نرجو الاستفادة و السلام.

تم تعديل هذه المشاركة بواسطة najy_zl في 8 فبراير 2012 في 13:21

2

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#2

الله يوفقك بالدنيا والآخرة أخي najy_zl

أخي najy_zl ممكن مثال على الأداة

والف شكر لك

ما قصرت

#3

اداه جميلة ومفيدة وبها العديد من الخصائص الجميلة بارك الله فيك اخي najy_zl

وكما تفضلت فيمكن التطوير عليها بإضافة الخصائص التى ذكرت وخصائص ووظائف مثل GetField وايضاً استعمال كود api لعمل loack للحقول حيث ان الـ Textbox الخاص بالفيجوال بيسك يقبل Copy & Paste بالرغم من ضبط الخاصية Locked على True

ادعوا الله ان ينفعك بعلمك وان يجعله في ميزان حسناتك

تقبل تحياتي ...

It does not matter what they know about you, but what you can do, so let your work speak of you

mmghv VB6 Programmer

#4

السلام عليكم...

أولاً يجب تسجيل الأداة في النظام (مرة واحدة طبعاً):

1. انسخ الملف MultiPartEdit.ocx إلى المجلد System32

2. من القائمة "ابدأ" (Start) اختر الأمر "تشغيل" (Run)

3. في نافذة التشغيل اكتب: regsvr32 MultiPartEdit.ocx ثم اضغط Enter. سيعطيك رسالة بنجاح التسجيل.

ثانياً إضافة الأداة إلى مشروع VB. عندما تريد استخدام الأداة:

1. من القائمة Project اختر الأمر Components (أو اضغط Ctrl+T)

2. ابحث في نافذة الـ Components عن البند TMultiPartEdit: Edit Control with multiple fields و تأكد من وجود علامة صح بجانبه ثم انقر OK. سيضاف المكون إلى صندوق الأدوات.

3. أضف المكون إلى النافذة. مبدئياً سيضم المكون حقلاً واحداً (خانة واحدة).

* لنفرض أننا سنستخدم المكون لكتابة عنوان شبكة (IP address):

= نعرف أن عناوين الشبكة تتكون من 4 خانات. إذن نضبط الخاصية FieldCount على 4.

= كل خانة في عنوان الشبكة يمكن أن تكون عدداً بين 0 و 255. إذن كل خانة يجب أن تقبل على الأقل 3 أرقام، و بالتالي نضبط الخاصية FieldLength على 3.

= بما أن عنوان الشبكة يتكون من أرقام فإننا نضبط الخاصية SizeUnit على 9 بحيث تكون أحجام الخانات مضبوطة (ليست صغيرة جداً فلا تظهر كل المحتويات، و لا كبيرة جداً بها فراغات زائدة).

= الفاصل في عناوين الشبكة هو النقطة، إذن نضبط الخاصية Separator على النقطة ( . ).

* نفرض أننا كتبنا في الخانات القيم التالية: 255 و 222 و 1 و 10، إذن عند قراءة الخاصية Text ستعطينا النص التالي: 255.222.1.10

* و إذا أردنا أن نعطيها قيمة بالكود:

TMultiPartEdit.Text = "100.128.0.1"

* شكراً للأخوين جواد و محمد مصطفى غريب

نرجو الاستفادة و السلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#5

السلام عليكم...

تم إجراء بعض التعديلات على المكون TMultiPartEdit، و إضافة الوظائف التالية للتعامل مع الحقول أو الخانات بشكل منفرد:

الوظيفة GetField للحصول على نص أحد الحقول أو الخانات.

الوظيفة SetField لضبط نص أحد الحقول أو الخانات.

الوظيفة SetFieldLength لضبط سعة - و بالتالي حجم - أحد الحقول أو الخانات.

الوظيفة LockField لجعل أحد الحقول أو الخانات مقروءاً-فقط، أي لا يمكن للمستخدم تغيير محتواه.

الوظيفة UnlockField لجعل أحد الحقول أو الخانات قابلاً للقراءة و الكتابة.

* النسخة المعدلة في المرفقات:

MultiPartEditOCX2.rar

نرجو الاستفادة و السلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#6

أخي ناجي كيف نستخدمها كالتالي:

101-101-101

#7

السلام عليكم...

اضبط الخاصية FieldCount على 3 (عدد الخانات).

اضبط الخاصية FieldLength على 3 (السعة القصوى لكل حقل).

اضبط الخاصية Separator على - (الشرطة أو علامة الناقص الفاصلة بين الأعداد).

اضبط الخاصية SizeUnit على 9.

إذا كانت خانات الأرقام تقرأ من اليمين إلى اليسار فاضبط الخاصية RTLLayout على True.

عندما تريد أن تعطيها قيمة سواءً من نافذة الخصائص أو بالكود اكتب الأرقام و الشرطات كما تريدها أن تظهر، مثلاً بالكود:

TMultiPartEdit1.Text = "999-45-000"

نرجو الاستفادة و السلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#8

أخي ناجي هل نقدر نستخدمه كتاريخ

يعني بهذا الشكل

2012-12-12

يعني اول حقل يأخذ رقمين وثاني حقل يأخذ أيضاً رقمين

بس الحقل الثالث يأخذ 4 أرقام

#9

السلام عليكم...

نعم أخي جواد، بعد أن تأخذ النسخة الثانية المعدلة (MultiPartEditOCX2.rar) و لكن ربما من الأفضل استخدام المكون DateTimePicker لإدخال التواريخ. على أية حال:

اضبط الخاصية FieldCount على 3 (عدد الخانات).

اضبط الخاصية FieldLength على 2 (السعة القصوى لكل حقل).

اضبط الخاصية Separator على - (الشرطة أو علامة الناقص الفاصلة بين الأعداد).

اضبط الخاصية SizeUnit على 9.

اضبط الخاصية RTLLayout على True.

في الحدث Load للنافذة نضبط سعة الحقل الثالث على 4 (لكتابة السنوات):

Private Sub Form_Load()
    TMultiPartEdit1.SetFieldLength 3, 4
End Sub

بما أنك ستسخدمها للتواريخ فيجب منع المستخدم من كتابة أية حروف أو رموز غير الأرقام. يتم ذلك بكتابة الكود في الحدث KeyPress التابع للمكون:

Private Sub TMultiPartEdit1_KeyPress(ByVal FieldIndex As Long, KeyAscii As Integer)
    If KeyAscii > 31 Then
        If (KeyAscii < 48) Or (KeyAscii > 57) Then KeyAscii = 0
    End If
End Sub

طبعاً هذا الكود يمنع إدخال غير الأرقام في الخانات، لكن لا يمنع أن تكون إحدى الخانات فارغة أو أن تحتوي إحدى الخانات على رقم غير مقبول كتاريخ (مثلاً خانة الشهر تحتوي على العدد 99 حيث لا يوجد شهر رقمه 99). و بالتالي عند قراءة قيمة المكون يجب أن تتأكد من أنه مقبول كتاريخ صحيح قبل استعمال القيمة و ذلك باستعمال الدالة IsDate التابعة لـ VB6، مثلاً:

If Not IsDate(TMultiPartEdit1.Text) Then
    MsgBox "الرجاء كتابة التاريخ بشكل صحيح"
    TMultiPartEdit1.SetFocus
    Exit Sub
End If

و عند إسناد قيمة تاريخ إلى المكون يجب تنسيقها بالشكل dd-mm-yyyy حتى تتوافق مع تنسيق المكون. مثلاً لعرض التاريخ الحالي في المكون:

Private Sub Command2_Click()
    TMultiPartEdit1.Text = Format$(Now, "dd-mm-yyyy")
End Sub

أشكرك على إثارة مسألة استخدام المكون لكتابة التاريخ حيث سأعمل على تعديل المكون بحيث يسهل هذه العملية.

نرجو الاستفادة و السلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#10

شكراً لك اخي ناجي

لكن سأنتظرك إذا تريد أن تعدلها أفضل من اكتب أكواد كثيرة

سأنتظرك وبارك الله فيك

#11

اخي ناجي متى ينزل الاصدار الجديد من الاداة التي برمجتها

وشكراً

#12

السلام عليكم...

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

سلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#13

نحن منتظرينها وشكراً لك

والله يوفقك ويزيدك من علمه

اللهم آمين

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