nssj قام بنشر بالامس في 13:26 قام بنشر بالامس في 13:26 الإخوة الكرام .. هل يمكن إنشاء كود لإدراج نص مختصر خلال النص ؟ في الملف المرفق ثلاثة أزرار [insert1 // insert2 // insert3] والمطلوب عند استخدام الزر الأول (1insert)، الذهاب لموضع المؤشر وإضافة سطر جديد ثم (1= ) : رقم (1) يليه مباشرة بدون مسافة (=) ثم مسافة ثم بقية النص - وعند استخدام الزر الثاني نفس الشيء ولكن الرقم هنا (2= ) - وكذلك الحال في الزر الثالث نفس الإجراء والرقم (3= ) وكمثال على ذلك، هذه صورة توضح النص الأصلي والنص المطلوب بعد استخدام الزرين الأول والثاني: Assaker.accdb
Foksh قام بنشر بالامس في 15:22 قام بنشر بالامس في 15:22 من باب التوضيح إن كنت قد فهمت المطلوب بشكل صحيح .. هل الصورة أدناه تطبق للمطلوب ؟؟؟ 1
nssj قام بنشر بالامس في 15:37 الكاتب قام بنشر بالامس في 15:37 تمام أخي الكريم .. هذه هي النتيجة المطلوبة
تمت الإجابة Foksh قام بنشر بالامس في 16:06 تمت الإجابة قام بنشر بالامس في 16:06 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 1
nssj قام بنشر منذ 22 ساعات الكاتب قام بنشر منذ 22 ساعات (معدل) تم المطلوب أخي الكريم .. جزاك الله خيرا وأحسن إليك كنت أحاول استيعاب الكود الذي تفضلت به لعلي أستخدمه أو جزءا منه في مهمات أخرى .. كما هي عادتي 😁 وأظنني استوعبت عمل الكود، لكن عندي بعض الاستفسارات لعلك تتكرم بتوضيحها - cursorPosition = Me.NASSbox.selStart هل هذه تعني: اجعل هذا المتغير = موقع المؤشر ؟ - beforeText = Left(currentText, cursorPosition) هل هذه تعني: هذا المتغير = كل ما هو قبل المؤشر - afterText = Mid(currentText, cursorPosition + 1) هل هذه تعني: هذا المتغير = كل ما بعد المؤشر - ما وظيفة آخر سطرين: منذ ساعه, Foksh said: ctl.selStart = cursorPosition + Len(insertText) ctl.SelLength = 0 تم تعديل منذ 22 ساعات بواسطه nssj 1
Foksh قام بنشر منذ 22 ساعات قام بنشر منذ 22 ساعات 5 دقائق مضت, nssj said: وأظنني استوعبت عمل الكود، لكن عندي بعض الاستفسارات لعلك تتكرم بتوضيحها ههههه ، ولا يهمك أخي .. خليني أوضح لك الفكرة بإجابات على اسئلتك .. 6 دقائق مضت, nssj said: هل هذه تعني: اجعل هذا المتغير = موقع المؤشر ؟ نعم بالضبط حيث أن SelStart هو رقم يمثل موقع بداية المؤشر داخل النص ، ويبدأ العد من 0 ( يعني أول حرف في النص موقعه = 0 ) 6 دقائق مضت, nssj said: هل هذه تعني: هذا المتغير = كل ما هو قبل المؤشر نعم بالضبط ، اجعل المتغير beforeText يحتوي على كل النص الذي يسبق موقع المؤشر 7 دقائق مضت, nssj said: هل هذه تعني: هذا المتغير = كل ما بعد المؤشر كلام سليم بالضبط ، اجعل المتغير afterText يحتوي على كل النص الذي يأتي بعد المؤشر 7 دقائق مضت, nssj said: - ما وظيفة آخر سطرين: منذ ساعه, Foksh said: السطر الأول يعيد المؤشر إلى ما بعد النص الذي تم إدراجه السطر الثاني يجعل تحديد النص = 0 . أي عند تنفيذ الإضافة النصية من الزر فإنه سيتم نقل التركيز الى مربع النص وبالتالي سيتم تحديد كامل النص ، ونحن لا نريد هذا طبعاً ، وبالتالي المهمة المطلوبة هي فقط أن يتم وضع المؤشر في المكان الجديد ( الذي تم تحديده قبل الإضافة طبعاً ) بدون تظليل النص . 1
Foksh قام بنشر منذ 22 ساعات قام بنشر منذ 22 ساعات 2 دقائق مضت, nssj said: شكرا على التوضيح أخي الكريم العفو أخي الكريم
nssj قام بنشر منذ 4 ساعات الكاتب قام بنشر منذ 4 ساعات أخي الكريم .. لكوني أحب التجارب والاستفادة من الأكواد التي يتفضل بها الأفاضل أمثالكم، فباستخدام بعض الأكواد مع الكود الذي تفضلت به استطعت الوصول للمطلوب بطريقة أخرى، قد أستخدمها إذا كان المطلوب إدراج رمز معين، وهو هذا الكود: Me.NASS.SetFocus Me.NASS.SelStart = cursorPosition Call SendKeys("^{ENTER}", True) Call SendKeys("= ", True) لكني لاحظت أنه مفتاح (NumLock) يتأثر عند استخدامه، بحيث أن الكود يعكس تفعيله، فإذا كان شغال فبعد الكود لا يشتغل، وإذا استخدمت الكود مرة أخرى يتفعل !! فهل هذا يعني أن هذا الكود له سلبيات ؟؟
Foksh قام بنشر منذ 4 ساعات قام بنشر منذ 4 ساعات 7 دقائق مضت, nssj said: فهل هذا يعني أن هذا الكود له سلبيات ؟؟ بالضبط ، أخي الكريم .. الأمر SendKeys له تأثير على مفتاح الـ NumLock . ولكن هناك دوال يمكن ان تتفقد حالته وتعيد تشغيله عندما تكون حالته = Off يمكن استخدام التعبير & vbCrLf & لإضافة سطر جديد . على سبيل المثال :- vbCrLf & "= " 1
nssj قام بنشر منذ 3 ساعات الكاتب قام بنشر منذ 3 ساعات 24 دقائق مضت, Foksh said: لإضافة سطر جديد . على سبيل المثال كيف يمكن استخدام هذا الأمر في الكود الذي أرفقتُه وما هو الأمر الذي يوضع قبله؟ 34 دقائق مضت, nssj said: Me.NASS.SetFocus Me.NASS.SelStart = cursorPosition vbCrLf & "= "
Foksh قام بنشر منذ 3 ساعات قام بنشر منذ 3 ساعات 4 دقائق مضت, nssj said: كيف يمكن استخدام هذا الأمر في الكود الذي أرفقتُه وما هو الأمر الذي يوضع قبله؟ لم أفهم ما ترمي إليه ..
nssj قام بنشر منذ 3 ساعات الكاتب قام بنشر منذ 3 ساعات أنا قد سبق إلى ظني أنه من الممكن استخدام التعبير الذي ذكرتَه (.. vbcr ) خلال الكود البدائي الذي وضعتُه أنا بدل استخدام جملة Call SendKeys("= ", True) لكن .. يبدو أني أخطأت الفهم ، وأنك كنت تعني أخي الكريم أنه إذا أردنا تجنب سلبية استخدام أمر (SendKeys) فعلينا أن نستخدم دالة أخرى وطريقة أخرى مختلفة، وهي الطريقة التي استخدمتَها أنت، بتحديد ما قبل وما بعد المؤشر والإضافة بينهما وهذا يجيب على التساؤل الذي دار في ذهني عندما رأيت الكود الذي تفضلت به: لماذا لم تستخدم أمر (SendKeys) الجواب: لهذه السلبية 1
الردود الموصى بها
انشئ حساب جديد او قم بتسجيل دخولك لتتمكن من اضافه تعليق جديد
يجب ان تكون عضوا لدينا لتتمكن من التعليق
انشئ حساب جديد
سجل حسابك الجديد لدينا في الموقع بمنتهي السهوله .
سجل حساب جديدتسجيل دخول
هل تمتلك حساب بالفعل ؟ سجل دخولك من هنا.
سجل دخولك الان