PDA

View Full Version : MDI فرم و دکمه MaxButton



hbi
سه شنبه 03 آذر 1383, 20:23 عصر
اگر در یک فرم MDI بخواهم دکمه MaxButton آن فالز باشد به چه صورت است یا نتوان اندازه ان را تغییر داد

Payam Moradi
پنج شنبه 05 آذر 1383, 23:57 عصر
سلام

یکی جواب این بنده خدا بده. دیگه. :mrgreen:

شما میتونید با این تابع هر کدام از منوهای سیستمی پنجره ها که مایلید غیر فعال کنید:
یک ماژول ایجاد کنید و این توابع رو در قسمت General قرار بدید:


Private Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As Long, ByVal bRevert As Boolean) As Long
Private Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long
این تابع رو هم در همان ماژول اضافه کنید:

Public Sub EFF_DisableMenuBarButton(ByVal Form_hWnd As Long, MenuNumber As Long)
Dim hMenu As Long
Dim nCount As Long
Const MF_BYPOSITION = &H400&
Const MF_REMOVE = &H1000&

hMenu = GetSystemMenu(Form_hWnd, False)
nCount = GetMenuItemCount(hMenu)
RemoveMenu hMenu, MenuNumber, MF_REMOVE Or MF_BYPOSITION
DrawMenuBar Form_hWnd
End Sub
حال با فراخوانی تابع EFF_DisableMenuBarButton از هر قسمت برنامه، شماره منویی که داده اید، منوی مربوطه غیر فعال میشود.
به این صورت که در آرگومان اول Form_hWnd دستگیره پنجره مورد نظر رو قرار بدید مثل : Me.hWnd
در آرگومان دوم MenuNumber شماره منو با توجه به جدول ذیل :


Restore = 0
Move = 1
Size = 2
Minimize = 3
Maximize = 4
Separator Line = 5
Close = 6

امیدوارم بدردتون بخوره. :wink:

موفق باشید :flower:

hbi
جمعه 06 آذر 1383, 05:08 صبح
میبخشید در مورد اخرین قسمت یعنی نسبت دادن تابع به فرم اشکال دارم یعنی نمیدانم چگونه تابع را بع فرم نسبت دهم اگر راهنمایی کنید متشکر میشوم :thnx:

Payam Moradi
جمعه 06 آذر 1383, 09:34 صبح
چشم

فرض کنیم می خواهیم فرم Form1 را که حال ممکن است یک فرم معمولی یا یک فرم والد (MDI Form) باشد، کلید Maximize اونو رو غیر فعال کنیم. در روال Form_Load یا MDIForm_Load (برای فرم های والد) این تابع رو قرار میدیم. با توجه به اینکه اندیکس (شماره منو) کلید Maximize برابر 4 است :


Private Sub Form_Load()
EFF_DisableMenuBarButton Me.hWnd, 4
End Sub

بنابراین با لود شدن فرم تابع EFF_DisableMenuBarButton فرا خوانی شده و کلید با اندیکس 4 رو غیر فعال میکند. اگر به جای عدد 4 اندیکس مربوط به کلید های دیگر را قرار بدهید آنها هم/یا غیر فعال میشوند. Me.hWnd دستگیره همان فرمی است که این تابع در آن کدهای مربوط به همان فرم قرار داده شده است. حالا میتوانید به جای Me نام فرم دیگری را قرار بدید تا آن فرم را کنترل کنید. مثلا: MDIForm1.hWnd

یک مثال دیگه:
فرض کنید شما میخواید خاصیت تغییر اندازه فرم MDI را از بین ببرید. در روال MDIForm_Load این تابع را قرار میدهید:


Private Sub MDIForm_Load()
EFF_DisableMenuBarButton Me.hWnd, 0
EFF_DisableMenuBarButton Me.hWnd, 1
EFF_DisableMenuBarButton Me.hWnd, 1
EFF_DisableMenuBarButton Me.hWnd, 1
End Sub
توجه داشته باشید که با از بین بردن هر منو اندیکس آن به منوی بعدی داده میشود.

اگر مشکلی بود بفرمایید.

موفق باشید :flower: