السلام عليكم...
بناءً على سؤال الأخ جواد في أحد المواضيع حول الكتابة في مربع النص مع الاحتفاظ بفواصل معينة ضمن النص، فقد قمت بتصميم المكون الموجود في المرفقات (الكود المصدر - 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.
========================
مزايا أخرى:
الانتقال بين الحقول أو الخانات بمفتاحي الأسهم الأيمن و الأيسر.
تحديد كامل النص عند الدخول إلى حقل أو خانة.
عند امتلاء خانة أو حقل بالعدد المسموح به من الحروف أو الأرقام أو الرموز يتم الانتقال إلى الخانة التالية أو الحقل التالي.
========================
المرفقات:
* قد يتم تطوير الأداة لاحقاً لإضافة بعض المزايا الأخرى، مثلاً قبول الأرقام فقط أو تحديد حجم كل خانة على حدة ... إلخ.
نرجو الاستفادة و السلام.