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

استخدام قاموس Word

مغلق
بدأه MMSs في 3 يوليو 2005 · 0 رد · 555 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1

السلام عليكم

أنوي بعون الله أن أقدم تباعاً بعض المعلومات التي أكتسبها بحكم الدراسة والخبرة.

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

ضمن هذه المشاركة الأولى لي من نوعها سوف أقدم طريقة الوصول إلى قاموس Word من VB:

تهم هذه العملية كل من ينشئ برامج تحرير نصوص.

نبدأ مباشرة في العمل؛

ابدأ بمشروع جديد، وأضف إلى المشروع مرجع Microsoft Word 10.0 Object Library، أضف أداة RichTextBox للنموذج وليكن اسمها rtbText وأضف زر وليكن اسمه cmdCheckSpelling

أولاً عرف متغيير من النمط Application ضمن حدث ضغط الزر، مع العلم بأن هذا النمط لن يكون موجوداً إلا بعد إضافة المرجع المشار إليه سابقاً.

Dim wordDic as Application

ثم أنشئ Object جديد من النمط Application يشير إليه المتغيير السابق بتعليمة set

Set wordDic = new Application

أصبح الآن هذا المتغير يحمل كافة خصائص وطرائق النمط Application والذي هو Microsoft Word. ومن بينها طريقة CheckSpelling و CheckGrammer، حيث الأولى تفحص صحة الكتابة للكلمة الواحدة والثانية تفحص صحة كتابة الجملة قواعدياً.

wordDic.CheckSpelling(word)

بفرض المتغير word من نمط String يحمل الكلمة المطلوب فحصها.

مبرجي Word VBA يعرفون ما يسمى بـ ActiveDocument يعادله في VB تعريف متغير من النمط Document، يمكن من خلاله الوصول إلى الأخطاء كافة الموجودة في المستند (الكتابية والقواعدية) من خلال الطريقتين سابقتي الذكر. أما إذا أردت أن تفحص صحة كتابة كلمة معينة ليست موجودة ضمن مستند فيجب استعمال Application ويعادله في VB ما سبق ذكره، حيث تستطيع من خلاله تمرير الكلمة المطلوب فحصها كمعامل "Argument".

نتابع في المشروع؛ نفترض وجود function بالاسم endOfWord يعيد رقم من نمط Integer يدل على نهاية الكلمة، حيث يأخذ معاملين هما النص الذي سيتم البحث فيه، ورقم يدل على بداية الكملة. ثم نضيف الشيفرة التالية التي تحدد كل كلمة ضمن النص وتفحص صحة كتابتها، وفي حال الكتابة الخاطئة تغيير لونها إلى الأحمر.

start = 1
Do Until start > Len(rtbText.Text)
    last = endOfWord(rtbText.Text, start)
    length = last - start
    word = Mid(rtbText.Text, start, length)
    If Not wordDic.CheckSpelling(word) Then
        rtbText.SelStart = start - 1
        rtbText.SelLength = length
        rtbText.SelColor = vbRed
    End If
    start = last + 1
    DoEvents
Loop

حيث نحدد أولاً شرط انتهاء الحلقة وهو تجاوز قيمة المتغير start لطول النص. ثم نحدد رقم موضع نهاية الكلمة بمعونة التابع endOfWord، ثم طول الكلمة. وبعد اقتطاع الكلمة نفحص صحتها، حيث يعيد التابع CheckSpelling قيمة true في حال كانت الكلمة صحيحة. وfalse في الحالة المعاكسة. وكما هو واضح عندما تكون الكلمة خطأ نغير لون هذه الكلمة إلى أحمر. ثم نضع في start قيمة last مضافاً إليها 1 حتى نبدأ العد في الحلقة التالية بعد بمحرف من الكلمة السابقة.

أما بالنسبة للشيفرة الخاصة بالـ function endOfWord فهي:

Private Function endOfWord(ByRef s As String, start As Integer) As Integer
Dim smallest As Integer, smallestAux As Integer
If start < Len(s) Then
    smallest = InStr(start, s, " ", vbTextCompare)
    For n = 33 To 125
        If n = 39 Then n = 40
        smallestAux = InStr(start, s, Chr(n), vbTextCompare)
        If (smallest = 0 Or smallest > smallestAux) And smallestAux > 0 Then smallest = smallestAux
        If n = 64 Then
            n = 91
        ElseIf n = 96 Then
            n = 123
        End If
    Next
    smallestAux = InStr(start, s, Chr(13), vbTextCompare) + 1
    If (smallest = 0 Or smallest > smallestAux) And smallestAux > 1 Then smallest = smallestAux
    If smallest = 0 Then smallest = Len(s) + 1
End If
endOfWord = smallest
End Function

حيث يقوم هذا التابع بالبحث عن أول مسافة أو أحد أنواع الفواصل بين الكلمات ابتداءً من نقطة البداية start، ثم إعادة رقم موضعها كما سبق وذكرنا.

وها هنا أضع المثال السابق ضمن الملف المرفق لتسهيل عملية المراجعة والتجربة.

أتمنى أن أكون قد قدمت الجديد والمفيد.

Spelling_Checker.zip

هذا الموضوع مغلق.

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