ورود

View Full Version : سوال: جلوگیری از پیست شدن حروف



hr0694
جمعه 01 مهر 1390, 18:45 عصر
سلام

- این کد مربوط به جلوگیری از پیست شدن حروف انگلیسی و بعضی علائم در تکست1 است حالا من چکار کنم تکستهای 2 و 3 و 4 و 5 را هم شامل شود در صورتی که ماژول دیگری اضافه نکنم و این کد دستکاری شود

این کد در ماژول جداگانه باید نوشته شود
Declare Function CloseClipboard Lib "user32" () As Long

Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _
(ByVal lpPrevWndFunc As Long, _
ByVal hWnd As Long, _
ByVal Msg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long

Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" _
(ByVal hWnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Const ExtraChrs$ = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-=;'\,./×!@#$%^&*)(_+?ـ"":<>؟{}[],؛،~ـ|"""
Public Const GWL_WNDPROC = -4
Private Const WM_DESTROY As Long = &H2
Public Const WM_PASTE As Long = &H302
Public lpPrevWndProc As Long
Private lnghWnd As Long

Public Sub Hook1(hWnd As Long)
lnghWnd = hWnd
lpPrevWndProc = SetWindowLong(lnghWnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub

Public Sub UnHook()
Dim lngReturnValue As Long
lngReturnValue = SetWindowLong(lnghWnd, GWL_WNDPROC, lpPrevWndProc)
End Sub

Function WindowProc(ByVal hw As Long, _
ByVal uMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Dim clp_cnt$
Select Case uMsg
Case WM_PASTE
Call CloseClipboard
clp_cnt$ = Clipboard.GetText
Clipboard.Clear
Clipboard.SetText DelExtraChrs$(clp_cnt$, ExtraChrs$)
Case WM_DESTROY
UnHook
End Select

WindowProc = CallWindowProc(lpPrevWndProc, lnghWnd, uMsg, wParam, lParam)
End Function
Public Function DelExtraChrs$(tText$, InvalidChrsGroup$)

Dim i&

For i = 1 To Len(InvalidChrsGroup$)

tText$ = Replace(tText$, Mid(InvalidChrsGroup$, i, 1), Empty, , , vbTextCompare)

Next i

DelExtraChrs$ = tText$

End Function

و این کد در خود ماژول فرم نوشته شود
Private Sub Form_Load()
Hook1 Text1.hWnd
End Sub

مرتضی تقدمی
جمعه 01 مهر 1390, 23:22 عصر
سلام
خب اگه من منظور شما رو درست گرفته باشم می تونید بجای Text1 هر تکست دیگه ای رو هم قرار بدید. اما فکر نکنم منظور شما این بوده باشه. اگه حدثم درسته منظورتون رو واضح تر بگید.


Private Sub Form_Load()
Hook1 Text1.hWnd
End Sub

موفق باشید

hr0694
شنبه 02 مهر 1390, 00:08 صبح
منظورم اینه هم تکست1 و هم تکست2 و هم تکست3 و هم تکست4 و هم تکست 5 رو شامل بشه

مرتضی تقدمی
شنبه 02 مهر 1390, 00:22 صبح
من این شامل بشه رو نمی فهمم!
خب شما که دارید text1 رو به اون ماژول پاس میدید, بقیه text ها رو هم همین کار کنید.

hr0694
شنبه 02 مهر 1390, 00:30 صبح
یعنی چهار ماژول دیگه هم بنویسم شبیه این ماژول

مرتضی تقدمی
شنبه 02 مهر 1390, 00:39 صبح
نه دیگه. شما کافیه برای هر text یکبار ماژول رو فراخوانی کنید. بازم همون حرف پست اولم!
Hook1 Text1.hWnd
Hook1 Text2.hWnd
Hook1 Text3.hWnd
Hook1 Text4.hWnd
Hook1 Text5.hWnd

king ag
شنبه 02 مهر 1390, 08:15 صبح
خدایی جوابی که میخواستی همین بود ؟؟؟؟؟؟؟؟؟!!!!!!
خوب جناب شما قبل این که این جا تاپیک بزنیخودت هم اول یه آزمایش هایی بکنی بد نیست
بازم ببخشید
موفق باشید

مرتضی تقدمی
شنبه 02 مهر 1390, 08:29 صبح
سلام
به هرحال شاید تازه کار بوده باشه و با این تاپیک مفهوم ماژولاری رو گرفته باشه.
موفق باشید