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

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

ويژوال بیسیک به طور پیش فرض توانايي گذاشتن تصویر برای منوها را ندارد. لذا برای این کار باید از توابع 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

 

  
نویسنده : محمد ; ساعت ٧:٥٦ ‎ب.ظ روز دوشنبه ٢٢ دی ،۱۳۸٢