ورود

View Full Version : سوال: جلوگیری از Paste حروف انگلیسی و بعضی علامتها داخل Text



hr0694
دوشنبه 17 مرداد 1390, 23:40 عصر
سلام
من کاری کرده ام که حروف انگلیسی و بعضی علامتها مثل(+ـ×÷^٪|":) در Text نوشته نشوند و فقط فارسی نوشته شود اما حروف انگلیسی و این علامتها داخل تکست Paste میشوند چکار کنم حتی Paste هم نشوند

shahabbasic
سه شنبه 18 مرداد 1390, 00:09 صبح
میتونی در رخداد Change تکس باکس بنویسی :
r=clipboard.gettext
if r <> "" then clipboard.clear

hr0694
سه شنبه 18 مرداد 1390, 09:47 صبح
دوست عزیز برنامه کار نمکند اگر میشه سورس اونو برام بزار

shahabbasic
سه شنبه 18 مرداد 1390, 11:10 صبح
چطور کار نمیکنه من تست کردم کار کردم این 3 خط برنامه که دیگه نمیخواد سورسشو بذارم چون دیگه چیزی از این ساده تر نیست بیا :
Private Sub Text1_Change()
r = Clipboard.GetText
f = Text1.Text
If f = r Then Text1.Text = ""
End Sub

hr0694
سه شنبه 18 مرداد 1390, 11:26 صبح
هر کاری میکنم برنامه کار نمیکند بمحض Paste کردن حروف انگلیسی برنامه این ارور را میدهد Run-time error "521": Canot open Clipboard

محسن واژدی
سه شنبه 18 مرداد 1390, 11:29 صبح
میتونی در رخداد Change تکس باکس بنویسی :
r=clipboard.gettext
if r <> "" then clipboard.clear

رویداد Changeپس از انکه تغییری در متن textbox ایجاد شد اتفاق می افتد پس قرار گیری دستورات فوق تاثیری در جلوگیری از ورود متن ایجاد نمیکند

hr0694
سه شنبه 18 مرداد 1390, 11:38 صبح
من میخوام فقط حروف انگلیسی Paste نشوند و بعضی علامتهاو در ثانی بمحض راست کلیک روی تکست گزینه Paste غیر فعال شده باشد نه ابتدا متنی نوشته شود بعد گزینه Paste غیر فعال شده باشد

محسن واژدی
سه شنبه 18 مرداد 1390, 11:55 صبح
بهتر است منوی سفارشی ایجاد کنید که در مواقع لزوم گزینه Paste و هرگزینه دیگر آن غیرفعال یا فعال شود
برای ایجاد منوی سفارشی ابتدا یک منو حاوی گزینه هایی مانند Copy/Paste ایجاد کنید سپس آنرا در رویداد MouseDown قرار دهید که به محض فشرده شدن کلیک راست منوی شما بجای منوی استاندارد ظاهر شود

موفق باشید

shahabbasic
سه شنبه 18 مرداد 1390, 13:13 عصر
خب وقتی چیزی paste بشه رخداد change اتفاق می افته همین کدی که من گفتم درسته شما بجای text1 اسم تکس باکستو بذار .... با این کد نه با کنترل وی پیست میشه نه با رایت کلیک

محسن واژدی
سه شنبه 18 مرداد 1390, 14:32 عصر
هر کاری میکنم برنامه کار نمیکند بمحض Paste کردن حروف انگلیسی برنامه این ارور را میدهد Run-time error "521": Canot open Clipboard

وقتی رویداد Change اتفاق می افتد هنوز Clipboard گشوده شده توسط Paste بسته نشده است به همین دلیل با این خطا مواجه میشوید
برای رفع این خطا بایستی clipboard را توسط CloseClipboard ببندید، به صورت زیر:

Private Declare Function CloseClipboard Lib "user32" () As Long

Private Sub Text1_Change()
Dim r$
CloseClipboard
r = Clipboard.GetText
f = Text1.Text
If f = r Then Text1.Text = ""
End Sub


البته همانگونه که قبلا" نیز عرض شد این روش جوابگوی مشکلتان نیست، البته میتوانید تابعی بنویسید که پس از ایجاد تغییر در TextBox بررسی میکند محتویات textbox را کاراکتر به کاراکتر بررسی میکند که اگر کاراکتر مورد بررسی در لیست کاراکترهای مجاز وجود نداشته باشد از textbox حذف شود

موفق باشید

setroyd
سه شنبه 18 مرداد 1390, 14:57 عصر
اخه این کدا کاری داره که کسی نمیتونه کمک کنه !!!!

بیا اینم کد اگه یکم خودت فک میکردی میتونستی بنویسی


Private Sub text1_KeyDown(KeyCode As Integer, Shift As Integer)
If Shift = vbCtrlMask And (Chr(KeyCode) = "v" Or Chr(KeyCode) = "V") Then
text1.Locked = True
Else
text1.Locked = False
End If
End Sub


Private Sub text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbRightButton Then
text1.Locked = True
Else
text1.Locked = False
End If
End Sub

setroyd
سه شنبه 18 مرداد 1390, 14:58 عصر
با API هم میشد ولی این را دست تره

محسن واژدی
سه شنبه 18 مرداد 1390, 15:36 عصر
اخه این کدا کاری داره که کسی نمیتونه کمک کنه !!!!
.
.
.

!!!!!!!





Private Sub text1_KeyDown(KeyCode As Integer, Shift As Integer)
If Shift = vbCtrlMask And (Chr(KeyCode) = "v" Or Chr(KeyCode) = "V") Then
text1.Locked = True
Else
text1.Locked = False
End If
End Sub


Private Sub text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbRightButton Then
text1.Locked = True
Else
text1.Locked = False
End If
End Sub

بله، توسط قسمتی از این کد میتوان میانبر های مختلف را غیرفعال کرد اما rightclick همچنان فعال است

موفق باشید

hr0694
سه شنبه 18 مرداد 1390, 15:48 عصر
دوست عزیز خواهش میکنم اگر میشود سورس این کدی را که نوشتی را برام بزار چون من این کد را نوشتم باز کار نکرد بعد یک سؤال دارم هنگامیکه سورس این برنامه را قرار دادی حروفی که میخواهم داخل تکست Paste نشوند را باید کجای این کد بنویسم منظورم حروف انگلیسی و بعضی علامتها است (فکر کنم اگر سورس باشد بهتر یاد میگیرم چون من در برنامه نویسی مبتدی هستم)

محسن واژدی
سه شنبه 18 مرداد 1390, 16:10 عصر
دوست عزیز خواهش میکنم اگر میشود سورس این کدی را که نوشتی را برام بزار چون من این کد را نوشتم باز کار نکرد بعد یک سؤال دارم هنگامیکه سورس این برنامه را قرار دادی حروفی که میخواهم داخل تکست Paste نشوند را باید کجای این کد بنویسم منظورم حروف انگلیسی و بعضی علامتها است (فکر کنم اگر سورس باشد بهتر یاد میگیرم چون من در برنامه نویسی مبتدی هستم)

نمیدونم کدام پست را منظور تان است اما کد زیر کاراکترهای مورد نظر را که میتواند حروف انگلیسی باشد از textbox حذف میکند:

Public Sub DelExtraChrs(tTextBox As TextBox, InvalidChrsGroup$)
Dim i&, text$
text$ = tTextBox

For i = 1 To Len(InvalidChrsGroup$)
text$ = Replace(text$, Mid(InvalidChrsGroup$, i, 1), Empty, , , vbTextCompare)
Next i
tTextBox = text$
End Sub


نمونه:
Private Sub Command2_Click()
DelExtraChrs Text1, "abcde"
End Sub
موفق باشید

محسن واژدی
سه شنبه 18 مرداد 1390, 17:30 عصر
سورس زیر میتواند جوابگوی مشکلتان باشد
در این سورس بصورت پیش فرض از paste شدن حروف انگلیسی جلوگیری میشود، کلمات جدید را به ثابت ExtraChrs$ (موجود در ماژول) اضافه کنید

توجه داشته باشین بدلیل هوک شدن TextBox بجای فشار دادن دکمه Stop وی بی، برای بستن پنجره اجرا شده بر روی دکمه X (دکمه قرمز رنگ) پنجره کلیک کنین درغیر اینصورت ممکن هست وی بی ناگهانی خارج شود (بدلیل عدم اجرای unhook)

موفق باشید

hr0694
سه شنبه 18 مرداد 1390, 23:51 عصر
دستتان درست الآن برنامه بخوبی کار میکند و از شما جناب mohsenvj تشکر میکنم

setroyd
چهارشنبه 19 مرداد 1390, 03:47 صبح
دوست عزیز این کد رو خود microsoft گذاشته بود و من تو archive داشتم که گذاشتم برای شما هم past فعال ولی کار نمیکنه . خب منم همین کارو میکرد برنامم شما یه تست بکن بعدا بگو نمیشه ! من گفتم با api هم میشه ولی یکم سخت میشه همین کد رو منم داشتم ولی نذاشتم

setroyd
چهارشنبه 19 مرداد 1390, 03:52 صبح
تازه این کد زیاد خوب نیست. سرعت پایین به دلیل چک کردن ولی از این نظر که میشه تعیین کرد چه حروفی رو نشون نده خوبه ولی اگه کلا میخوای past کار نکنه کدی که گزاشتم بهتره چک کنید بعدا قضاوت کنید

محسن واژدی
چهارشنبه 19 مرداد 1390, 08:28 صبح
برای شما هم past فعال ولی کار نمیکنه . خب منم همین کارو میکرد برنامم شما یه تست بکن بعدا بگو نمیشه !
سلام علیکم
بله Paste فعال است اما کار میکند یعنی متن دریافتی به به textbox می افزاید، همچنین بنده قبل از تست کردن نظری نمیدهم


تازه این کد زیاد خوب نیست. سرعت پایین به دلیل چک کردن
این یک کد استاندارد است البته اگر منظورتان از سرعت پایین بکارگیری حلقه در آن است، چون این حلقه فقط به تعداد کاراکترهای بکارگرفته در آن فعال میشود و هم فقط در زمان Paste اجرا میشود اصولا" تاثیری در زمان برنامه نمیگذارد، اما اصولا" هوک کردن زیاد پیشنهاد نمیشود مگر آنکه کاربر مجبور به استفاده از آن باشد


ولی اگه کلا میخوای past کار نکنه کدی که گزاشتم بهتره چک کنید بعدا قضاوت کنید
بله چک کردم و بعدا" قضاوت کردم، همانگونه که قبلا" هم عرض شد بخشی برای غیرفعال نمودن میانبر مفید است اما قسمتی که مدنظر شماست یعنی از paste جلوگیری نمیکند

موفق باشید

vbhamed
چهارشنبه 19 مرداد 1390, 14:31 عصر
اخه این کدا کاری داره که کسی نمیتونه کمک کنه !!!!

بیا اینم کد اگه یکم خودت فک میکردی میتونستی بنویسی

Private Sub text1_KeyDown(KeyCode As Integer, Shift As Integer)
If Shift = vbCtrlMask And (Chr(KeyCode) = "v" Or Chr(KeyCode) = "V") Then
text1.Locked = True
Else
text1.Locked = False
End If
End Sub


Private Sub text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbRightButton Then
text1.Locked = True
Else
text1.Locked = False
End If
End Sub

سلام

با اجازه من كدتون رو يكم تكميل كردم، چون ويندوز هنوز كليد Shift+Insert رو هم از زمان داس به ارث مي بره

Private Sub text1_KeyDown(KeyCode As Integer, Shift As Integer)

If (Shift = vbCtrlMask And (Chr(KeyCode) = "v" Or Chr(KeyCode) = "V")) Or _
(Shift = vbShiftMask And KeyCode = 45) Then
Text1.Locked = True

Else
Text1.Locked = False

End If

End Sub

setroyd
چهارشنبه 19 مرداد 1390, 17:39 عصر
بله کاملتر شد مرسی .

سید حمید حق پرست
چهارشنبه 15 خرداد 1392, 00:58 صبح
سلام دوستان
یه سوال داشتم، چجوری میشه کلا گزینه paste رو غیرفعال کرد؟
با lock کردن تکست باکس فقط از نوشتن و cut جلوگیری میشه!

یا علی (ع)