PDA

View Full Version : سؤال در مورد Ctrl + V



Hassan2500
پنج شنبه 16 شهریور 1391, 19:25 عصر
کد زیر را در یک ماژول کد قرار بدهید: Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Const sValidChrs$ = "Çȁ̍ÏåÉæÒŽÍØííƘáãäÓÚÝÕ ÞÑÔÊËÎÐÖÙÛ"
Public Function SepValidChrs(sText$) As String
Dim i&, sTmpHold$
For i = 1 To Len(sText$)
sChr$ = Mid(sText$, i, 1)
If InStr(1, sValidChrs$, sChr$) > 0 Then
sTmpHold$ = sTmpHold$ & sChr$
End If
Next 'i
SepValidChrs = sTmpHold$
End Function


و کد زیر را در TextBox مورد نظر (برای مثال کد زیر را در Text1 قرار داده ایم) Private Sub Text1_KeyPress(KeyAscii As Integer)
If GetAsyncKeyState(vbKeyControl) 0 And GetAsyncKeyState(vbKeyV) 0 Then
KeyAscii = 0
Text1 = SepValidChrs(Text1 & Clipboard.GetText)
End If
End Sub



آقای واژدی اگه میشه این مواردی رو که میخوام روی کد بالا که در پیام خصوصی برام گذاشتید انجام بدید ممنون میشم

هنگام Ctrl + V کردن:
1- از حرف یا حروف دوبار در تکست1 انداخته میشه میخوام فقط یه بار انداخته بشه
2- متن قبلی تکست1 پاک میشه میخوام که اصلاً متن قبلی دست نخوره
3- فوکوس به اوّل تکست1 میپره یا در بین حروف بحرکت درمیآد میخوام فوکوس همون جائیکه هست باقی بمونه و اصلاً از جاش تکون نخوره
4- حرف یا حروف دیر در تکست1 ظاهر میشه

محسن واژدی
پنج شنبه 16 شهریور 1391, 20:53 عصر
سلام علیکم
برای این موارد بایستی از subclassing استفاده کنیم، ضمیمه زیر را بررسی کنید

برای استفاده، کدهای موجود در ماژول همراه سورس را در ماژول کدی در برنامه کپی کنید
سپس نام Text-Box را در تابع TextBoxClipboardHook قرار دهید، به عنوان مثال: Private Sub Form_Load()
TextBoxClipboardHook Text1
End Sub
این تابع پارامتر دومی هم دارد که در صورت True کردن منوی راست کلیک Text-Box غیرفعال میشود، یعنی: Private Sub Form_Load()
TextBoxClipboardHook Text1, True
End Sub


البته در هوک کردن باید دقت داشته باشیم که برای بستن برنامه حتما بایستی دستور Unload را اجرا و یا بر روی دکمه Close فرم کنیم، اگر برنامه با End یا فشردن کلید End (منوی Run\End) بسته شود در اغلب اوقات وی بی کرش میکند، پس همیشه پیش از تست، برنامه را ذخیره کنید


1- از حرف یا حروف دوبار در تکست1 انداخته میشه میخوام فقط یه بار انداخته بشه در صورت امکان بیشتر توضیح دهید

موفق باشید