PDA

View Full Version : ایجاد کلید میانبر برای فرم



aleas2
جمعه 13 خرداد 1390, 14:04 عصر
سلام خسته نباشید کسی سورسی داره من مثلا برنامه رو اجرا کردم وبعد Minimize کردم خب حالا میخوام کاربر تو هر پنجره ای یا هر صفحه کلید وسطی ماوس فشار داد فرم یا همون برنامه که Minimize کردم بیاد بالا و فوکوس روی textباشه کسی چنین سورسی داره؟

وضمنا" کد Minimize چی میخوام مثلا روی command کلیک میکنیم برنامه Minimize بشه

محسن واژدی
جمعه 13 خرداد 1390, 15:27 عصر
سلام علیکم
روش های مختلفی برای دریافت کلید فشرده شده وجود دارد از جمله هوک، در ساده ترین صورت میتوانیم از APIی GetAsyncKeyState برای دریافت وضعیت کلید مورد نظر استفاده کنیم نمونه زیر را بررسی کنید


وضمنا" کد Minimize چی میخوام مثلا روی command کلیک میکنیم برنامه Minimize بشه
برای Minimize کردن فرم از دستور زیر استفاده کنید:

Me.WindowState = vbMinimized


برای maximize کردم فرم از vbMaximized و restore کردن آن به حالت اولیه نیز از دستور vbNormal استفاده کنید

موفق باشید
یاعلی

aleas2
جمعه 13 خرداد 1390, 16:02 عصر
سلام این کدی دادی اصلا کار نکرد
گفتم که فرم Minimize میکنم بعد رو هر پنجره ای صفحه دسکتاپ مروگر پوشه هر جایی و... کلیک وسط ماوس رو کلیک کردم فرم بیاد بالا

محسن واژدی
جمعه 13 خرداد 1390, 16:06 عصر
سلام علیکم
مطمئنین که کار نمیکنه چون مجددا" تستش کردم مشکلی نداشت یعنی در هرکجای ویندوز که کلیک وسط موس را فشار میدهم فرم بالا می آید
البته شاید بخاطر شروطی باشد که داخلش است چون اگر فرم مورد نظر minimize نباشد دستور restore شدن فرم اجرا نمیشود

aleas2
جمعه 13 خرداد 1390, 16:22 عصر
شرمنده الان تست کردم اره درسته فقط بدیش اینه زیر همه پنجره های فعال باز میشه خب باید از کدی که باعث میشد که فرم رو همه پنجره ها باشه استفاده کنم
گفتم دگه تاپیک الکی نزنم تو میدونی برای اینکه فرم رو همه پنجره ها باشه یعنی اگر مثلا My Computer باز کردی باز پنجره فرم رو همه پنجره ها باشه باید چکار کنم ؟چی باید سرج کنم تا به جوابم برسم قبلا اینکارو کرده بودم ولی فراموش کردم

Mr.Unknown
جمعه 13 خرداد 1390, 16:34 عصر
از این کد استفاده کن مشکلت حل میشه

Option Explicit

'API for Top Most form
Private Declare Function SetWindowPos Lib "user32" _
(ByVal hWnd As Long, ByVal hWndInsertAfter As Long, _
ByVal X As Long, ByVal Y As Long, ByVal cx As Long, _
ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const HWND_TOPMOST = -1
Private Const SWP_NOMOVE = 2
Private Const SWP_NOSIZE = 1
Private Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE

Private Const HWND_NOTOPMOST = -2
توی فرم لود هم این کد

SetWindowPos Me.hWnd, HWND_TOPMOST, _
0, 0, 0, 0, FLAGS

محسن واژدی
جمعه 13 خرداد 1390, 16:37 عصر
احتمالا" Always on top را جستجو کنین به نتیجه برسید
بهرحال کدش را در زیر برایتان گذاشته ام


Option Explicit
Private Declare Function SetWindowPos& Lib "user32" (ByVal hwnd&, ByVal hWndInsertAfter&, ByVal x&, ByVal y&, ByVal Wid&, ByVal Hgt&, ByVal Flags&)
Const SWP_NOSIZE = 1
Const SWP_NOMOVE = 2
Const HWND_TOPMOST = -1

Private Sub Form_Load()
SetWindowPos hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE
End Sub




موفق باشید

--------------------
با عرض معذرت از جناب Mr.Unknown، پست ها تقریبا" همزمان ایجاد شدند؛ جواب شما را ندیدم

aleas2
سه شنبه 17 خرداد 1390, 18:58 عصر
سلام دوستان با این دستور

SetWindowPos hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE

میشه کاری کرد فرم رو همه پنجره ها باشه اگر بخوام غیرفعالش کنم یعنی اگر کاربر خواست یه پنجره دگه رو فرم باز کنه از چه دستوری استفاده کنم؟

Mr.Unknown
سه شنبه 17 خرداد 1390, 22:52 عصر
به جای form1 نام فرم خودتو بزار

SetWindowPos form1.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE

aleas2
سه شنبه 17 خرداد 1390, 23:24 عصر
به جای form1 نام فرم خودتو بزار

SetWindowPos form1.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE
سلام دوست عزیز اینو میدونی منظورم این بود اگر بخوام این حالتو غیرفعال کنم فرم به حالت اول برگردونم چطوری اینکارو بکنم امیدوارم متوجه منظورم شده باشین؟

Mr.Unknown
سه شنبه 17 خرداد 1390, 23:55 عصر
این کد
Const HWND_TOPMOST = -1
به این کد
Const HWND_TOPMOST = 1
تغییر بدید

pcdownload.bloghaa.com
پنج شنبه 19 خرداد 1390, 00:15 صبح
Private Declare Function SetWindowPos& Lib "user32" (ByVal hwnd&, ByVal hWndInsertAfter&, ByVal x&, ByVal y&, ByVal Wid&, ByVal Hgt&, ByVal Flags&)
Private Sub Enable_TopMost()
SetWindowPos hwnd, -1, 0, 0, 0, 0, 3
End Sub
Private Sub Disable_TopMost()
SetWindowPos hwnd, -2, 0, 0, 0, 0, 3
End Sub
Private Sub onTop()
SetWindowPos hwnd, 0, 0, 0, 0, 0, 3
End Sub


تابع آخری فرم را فقط یک بار جلوی همه میاره و وقتی روی پنجره دیگه کلیک کنید فوکوس را از دست میده.