گذاشتن تصویر برای منوها در VB با استفاده از ImageList

گذاشتن تصویر برای منوها در VB با استفاده از ImageList<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

ويژوال بیسیک به طور پیش فرض توانايي گذاشتن تصویر برای منوها را ندارد. لذا برای این کار باید از توابع API استفاده کرد.

در این مثال، تصویرها را درون یک ImageList ذخیره کرده ایم. که این تصویرها باید Bitmap باشند.

ابتدا API ها:

Public Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long

Public Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long

Public Declare Function GetMenuItemID Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long

Public 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

Public Const MF_BITMAP = &H4&

Public Const MF_BYPOSITION = &H400&

با استفاده از تابع زیر، برای منوهاي دلخواه تصویر می گذاریم:

 

Public Sub SetMenuBitmap(ByVal MenuBarItem As Long, MenuItem As Long, ByVal Bitmap As IPictureDisp)

Dim n1 As Long, n2 As Long

n1 = GetMenu(Form1.hwnd)

n2 = GetSubMenu(n1, MenuBarItem)

Call SetMenuItemBitmaps(n2, MenuItem, MF_BYPOSITION, Bitmap.Handle, Bitmap.Handle)

End Sub

پارامترهایی که این تابع می گیرد، یکی شماره ی منوی مورد نظر در نوار منو، و دیگری شماره آيتم منو. و پارامتر آخری هم تصویر مورد نظر است.

مثال:

Call SetMenuBitmap(0, 0, ImageList1.ListImages(1).Picture)

نکته ای که وجود دارد این است که در توابع API، شماره ی منوها به جاي این که از 1 شروع شود، از صفر شروع می شود.

در اینجا ما براي آيتم اول از منوي اول برنامه تصویر گذاشته ایم. که این تصویر، تصویر اول در ImageList است.

 

Source Code Download

 

/ 1 نظر / 7 بازدید
hadivirus

سلام دوست عزيز خوشحال شدم وقتی خبر اومدن اين تروجان را شنيدم من اونا دانلود کرد ولی به من اصلا جواب نداد چون صفحه ای باز نشد برام حتما جواب بزار خوشحال می شم طرز کارش هم اگه بگی لطف کردی :X منتظر هستم