السلام عليكم...
مشكلة مكون الخط (Line) في VB6 أنه لا يستجيب لأية أحداث!
في المرفقات مكون قمت بتصميمه سنة 2009 و قدمته في مشاركة سابقة - ربما من أيام المنتدى القديم - و هو عبارة عن مكون خط باسم (AccessibleLine) يستجيب لأربعة أحداث أساسية هي: النقر (Click) و MouseDown و MouseUp و MouseMove.
يختلف هذا المكون عن الخط (Line) الموجود في VB6 في أنه ليس له خصائص X1 و Y1 و X2 و Y2، و إنما له خصائص Left و Top و Width و Height، كما أنه له 4 اتجاهات أساسية (الخاصية LineDirection): أفقي ( _ ) و رأسي ( | ) و قطري للأسفل ( \ ) و قطري للأعلى ( / ). و يمكن وصله بين أب نقطتين باستعمال الخصائص الأربعة المذكورة (Left و Top و Width و Height). بالإضافة إلى ذلك فإن له الخصائص التالية:
= الخاصية Cursor: تحدد شكل مؤشر الفأرة من مجموعة قيم محددة مسبقاً (مثل الخاصية MousePointer في VB).
= الخاصية CustomeCursor: لتحديد صورة مخصصة لتكون مؤشر الفأرة (مثل الخاصية MouseIcon في VB. و يجب أن تكون الخاصية Cursor مضبوطة على vbCustom = 99).
= الخاصية DisabledColor: لتحديد لون الخط عندما يكون معطلاً (أي عندما تكون Enabled = False)، و يجب أن تكون الخاصية UseDisabledColor مضبوطة على True.
= الخاصية LineColor: لتحديد لون الخط.
= الخاصية LineSize: لتحديد سمك أو عرض الخط بوحدة البكسل.
= الخاصية UseDisabledColor: لتحديد ما إذا سيتم تطبيق اللون DisabledColor عندما يكون الخط معطلاً.
* ملاحظة: لا تهتم للحجم الزائد للمكون أثناء التصميم (إلا لضبط نهايات الخط) لأن المساحات الزائدة لن تكون جزءاً من الخط أثناء التشغيل.
* المرفق AccessibleLineSource يحتوي على الكود المصدر للمكون مع شرح مفصل بالعربي ضمن الكود.
* المرفق AccessibleLineOCX يحتوي على المكون نفسه (AccessibleLine.ocx) و الذي من المفترض أن يتم نسخه إلى المجلد System32 ثم تسجيله عن طريق الأمر regsvr32 AccessibleLine.ocx .
بعد تسجيله في النظام يمكن تضمينه في VB عن طريق الأمر Components من القائمة Project ثم تحديد البند AccessibleLine (غالباً ستجده في البداية).
* و هذا مثال كود لتحريكه:
كود :
Private StartX As Single
Private StartY As Single
Private Sub TLineWithEvents1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
StartX = X
StartY = Y
End If
End Sub
Private Sub TLineWithEvents1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
TLineWithEvents1.Left = TLineWithEvents1.Left + X - StartX
TLineWithEvents1.Top = TLineWithEvents1.Top + Y - StartY
End If
End Sub
*** نرجو الاستفادة و السلام.