PDA

View Full Version : سوال: اجرا نشدن کلید ترکیبی خاص (#+Shift)



daniyal_1363
سه شنبه 15 تیر 1389, 21:48 عصر
سلام

در یه قسمت از نرم افزاری که دارم طراحی می کنم لازمه که کاربر نتونه کلید های ترکیبی (#+Shift) رو بزنه ( در اصل نمیخوام کارکتر # تایپ بشه )

از روش های که توی سایت گفتن رفتم ولی متاسفانه عملی نشد (خواهشن روش تست شده بگین ممنون)

ahmads
چهارشنبه 16 تیر 1389, 02:01 صبح
سلام

در یه قسمت از نرم افزاری که دارم طراحی می کنم لازمه که کاربر نتونه کلید های ترکیبی (#+Shift) رو بزنه ( در اصل نمیخوام کارکتر # تایپ بشه )

از روش های که توی سایت گفتن رفتم ولی متاسفانه عملی نشد (خواهشن روش تست شده بگین ممنون)
سلام ،

برای محکم کاری ویژگی KeyPress رو True کنید که هرجای فرم که هستید عمل کنه :

برای نشون دادن پیغام خطا :



Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = 35 Then MsgBox ("Error")
End Sub

و برای تایپ نشدن علامت شارپ :


If KeyAscii = 35 Then KeyAscii = 0

اگه منظروتون چیزی غیر از این هست میتونید کدهای بالا رو ترکیب کنید تا به نتیجه برسید

M.T.P
چهارشنبه 16 تیر 1389, 11:00 صبح
سلام

در یه قسمت از نرم افزاری که دارم طراحی می کنم لازمه که کاربر نتونه کلید های ترکیبی (#+Shift) رو بزنه ( در اصل نمیخوام کارکتر # تایپ بشه )

از روش های که توی سایت گفتن رفتم ولی متاسفانه عملی نشد (خواهشن روش تست شده بگین ممنون)

کاملا تست شده: :قلب:

Private Sub Text1_Change()
Text1 = Replace(Text1.Text, "#", ""): Text1.SelStart = Len(Text1.Text)
End Sub

daniyal_1363
چهارشنبه 16 تیر 1389, 17:03 عصر
سلام ،

برای محکم کاری ویژگی KeyPress رو True کنید که هرجای فرم که هستید عمل کنه :

برای نشون دادن پیغام خطا :



Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = 35 Then MsgBox ("Error")
End Sub

و برای تایپ نشدن علامت شارپ :


If KeyAscii = 35 Then KeyAscii = 0

اگه منظروتون چیزی غیر از این هست میتونید کدهای بالا رو ترکیب کنید تا به نتیجه برسید

خیلی ممنون از اینکه به فکر هستید که کار بقیه رو راه بندازید ولی...


من از دوستان خواسته بودم که روش رو که میگن تست شده باشه (چون خودم کلی روش رو تست کردم از جمله روش شما رو ) و صد در صد شما تست نکردین این روش رو

این راه رو خودم بلد بودم دوست عزیز

حتی کلید های ترکیبی رو هم امتحان کردم ولی موضوع اینکه تو همین مسلئه گیر کردم که چرا نمیشه جلوی فشرده شدن کلید های ترکیبی Shift + عدد های بالای صفحه کلید رو گرفت؟:عصبانی++:


کاملا تست شده: :قلب:

Private Sub Text1_Change()
Text1 = Replace(Text1.Text, "#", ""): Text1.SelStart = Len(Text1.Text)
End Sub


ممنون روش شما جواب میده و....
این روش رو هم میدونستم، این روش برای زمانی استفاده میشه که بخوام داخل یک نوشته کارکترمون تایپ نشه و میخوام از روش Keypress یا Keycode استفاده کنم(اصولیش همینه روشه) که علاوه بر Text ها نشه روی فرم ها هم این کلید فشرده بشه

این نمونه رو ببینید






If KeyCode = 51 And Shift = 1 Then
KeyCode = 0
End If




این نمونه در واقع میگه اگه Keycode = 51 باشه (یعنی کارکتر "#") و Shift = 1 باشه (یعنی کلید Shift فشرده شده باشه ) Keycode رو برابر با صفر قرار بده

در اصل کد عمل میکنه ولی اگه فوکوس روی تکست باشه بازم کارکتر "#" تایپ میشه:ناراحت:

کسی میدونه مشکل کجاست ؟

daniyal_1363
چهارشنبه 16 تیر 1389, 17:23 عصر
جالبه فکر نمیکردم با این روش بشه مشکل رو حل کرد


تعریف یک متغییر کلی برای فهمیدن فشرده شدن کلید ترکیبی




Dim Cod_t As Integer




اختصاص دادن مقدار کلید ترکیبی در KeyDown به متغییر تعریف شده






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

Cod_t = Shift

End Sub





و در آخر استفاده از متغییر تعریف شده در KeyPress به این صورت





Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 35 And Cod_t = 1 Then KeyAscii = 0
End Sub





در اصل اگه برای KeyPress هم Shift تعریف میشد بدون در نظر گرفتن متغییر میشد این کار رو انجام داد


آیا روش بهتری هم هست ؟:متفکر:

اگه هست لطفاً دریغ نکنید ، منتظرم

ahmads
چهارشنبه 16 تیر 1389, 17:29 عصر
من از دوستان خواسته بودم که روش رو که میگن تست شده باشه (چون خودم کلی روش رو تست کردم از جمله روش شما رو ) و صد در صد شما تست نکردین این روش روروش رو امتحان کرده بودم، معمولا تو زمینه های که اطلاعاتی ندارم دخالت نمیکنم مگر اینکه با درصد بالای احتمال بدم که بتونم مسئله رو حل کنم

میشه بگید چطوری از کد استفاده کرده بودید ؟ دقت کنید که هر دو باید در ویژگی Keypress فرم باشن
حتما باید نتیجه ی معکوسی داده باشه که شما میگید صد در صد امتحان نکرده بودم !

یه نکته دیگه ، شما حرف شارپ مد نظرتون هست یا علامت # رو به نمایندگی از ترکیب حروف با Shift مد نظر گرفتید ؟ چون من علامت شارپ مد نظرم بود

daniyal_1363
چهارشنبه 16 تیر 1389, 19:31 عصر
روش رو امتحان کرده بودم، معمولا تو زمینه های که اطلاعاتی ندارم دخالت نمیکنم مگر اینکه با درصد بالای احتمال بدم که بتونم مسئله رو حل کنم

میشه بگید چطوری از کد استفاده کرده بودید ؟ دقت کنید که هر دو باید در ویژگی Keypress فرم باشن
حتما باید نتیجه ی معکوسی داده باشه که شما میگید صد در صد امتحان نکرده بودم !

یه نکته دیگه ، شما حرف شارپ مد نظرتون هست یا علامت # رو به نمایندگی از ترکیب حروف با Shift مد نظر گرفتید ؟ چون من علامت شارپ مد نظرم بود

KeyPress زمانی استفاده میشه که کلیدی روی صفحه کلید زده بشه و علامت "#" تنها با گرفتن Shift زده میشه یعنی کارکتر "#" در صورتی تایپ یا فشرده میشه که shift رو نگه داری و کلید 4 رو که جز اعداد بالای صفحه کلید هست رو بزنین ( مگه اینکه کلید "#" توی صفحه کلیدی جدا تعریف شده باشه )

M.T.P
چهارشنبه 16 تیر 1389, 20:28 عصر
خصوصیت KeyPreview فرم رو True کنید.

کد زیر رو استفاده کنید:


Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If Shift = 1 And KeyCode = 51 Then Text1.Locked = True
End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
If Text1.Locked = True Then Text1.Locked = False
End Sub

ahmads
چهارشنبه 16 تیر 1389, 21:10 عصر
KeyPress زمانی استفاده میشه که کلیدی روی صفحه کلید زده بشه و علامت "#" تنها با گرفتن Shift زده میشه یعنی کارکتر "#" در صورتی تایپ یا فشرده میشه که shift رو نگه داری و کلید 4 رو که جز اعداد بالای صفحه کلید هست رو بزنین ( مگه اینکه کلید "#" توی صفحه کلیدی جدا تعریف شده باشه )
ببین ربطی نداره که شیفت رو بگیری یا نه ،یعنی اون کد به شیفت وابسته نیست من برمبنای این صحبت شما که

در اصل نمیخوام کارکتر # تایپ بشه اون کد رو نوشتم

مطمئنا راه های زیادی وجود داره که من اطلاع ندارم اما قاعدتا اگه کد بنده اشتباه بود شما الان باید بتونی تو برنامه زیر علامت شارپ رو تایپ کنی ، اگر تایپ کردی بنده به شما حق میدم، در ضمن شارپ با گرفتن شیفت و عدد 3 تولید میشه نه چهار

xxxxx_xxxxx
چهارشنبه 16 تیر 1389, 21:15 عصر
سلام،
اگر میخواید به طور سراسری در کل برنامه و حتی خارج از محیط برنامه این کارو انجام بدید از تابع GetAsyncKeyState استفاده کنید.

نمونه:
keylogging دکمه های ترکیبی. چگونه؟ (http://barnamenevis.org/forum/showthread.php?t=224329)

daniyal_1363
پنج شنبه 17 تیر 1389, 16:50 عصر
ببین ربطی نداره که شیفت رو بگیری یا نه ،یعنی اون کد به شیفت وابسته نیست من برمبنای این صحبت شما که
اون کد رو نوشتم

مطمئنا راه های زیادی وجود داره که من اطلاع ندارم اما قاعدتا اگه کد بنده اشتباه بود شما الان باید بتونی تو برنامه زیر علامت شارپ رو تایپ کنی ، اگر تایپ کردی بنده به شما حق میدم، در ضمن شارپ با گرفتن شیفت و عدد 3 تولید میشه نه چهار

ممنون

روز پیش من چندین بار و با چندین روش قبل از اینکه تایپیک بدم راه KeyPress رو امتحان کردم و متاسفانه هر کاری میکردم کلید # و کلید های ترکیبی اعداد رو نمیتونستم فیلتر کنم ، به جز روش ابتکاری خودم ، و امروز بعد از عوض کردن ویندوز متوجه شدم که به راحتی و با استفاده از کد اسکی کارکترها در KeyPress مشکلم حل میشه (یعنی همون روش اولیه که گفته بودین) در هر صورت روش شما درست بود همچنین روش های دیگم درست بود و مشکل از ویندوز و یا VB6 من بود - از شما عذرخواهی میکنم

بازم از راهنمای های شما متشکرم




سلام،
اگر میخواید به طور سراسری در کل برنامه و حتی خارج از محیط برنامه این کارو انجام بدید از تابع GetAsyncKeyState استفاده کنید.

نمونه:
keylogging دکمه های ترکیبی. چگونه؟ (http://barnamenevis.org/forum/showthread.php?t=224329)


این چند کارکتر فقط لازم روی یکی از فرم هام اجرا نشه و نیاز به پیچیده کردن مسله نیست ،بازم ممنون