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

متى اعرف انه تم الأن اللصق على RitchTextbox

مغلق
بدأه فواز الشمري في 27 أغسطس 2005 · 19 رد · 1,292 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لدي برنامج :

وأود معالجة النص قبل لصقة على RitchTextbox كيف يمكن ذلك.

:blink:

#2

ياريت توضحلنا اكثر

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#3

لنفرض انك فمت بنسخ نص من برنامج الورد مثلاً وكان هذا النص هوا : Toolbar is a free

ثم ذهبت إلى برنامجي وقمت بعمل لصق .

أنا في هذه الحالة لدي قواعد معينة مثلا إذا وجد كلمة Free يقوم بمسحها ثم يعمل بعد ذلك لصق طبيعي .

يعني أني سوف أقوم بفحص النص في الذاكرة قبل إضافته لبرنامجي لكن كيف ذلك. :rolleyes:

#4

حط النص الموجود فى متغير نصى واجرى عليه التعديلات وبعدين لصقه فىRichTextBox

Dim Word As String
word=clipoard.getdataobject(data.format.text)
'do enything for word
.
.
.
RichTextBox.selectedtext=word

والله اعلم

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#5

شكرا لك SOLO.NET ولكن :

اين اضع هذا السطر :

يعني ماهوا الحدث الذي سينفذ عندما يتم اللصق مشكلتي اني اريد معالجة البيانات فقط عندما يتم لصقها . ارجوا ان يكون القصد واضح . :wacko:

#6

^

^

^

سؤال وجيه !!

أنا بانتظار الإجابة كذلك..

يمكنك البحث في قائمة الـEvents فقد تجده هناك..

#7

ضعها فى الاجراء التى تقوم فيه باللصق

يعنى هذا الكود هو بديل كود اللصقRichtextbox.past

تم تعديل هذه المشاركة بواسطة SOLO.NET في 28 أغسطس 2005 في 16:50

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#8
اقتباس
word=clipoard.getdataobject(data.format.text)

هناك خطاء فى الكود والصحيح

Clipboard.getdataobject.getdata(dataformats.text)

كما يمكنك التعامل مع النص الموجود فى الحافظة مباشرة عن طريق دوال النصوص

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#9
SOLO.NET كتب:
ضعها فى الاجراء التى تقوم فيه باللصق

يعنى هذا الكود هو بديل كود اللصقRichtextbox.past

شكرا لك اخي SOLO.NET :

لم افهم القصد يعني هل هناك حدث خاص بـ Richtextbox.past .هل قد جربته بمجرد الصق يعمل الحدث .

وياريت توضح كيف التعامل مع الحافضة بدوال النصوص .

وانا سوف احاول البحث ايضا . :wacko:

#10

انا حل للمشكلة و هيا ان اول حاجة نشوف هوا النسخ خيتم امتى فى صندوق النص

فى حالة من اتنين

الأولى لو المستخدم ضغط ctrl+v

الحاجة التانية لو انت عامل قائمة و فيها زرار بينسخ

يبقى الحل انك تكتب دالة تقوم بمعالجة النصوص تستدعيها فى الحالتين دول ( فى الحدث keydown تختبر لو كان المستخدم ضغط ctrl+c و لو كان كدا يبقى تستدعى الداله دى او فى الحدث بتاع زر القائمة بتاعتك)

و الداله دى بقى يا باشا فيها تاخد النص اللى فى clipboard و تعالجة براحتك و بعدين ترجع تحطه فيها و تستعمل rtfbox.paste بعد كدا عشان ينسخلك النص فى المكان اللى انت محدده او مش عارف زى ما solo بيقول بس انا مش عارف إزاى تعالج الداتا اللى فى clipboard مباشرة بالطريقة اللى هوا هيقولها

أحمد صلاح

#11

ضع العبارة البرمجية الخاصة بعملية ازالة او تغيير النص الملصوق في حدث richtextbox.textchange بحيث تأخذ النص الملصوق وتضعه في متغير وتحري غليه التعديلات اللازمة وبعدين ترجع تلصقه مرة اخرى بدل النص الموجود ...

#12

اخي dev_a_salah : هذا حل وهوا ان افحص هل قام المستحدم بالضغط على زر Ctrl + v يعني الأن اكيد انه في عملية لصق . كن هذا الحل اريد اكثر دقة منه .

شباب الفكرة هي عندما كيف اعرف ان المستخدم الأن عمل لصق على التكست .

شكرا mbmh ولكن في الحدث الذي ذكرته كيف يتم التعرف على النص الملصوق حاليا هذا شي الشي الثاني انه عند كل تعديل او تغير في الأداه سيتم فحص الكود الخاص باللصق وهذا يخالف فكرة ان يكون الكود به جوة عالية (بطئ) أي انه يجب ان ينفذ فقط عند اللصق ولا يتم الفحص دائما .

#13

أخي فواز أعتقد ان الحل الذي قدمه الاخ dev_a_salah يحل مشكلتك

