PDA

View Full Version : اضافه کردن ایکون به منو ها



Veteran
شنبه 05 شهریور 1390, 21:59 عصر
سلام دوستان ایا امکان اضافه کردن ایکون به منو وجود داره ؟
کسی اطلاعاتی داره بگه ممنون میشم

setroyd
شنبه 05 شهریور 1390, 22:33 عصر
یجوری نوشتم راحت بفهمی خیلی راحته کمی دقت کنی .

Veteran
شنبه 05 شهریور 1390, 22:41 عصر
:اشتباه: :متفکر::ناراحت:

setroyd
شنبه 05 شهریور 1390, 22:44 عصر
یعنی نفهمیدی !

Veteran
شنبه 05 شهریور 1390, 22:50 عصر
چرا البته نه کامل hwnd منو رو از کجا بیاریم زیر منو ها از 0 شروع میشه به تعداد زیر منو ها میره بالا ؟
مثلا اگه 4 تا منو داشتیم با هرکدوم 3 زیر منو بعد این چجوری میشه ؟
:لبخند: هیچکس مادرزاد برنامه نویس نیس

setroyd
یک شنبه 06 شهریور 1390, 00:48 صبح
hSubMenu = GetSubMenu(hMenu, 0) اگر 0 رو به 1 تغییر بدی میره رو sub menu بعدی و الی اخر ....... hwnd شما میشه me.hwnd این هندل form شماس !

setroyd
یک شنبه 06 شهریور 1390, 00:52 صبح
دوست من این این حرف شما درسته من خودمم میگم کسی مادرزاد برنامه نویس نیست ولی کمی تلاش میتونه کمکت کنه که بتونی روزی اگه جایی بدون کمک موندی از تجربه ی خودت استفاده کنی من خوب کمکت کردم شما اگه درکش برات کمی سخته مشکلی نیست قول بهت میدم اگه 1 هفته وقت بزاری و 2 تا کتاب از پایه بخونی دیگه هر مطلبی رو به راحتی درک کنی . موفق باشی

محسن واژدی
یک شنبه 06 شهریور 1390, 09:07 صبح
سلام علیکم
مراحل کلی افزودن آیکون به هر آیتم:


ابتدا با استفاده از تابع GetMenu هندل منوی فرم را بدست می آوریم، در صورتیکه منویی در فرم وجود داشته باشد هندل آن بازگردانده میشود در غیر این صورت مقدار برگشتی صفر خواهد بود
سپس توسط GetSubMenu هندل منوی هدف را بدست می آوریم، همانگونه که میدانیم یک فرم میتواند چندین منو داشته باشد، برای مثال ممکن است سه منوی File , Edit , View در یک پنجره ویرایشگر وجود داشته باشد، در این بین هر منو دارای یک موقعیت یا شماره است که از صفر شروع میشود (شبیه اشیاء آرایه)، پس موقعیت سه منوی ذکر شده به ترتیب میشود: 0,1,2
در پایان هم بوسیله SetMenuItemBitmaps تصویر را به آیتم مورد نظر اضافه میکنیم، فرض میکنیم که منوی File دارای دو آیتم به ترتیب Save و Open است، این دو آیتم نیز همانند گزینه های منو دارای موقعیتی هستند که از صفر شروع میشود، موقعیت این دو آیتم هم میشود: 0,1


کد زیر نمونه ای از توضیحات فوق است، در ادامه هم درباره چند خط توضبحاتی میدهیم:


Option Explicit
Private Declare Function GetMenu Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function GetSubMenu Lib "user32" (ByVal hmenu As Long, ByVal nPos As Long) As Long
Private Declare Function SetMenuItemBitmaps Lib "user32" (ByVal hmenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal hBitmapUnchecked As Long, ByVal hBitmapChecked As Long) As Long

Private Const MF_BYPOSITION = &H400&

Private Sub Command1_Click()
Dim main_hmenu&, hmenu&, sub_hmenu&
main_hmenu& = GetMenu(Me.hWnd)
hmenu& = GetSubMenu(main_hmenu&, 0)

'Add Save menu pic
sub_hmenu& = SetMenuItemBitmaps(hmenu&, 0, MF_BYPOSITION, CLng(Picture1.Picture), ByVal 0&)

'Add Open menu pic
sub_hmenu& = SetMenuItemBitmaps(hmenu&, 1, MF_BYPOSITION, CLng(Picture2.Picture), ByVal 0&)

End Sub



خط 10: هندل منوی فرم را برمیگرداند؛ hwnd هم هندل فرم است
خط 11: هندل منوی هدف که در این نمونه File است را پس از دریافت موقعیت آن، برمیگرداند،

گزینه های تابع GetSubMenu
Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long

hmenu: هندل دریافت شده توسط GetMenu



nPos:موقعیت یا شماره منو


خط 14: تصویر را به آیتم منو که در اینجا Save است می افزاید، در این دستور MF_BYPOSITION مشخص میکند که ما خواستار افزون تصویر بر اساس موقعیت آیتم هستیم، موقعیت Save در اینجا 0 میباشد

گزینه های تابع SetMenuItemBitmaps
Declare Function GetMenuItemID Lib "user32" Alias "GetMenuItemID" (ByVal hMenu As Long, ByVal nPos As Long) As Long

hmenu: هندل دریافت شده توسط GetSubMenu
nPosition : موقعیت آیتم هدف، یعنی Save که 0 است
uFlags: شامل دو پارامتر است:

MF_BYPOSITION: اگر از این پارامتر استفاده شود بایستی موقعیت یا شماره آیتم را در پارامتر nPosition جایگزین کنید که ساده ترین راه نیز است
MF_BYCOMMAND: و اگر از این پارامتر استفاده کنیم باید ابتدا ID آیتم را توسط GetMenuItemID بدست آورده سپس ID بدست آمده را در nPosition جایگزین کنیم، در مورد این تابع توضیحی نمیدم خیلی پیچیده شد، البته نمونه غیرفعال شده اش در سورس زیر موجود است







توضیحات بالا را میتوانید در سورس زیر مشاهده کنید

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

ali_mo7670
یک شنبه 06 شهریور 1390, 11:33 صبح
یک کامپوننت گذاشتم که همه ای این کارا رو میکنه از جمله تغییر فونت و... ولی فقط روی ویندوز xp کار میده ببین بدردت میخوره!
اینم لینکشhttp://up6.iranblog.com/upload/90/shahrivar/3-5/13145157691.rar

setroyd
یک شنبه 06 شهریور 1390, 14:06 عصر
کامپوننت به چه دردی میخوره وقتی میتونی راحت با کد نویسی این کارو بکنید !

محسن واژدی
یک شنبه 06 شهریور 1390, 14:26 عصر
کامپوننت مفیدی است برای تغییر دادن استیل و سایر ویژگی های منوی فرم، اما صرفا" برای افزودن تصویر به گزینه های منو چند خط کد فوق کافیست بدون هیچ گونه بکارگیری توابع هوک