PDA

View Full Version : سوال: غير فعال كردن دابل كليك برروي پنجره اي خاص



nazanin_90
یک شنبه 31 شهریور 1392, 11:47 صبح
سلام
دابل كليك بر روي نوار عنوان يك پنجره باعث ماكسيمايز شدن پنجره (اگر در حالت restore باشد) و ريستورشدن پنجره (اگر در حالت ماكسيمايز باشد) ميشود ، حال اگر ما هندل يك پنجره خاص را داشته باشيم چگونه ميتوان دابل كليك را بر روي نوار عنوان آن غير فعال كنيم ؟
با تشكر

setroyd
یک شنبه 31 شهریور 1392, 23:24 عصر
دابل رو میشه با فرا خوانی پشت سر همش که با getasenskeystat و با api کار با mous میشه کنترل کرد ولی شما میتونی minimize و max رو از کار بندازی برای این کار مگر اینکه کار شما فقط به این دو کار ختم نشه !

nazanin_90
دوشنبه 01 مهر 1392, 00:12 صبح
دابل رو میشه با فرا خوانی پشت سر همش که با getasenskeystat و با api کار با mous میشه کنترل کرد ولی شما میتونی minimize و max رو از کار بندازی برای این کار مگر اینکه کار شما فقط به این دو کار ختم نشه !
سلام !
من میخواهم ضمن فعال بودن minimize و max اینکار انجام شود.
با تشکر

Mr'Jamshidy
چهارشنبه 03 مهر 1392, 14:36 عصر
میتونی پیغام هایی که به فرم ارسال میشه کنترل کنی

Option Explicit

Private Type POINTAPI
x As Long
y As Long
End Type
Private Type Msg
hWnd As Long
Message As Long
wParam As Long
lParam As Long
time As Long
pt As POINTAPI
End Type

Private Const PM_REMOVE = &H1
Private Const WM_LBUTTONDBLCLK = &H203

Private Declare Function PeekMessage Lib "user32" Alias "PeekMessageA" (lpMsg As Msg, ByVal hWnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, ByVal wRemoveMsg As Long) As Long
Private Declare Function WaitMessage Lib "user32" () As Long
Private bCancel As Boolean

Private Sub Form_Load()
Show
ProcessMessages
End Sub

Private Sub ProcessMessages()
Dim Message As Msg
Do While Not bCancel
WaitMessage
If PeekMessage(Message, Me.hWnd, WM_LBUTTONDBLCLK, WM_LBUTTONDBLCLK, PM_REMOVE) Then
WindowState = vbMinimized
End If
DoEvents
Loop
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
bCancel = True
End Sub

abas1388
دوشنبه 08 مهر 1392, 11:38 صبح
سلام
دابل كليك بر روي نوار عنوان يك پنجره باعث ماكسيمايز شدن پنجره (اگر در حالت restore باشد) و ريستورشدن پنجره (اگر در حالت ماكسيمايز باشد) ميشود ، حال اگر ما هندل يك پنجره خاص را داشته باشيم چگونه ميتوان دابل كليك را بر روي نوار عنوان آن غير فعال كنيم ؟
با تشكر
سلام
من هم دنبال راه حلي براي اين مورد هستم .
اساتيد گرامي ! در صورت امكان يك نمونه ارائه فرمايند.
با تشكر

محسن واژدی
چهارشنبه 10 مهر 1392, 00:56 صبح
سلام علیکم
ضمیمه زیر بررسی کنید

موفق باشید

abas1388
چهارشنبه 10 مهر 1392, 20:16 عصر
سلام علیکم
ضمیمه زیر بررسی کنید

موفق باشید
با سلام خدمت جناب استاد واژدی عزیز
باتشکر از عنایتی که در ارتباط با این تاپیک مبذول نموده اید.
نمونه شما برای غیرفعال کردن دابل کلیک بر روی نوار عنوان فرم کاملاً جواب میدهد .
آیا راهی هست که بتوان :
1- دابل کلیک بر روی نوار عنوان MDI form را نیز غیر فعال کرد؟
2-از داخل برنامه و با داشتن هندل یک برنامه خاص ( فرضاً یک دیتابیس اکسس )دابل کلیک بر روی نوار عنوان اصلی آن برنامه غیر فعال نمود؟

با تشکر

محسن واژدی
پنج شنبه 11 مهر 1392, 05:56 صبح
با سلام خدمت جناب استاد واژدی عزیز
باتشکر از عنایتی که در ارتباط با این تاپیک مبذول نموده اید.
نمونه شما برای غیرفعال کردن دابل کلیک بر روی نوار عنوان فرم کاملاً جواب میدهد .
آیا راهی هست که بتوان :
1- دابل کلیک بر روی نوار عنوان MDI form را نیز غیر فعال کرد؟
2-از داخل برنامه و با داشتن هندل یک برنامه خاص ( فرضاً یک دیتابیس اکسس )دابل کلیک بر روی نوار عنوان اصلی آن برنامه غیر فعال نمود؟

با تشکر

سلام علیکم
1- بله اگر هندل فرم MDI را به تابع Hook ارسال کنیم علاوه بر Form1 یک هوک برای MDI Form هم درنظر گرفته می شود، به عنوان مثال در Form1_Load می نویسیم:

Private Sub Form_Load()
Hook MDIForm1.hwnd
Hook hwnd
End Sub

2- هندل Access به تابع Hook ارسال کنید انشاءا... درسته

نکته: در هوک کردن برنامه یا sub-classing توصیه میشه برای بستن فرم از دستور Unload استفاده کنید یا بر روی Close فرم کلیک کنید تا فشرده دکمه Stop یا اجرا دستور End در غیراینصورت برخی اوقات به آرامی به بیرون از وی بی هدایت خواهید شد (Crash) ، همچنین پیش از هر تست بهتر است پروژه را ذخیره کنید

موفق باشید