اذهب الي المحتوي
أوفيسنا

الردود الموصى بها

قام بنشر

الإخوة الكرام .. هل يمكن إنشاء كود لإدراج نص مختصر خلال النص ؟

في الملف المرفق ثلاثة أزرار [insert1 // insert2 // insert3]

والمطلوب عند استخدام الزر الأول (1insert)، الذهاب لموضع المؤشر وإضافة سطر جديد ثم (1= ) : رقم (1) يليه مباشرة بدون مسافة (=) ثم مسافة ثم بقية النص

- وعند استخدام الزر الثاني نفس الشيء ولكن الرقم هنا (2= )

- وكذلك الحال في الزر الثالث نفس الإجراء والرقم (3= )

وكمثال على ذلك، هذه صورة توضح النص الأصلي والنص المطلوب بعد استخدام الزرين الأول والثاني:

image.png.bb582ea8b11dfafe77607c1dc888918d.png

Assaker.accdb

قام بنشر

من باب التوضيح إن كنت قد فهمت المطلوب بشكل صحيح .. هل الصورة أدناه تطبق للمطلوب ؟؟؟

Nssj.gif.ed219237592cc0a05be06404b0674fd2.gif

  • Like 1
قام بنشر

تمام أخي الكريم .. هذه هي النتيجة المطلوبة

  • تمت الإجابة
قام بنشر
29 دقائق مضت, nssj said:

تمام أخي الكريم .. هذه هي النتيجة المطلوبة

تمام اخي الكريم ..

بداية وحتى تتوضح فكرتي بالتنفيذ ، سنعتمد على حدث عند النقر لمربع النص NASSbox . بحيث نتعرف على موقع المؤشر من خلال ما يلي :-

  • في مديول ، نقوم بحجز المتغير في بداية المديول مع الدالة الرئيسية :-
    Public cursorPosition As Long
    
    Public Sub InsertAtRememberedCursor(ByVal i As String)
        Dim ctl As Control
        Set ctl = Forms!Assaker!NASSbox
    
        ctl.SetFocus
    
        Dim currentText As String
        currentText = ctl.Text
    
        Dim beforeText As String
        Dim afterText As String
    
        Dim insertText As String
        insertText = vbCrLf & i & "= "
    
        beforeText = Left(currentText, cursorPosition)
        afterText = Mid(currentText, cursorPosition + 1)
    
        ctl.Text = beforeText & insertText & afterText
    
        ctl.selStart = cursorPosition + Len(insertText)
        ctl.SelLength = 0
    End Sub

     

  • الآن في النموذج وفي حدث عند النقر على مربع النص المستهدف :-
    Private Sub NASSbox_Click()
        DoEvents
        cursorPosition = Me.NASSbox.selStart
    End Sub
  • ثم في حدث عند النقر للأزرار ، كل زر ليقوم بإضافته الخاصة به داخل النص ، من خلال الإستدعاء التالي لها :-
    Private Sub insert1_Click()
        Call InsertAtRememberedCursor("1")
    End Sub
    
    Private Sub insert2_Click()
        Call InsertAtRememberedCursor("2")
    End Sub
    
    Private Sub insert3_Click()
        Call InsertAtRememberedCursor("3")
    End Sub

وبالتالي ، تكون النهاية كما رأيت في الصورة السابقة .

المرفق :-

Assaker.zip

  • Thanks 1
  • Foksh changed the title to إدراج نص داخل نص بموضع معين من خلال النقر على زر
قام بنشر (معدل)

تم المطلوب أخي الكريم .. جزاك الله خيرا وأحسن إليك

كنت أحاول استيعاب الكود الذي تفضلت به لعلي أستخدمه أو جزءا منه في مهمات أخرى .. كما هي عادتي 😁

وأظنني استوعبت عمل الكود، لكن عندي بعض الاستفسارات لعلك تتكرم بتوضيحها

cursorPosition = Me.NASSbox.selStart

هل هذه تعني: اجعل هذا المتغير = موقع المؤشر ؟

 

- beforeText = Left(currentText, cursorPosition)

هل هذه تعني: هذا المتغير = كل ما هو قبل المؤشر

  -  afterText = Mid(currentText, cursorPosition + 1)

هل هذه تعني: هذا المتغير = كل ما بعد المؤشر

 - ما وظيفة آخر سطرين:

منذ ساعه, Foksh said:
    ctl.selStart = cursorPosition + Len(insertText)
    ctl.SelLength = 0

 

تم تعديل بواسطه nssj
  • Like 1
قام بنشر
5 دقائق مضت, nssj said:

وأظنني استوعبت عمل الكود، لكن عندي بعض الاستفسارات لعلك تتكرم بتوضيحها

 

ههههه ، ولا يهمك أخي .. خليني أوضح لك الفكرة بإجابات على اسئلتك ..

6 دقائق مضت, nssj said:

هل هذه تعني: اجعل هذا المتغير = موقع المؤشر ؟

 

نعم بالضبط حيث أن SelStart هو رقم يمثل موقع بداية المؤشر داخل النص ، ويبدأ العد من 0 ( يعني أول حرف في النص موقعه = 0 )

 

6 دقائق مضت, nssj said:

هل هذه تعني: هذا المتغير = كل ما هو قبل المؤشر

 

نعم بالضبط ، اجعل المتغير beforeText يحتوي على كل النص الذي يسبق موقع المؤشر

 

7 دقائق مضت, nssj said:

هل هذه تعني: هذا المتغير = كل ما بعد المؤشر

 

كلام سليم بالضبط ، اجعل المتغير afterText يحتوي على كل النص الذي يأتي بعد المؤشر

 

7 دقائق مضت, nssj said:

 - ما وظيفة آخر سطرين:

منذ ساعه, Foksh said:

السطر الأول يعيد المؤشر إلى ما بعد النص الذي تم إدراجه

السطر الثاني يجعل تحديد النص = 0 .

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

  • Thanks 1
قام بنشر
2 دقائق مضت, nssj said:

شكرا على التوضيح أخي الكريم

العفو أخي الكريم :fff:

قام بنشر

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

 

Me.NASS.SetFocus
Me.NASS.SelStart = cursorPosition
Call SendKeys("^{ENTER}", True)
Call SendKeys("= ", True)

لكني لاحظت أنه مفتاح (NumLock) يتأثر عند استخدامه، بحيث أن الكود يعكس تفعيله، فإذا كان شغال فبعد الكود لا يشتغل، وإذا استخدمت الكود مرة أخرى يتفعل !!

فهل هذا يعني أن هذا الكود له سلبيات ؟؟

قام بنشر
7 دقائق مضت, nssj said:

فهل هذا يعني أن هذا الكود له سلبيات ؟؟

بالضبط ، أخي الكريم ..

الأمر SendKeys له تأثير على مفتاح الـ NumLock . ولكن هناك دوال يمكن ان تتفقد حالته وتعيد تشغيله عندما تكون حالته = Off

 

يمكن استخدام التعبير 

& vbCrLf &

لإضافة سطر جديد . على سبيل المثال :-

vbCrLf & "= "

 

  • Thanks 1
قام بنشر
24 دقائق مضت, Foksh said:

لإضافة سطر جديد . على سبيل المثال

كيف يمكن استخدام هذا الأمر في الكود الذي أرفقتُه وما هو الأمر الذي يوضع قبله؟

34 دقائق مضت, nssj said:
Me.NASS.SetFocus
Me.NASS.SelStart = cursorPosition
 vbCrLf & "= "

 

قام بنشر
4 دقائق مضت, nssj said:

كيف يمكن استخدام هذا الأمر في الكود الذي أرفقتُه وما هو الأمر الذي يوضع قبله؟

لم أفهم ما ترمي إليه ..

قام بنشر

أنا قد سبق إلى ظني أنه من الممكن استخدام التعبير الذي ذكرتَه (.. vbcr ) خلال الكود البدائي الذي وضعتُه أنا بدل استخدام جملة

Call SendKeys("= ", True)

لكن .. يبدو أني أخطأت الفهم ، وأنك كنت تعني أخي الكريم أنه إذا أردنا تجنب سلبية استخدام أمر (SendKeys) فعلينا أن نستخدم دالة أخرى وطريقة أخرى مختلفة، وهي الطريقة التي استخدمتَها أنت، بتحديد ما قبل وما بعد المؤشر والإضافة بينهما

وهذا يجيب على التساؤل الذي دار في ذهني عندما رأيت الكود الذي تفضلت به: لماذا لم تستخدم أمر (SendKeys)

الجواب: لهذه السلبية 

  • Like 1

انشئ حساب جديد او قم بتسجيل دخولك لتتمكن من اضافه تعليق جديد

يجب ان تكون عضوا لدينا لتتمكن من التعليق

انشئ حساب جديد

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

سجل حساب جديد

تسجيل دخول

هل تمتلك حساب بالفعل ؟ سجل دخولك من هنا.

سجل دخولك الان
  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information