ففي الحالة الاولى اذا كان لديك عنصر في قائمة يقوم بعملية اللصق ( و تكون الخاصية Shortcut key=Ctrl+v) تضع بداخله كود القراءة من ال Clipboard و تحفظه في متغير نصي و تجري عليه العمليات التي تريدها او حتي تتجاهل امر اللصق نهائيا

اما اذا لم يكن لديك قائمة فيمكنك اختبار ضغط المستخد للمفتاحين Ctrl+V و تضع الكود و تقوم بمعالجة النص

و اذا لم يكن في ذلك الاجابة على سؤالك فارجو توضيح وجهة نظرك

و فوق كل ذي علم عليم

#14

مش عارف دقة إيه اللى انت تقصدها ممكن توضح لنا لو سمحت

انت معندكش إلا حالتين هيخصل فيهم نسخ

ctrl+v

او زر انت عامله و بالنسبة لل ctrl+v

لو اصدته فى ال keydown event مش هينسخلك حاجة فى ال rtf مش هيتم النسخ إلا بعد لما تعمل المعالجة بتاعتك اوك

و زى ما قال C# Developer وضحلنا إيه اللى انت عاوز او لو وصلت لحاجة افضل قوانا عليها

أحمد صلاح

#15

شوفو هي الفكرة اني اريد ان اعمل محرر لغة واود ان اقوم بمعالجة الأستطر على سطر سطر

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

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

وفي هذه الحالة انا اريد عند عمل لصق ان اخذ البيانات قبل لصقها فعلا ومعالجة كافة البيانات في الحافضة ومن ثم بعد ذلك اقوم بوضعها في البرنامج .

ياريت حد يكون فهم :wacko:

#16

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

اخي الكريم لقد قمت بعمل ما تريده على textbox ونفس هذه الاجراء يمكن عمله على richtextbox

وذلك عن طريق عمل هذا الكود حيث اذا قمت بعمل past او ctrl+v يقوم بتنفيذه

وذلك عن طريق عمل class خاص لتستخدمه في برنامجك وهذا هو الكود :

Public Class MyrichTextBox
	Inherits RichTextBox
        Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        Const WM_PASTE As Int32 = &H302
       ' Const WM_Copy As Int32 = &H301
       ' Const Wm_Cut As Int32 = &H300
       ' Const Wm_Clear As Int32 = &H303
       ' Const Wm_UnDo As Int32 = &H304 
       Dim st As String = " "

        If m.Msg <> WM_PASTE Then
            MyBase.WndProc(m)
        Else
             'فحصها اذا كانت فارغه ام لا
            If Clipboard.GetDataObject().GetDataPresent(DataFormats.Text) = True Then
                    st = Clipboard.GetText.ToString
                   ' الان قم بعمل اللازم من التغير والفحص 
                   ' بعد ذلك ضع المتغير بعد اجراء التعديلات اللازمه في 
                   ' clipboard
                   Clipboard.SetText(st)
                   MyBase.WndProc(m)
            End If
        End If
    End Sub
End Class

ارجو ان يكون هذا هو طلبك

مع تمنياتي لك بالتوفيق

تم تعديل هذه المشاركة بواسطة jbsa في 6 سبتمبر 2005 في 10:31

#17

اخي jbsa الف مش الف ترليون شكر .

بدون ما اجرب لكن هذه هي الفكره التي كنت ابحث عنها وهي معالجة الرسائل إلى النافذة وبتفيدني كثير في عملي شكرا لك اخي الكريم وإن شاء الله سوف اقوم بالتجريب والتعقيب على ذلك

#18

على مبدأ المثل جت الحزينه تفرح ما لقت لها مطرح :wacko:

الكود شغال على textbox بس RichTextBox للأسف لم يستقبل اي رسالة ما ادري ايش المشكلة

اخي العزيز هل جربت الكود على RichTextBox وشتغل معاك .

#19

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

اقتباس
على مبدأ المثل جت الحزينه تفرح ما لقت لها مطرح

اخي فواز لا تحزن فلك مطرح ، واليك الكود مجرب على richtextbox

Imports System.Windows.Forms
Public Class MyrichTextBox
    Inherits RichTextBox
   
    Private Sub me_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
        Dim d As DataFormats.Format
        If e.KeyCode = Keys.V And e.Control = True Then
            d = DataFormats.GetFormat(DataFormats.Text)
            Dim st As String
            st = d.ToString
            If st <> "" Then
                ' عملية الفحص والتغيير
                st = "jbsa"
                Clipboard.SetText(st, TextDataFormat.Text)
            End If
            DidHandle = True
        Else
            DidHandle = False
        End If

    End Sub
    Dim DidHandle As Boolean = False
    Private Sub me_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
        If DidHandle Then
            e.Handled = True
            DidHandle = False
        End If
    End Sub
End Class

جرب واخبرني بالنتيجه

#20

شكرا لك اخي الكريم بس ما فهمت السطر

DataFormats.GetFormat(DataFormats.Text)

هل ياخذ التنسيق من الذاكرة ام كيف .

سوف اجرب ذلك . :rolleyes:

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

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