View Full Version : سوال : چطوری میشه منوی سیستمی فرم رو ظاهر کرد؟
حامد مصافی
چهارشنبه 23 دی 1383, 00:52 صبح
سلام
چطوری میشه منوی سیستمی فرم رو - که با کلیک راست روی Title Bar ظاهر میشه - ظاهر کرد؟
mohsengrisly
چهارشنبه 23 دی 1383, 12:14 عصر
با سلام
خب شما فرم رو طوری تنظیم کن که همیشه در موقعیت دکمه قرار گیرد و با کلیک روی ان در نقطه مشخص
شده ظاهر گردد.
به بخش دو تا فرم با هم که خودم هم مشکل داشتم مراجعه کن منم واسه همین کار می خواستم دو تا فرم با هم فعال بشه :mrgreen:
اگر مشکل حل نشد بگو تا یه نمونه اماده برات بذارم .
:موفق:
حامد مصافی
چهارشنبه 23 دی 1383, 13:23 عصر
سلام ، محسن جان مثل اینکه منظور منو متوجه نشدی :mrgreen:
من می خوام منو ظاهر کنم نه فرم !!!
به بخش دو تا فرم با هم که خودم هم مشکل داشتم مراجعه کن منم واسه همین کار می خواستم دو تا فرم با هم فعال بشه
اگه به این بخش مراجعه کنم که کد های خودم رو می بینم :mrgreen: !!!!
Behrouz_Rad
چهارشنبه 23 دی 1383, 13:46 عصر
یک خط.
PopupMenu MyMenu, , X + 20, Y + 20
:wise1:
H_r_m
چهارشنبه 23 دی 1383, 22:10 عصر
سلام
یه چیز دیگه
چطوری میشه بهش یه ایتم دیگه اضافه کرد مثلا About
:thnx:
MM_Mofidi
پنج شنبه 24 دی 1383, 15:07 عصر
Alt +Space میشه از send key هم استفاده کرد
حامد مصافی
پنج شنبه 24 دی 1383, 16:49 عصر
ممنون آقای مفیدی ، اصلاً حواسم نبود که با SendKeys میشه حتماً امتحان می کنم
در ضمن حمید جان به این طریق میشه یه آیتم مثل About به منوی سیستمی اضافه کرد
ابتدا این کد رو توی یه ماژول کپی کنید:
Private OriginalWindowProc As Long
Public Const MF_STRING = &H0&
Public Const MF_ENABLED = &H0&
Public Const IDM_MYMENUITEM = 2003
Public Const WM_SYSCOMMAND = &H112
Public Const GWL_WNDPROC = (-4)
Public Declare Function GetSystemMenu Lib "user32" ( _
ByVal hWnd As Long, _
ByVal bRevert As Long) As Long
Public Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" ( _
ByVal hMenu As Long, _
ByVal wflags As Long, _
ByVal wIDNewItem As Long, _
ByVal lpNewItem As String) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" ( _
ByVal hWnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Public 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
Public Sub AddToSystemMenu(ByVal hWnd As Long, _
MenuItem As String)
Dim hSystemMenu As Long
' be dast avordane handle...
hSystemMenu = GetSystemMenu(hWnd, False)
AppendMenu hSystemMenu, MF_STRING + MF_ENABLED, IDM_MYMENUITEM, MenuItem
OriginalWindowProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf MyMenuProc)
End Sub
Public Function MyMenuProc(ByVal hWnd As Long, _
ByVal msg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
If msg = WM_SYSCOMMAND And wParam = IDM_MYMENUITEM Then
frmAbout.Show vbModal, frmMain
Exit Function
End If
MyMenuProc = CallWindowProc(OriginalWindowProc, hWnd, msg, wParam, lParam)
End Function
حالا به این شکل میتونی منو رو اضافه کنی
Call AddToSystemMenu(hWnd, "About...")
عکس منوی حاصل رو هم ضمیمه کردم
توجه داشته باش در سابروتین MyMenuProc می تونی برای منو کد نویسی کنی ، برای ظاهر شدن فرم frmAbout من اینو نوشتم :
If msg = WM_SYSCOMMAND And wParam = IDM_MYMENUITEM Then
frmAbout.Show vbModal, frmMain
Exit Function
End If
MyMenuProc = CallWindowProc(OriginalWindowProc, hWnd, msg, wParam, lParam)
(وجود خط آخر ضروریه تا ویندوز بدونه کاربر با فرم چیکار کرده؟)
در ضمن آقا بهروز منوی سیستمی منظور من بود
H_r_m
پنج شنبه 24 دی 1383, 18:05 عصر
BlackDal عزیز ممنونم لطف کردین :تشویق:
mohsengrisly
پنج شنبه 24 دی 1383, 18:15 عصر
ببخشید من فکر کردم می خواهین منوی یک فرم دیگه رو فرا خوانی کنید :embr:
حامد مصافی
پنج شنبه 24 دی 1383, 20:10 عصر
سلام
خواهش میشه حمید جان ، مسئله ای نیست آقا بهروز :wink:
در ضمن آقای مفیدی من میخوام این منو هر جا که خواستم ظاهر بشه
(برای فرم های با Title Bar سفارشی می خوام)
MM_Mofidi
یک شنبه 27 دی 1383, 16:58 عصر
باشه بذار یک نگاهی بندازم چشم اگر چیزی پیدا کردم میگذارم :موفق:
hbi
چهارشنبه 30 دی 1383, 17:47 عصر
میبخشید کد فوق در سطر زیر خطا میگیرد . البته در win98 ان را اجرا میکنم
[code]frmAbout.Show vbModal, frmMain
حامد مصافی
چهارشنبه 30 دی 1383, 19:21 عصر
سلام
جناب hbi کاش توضیحات اون خطا رو هم می فرمودین
به هر حال اگه شما فرمی با نام frmAbout داشته باشین قاعدتاً مشکلی پیش نمی آد
در ضمن فرمی که قراره این منو به اون اضافه بشه اسمش باید frmMain باشه
شما این موارد رو رعایت کردین ؟؟؟؟
hbi
چهارشنبه 30 دی 1383, 20:54 عصر
با تشکر از توجه شما. سعی کردم عکس خطا را در اینجا قرار دهم اما نشد اما متن ان چنین است
[/code] this program has performed an illegal opereting and will be shut don [code]
و بعد هم vb را میبندد .
با تشکر :cry:
MM_Mofidi
یک شنبه 04 بهمن 1383, 14:34 عصر
اینم برای جناب BlackDal همش api است :wink:
حامد مصافی
یک شنبه 04 بهمن 1383, 16:41 عصر
سلام
ببخشید چند روز نبودم
خیلی ممنون آقای مفیدی فعلاً نمی تونم دانلود کنم ( چون تو شهر خودم نیستم و از کافی نت کانکت میشم )کنم ولی بعداً میبینم و نتیجه رو می نویسم :wink:
در ضمن جناب hbi من تا حالا با این کد این طور که میگین در گیر نبودم ، همونطور که گفتم من الان به کامپیوتر خودم دسترسی ندارم ولی در اسرع وقت موضوع رو بررسی می کنم :wink:
MM_Mofidi
چهارشنبه 14 بهمن 1383, 16:24 عصر
هنوز ندیدی آقایBlackDal؟
حامد مصافی
جمعه 16 بهمن 1383, 21:17 عصر
:تشویق:
از بابت پست این برنامه ازتون خیلی ممنونم ، مشکلم حل شد
MM_Mofidi
دوشنبه 19 بهمن 1383, 13:19 عصر
:موفق:
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.