Arşiv Anasayfa Visual Basic
Sayfalar: 1
Sistem Menüsü By: mesut1997 Date: June 24, 2008, 03:24:39 AM
Option Explicit

Dim mnuhandleno As Long, mnucnt As Long

Private Sub Command1_Click()
RemoveMenu mnuhandleno, mnucnt - 1, MF_BYPOSITION Or MF_REMOVE ’Deneme2 isimli menüyü sil
’ mnucnt - 2 olsaydı Deneme1 isimli, mnucnt - 3 olsaydı Kapat Seçeneği silinirdi
End Sub

Private Sub Form_Load()

mnuhandleno = GetSystemMenu(Me.hwnd, False) ’handle numarası verilen
’pencerenin sitem menüsü numarasını bul
Call AppendMenu(mnuhandleno, MF_STRING, &H10, "Deneme1") ’sistem menüsü numarası
’verilen pencerenin sistem menüsüne HEX10 numaralı Deneme1 isimli seçenek ekle
’AppendMenu apisindeki MF_STRING değeri yerine MF_DISABLED,MF_GRAYED,MF_SEPARATOR değerleri vererek menü seçeneklerini inceleyin.
Call AppendMenu(mnuhandleno, MF_STRING, &H20, "Deneme2") ’sistem menüsü numarası
’verilen pencerenin sistem menüsüne HEX10 numaralı Deneme2 isimli seçenek ekle
’Son numarası 0 olan &H30, & H40 gibi daha fazla seçenek eklenebilir.
formyakala Me.hwnd ’handle numarası verilen pencereye kanca atan prosedürü çağır
mnucnt = GetMenuItemCount(mnuhandleno) ’Sistem menüsünde kaç seçenek olduğunu bul seçenek
SetMenuItemBitmaps mnuhandleno, mnucnt - 1, MF_BYPOSITION, Picture1.Picture, Picture2.Picture ’Burası da
’sistem menüsüne resim eklemek için kullanılıyor. mnucnt - 1 sistem menüsü seçenek sayısının bir eksiği
’anlamına geliyor ve kod Deneme2 isimli seçeneğe Picture1 isimli PictureBox içindeki resmi ekliyor. Resmin
’menüde düzgün görüntülene bilmesi için resmin 13x13 ebatlarında olması gerekli.
’Picture1.Picture, Picture2.Picture ifadesi; menünün Checked özelliği False iken gösterilecek resmin
’Picture1 isimli PictureBox içindeki resim, Checked özelliği True iken gösterilecek resmin ise Picture2 isimli
’PictureBox içerisindeki resim olduğunu ifade eder. Picturebox yerine ImageList nesnesi de kullanılabilir.
End Sub

Private Sub Form_Unload(Cancel As Integer)
Formbirak Me.hwnd ’Pencere kapatılırken handle numarası verilen pencereye atılan
’kancayı bırakan prosedürü çağır. Aksi takdirde program kapanırken hata verir.
End Sub




’Buradan itibaren modüle yapıştırılacak
’Written by Serkan Karakoç
Option Explicit
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 Any) 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 Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
Public Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags 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 WM_SYSCOMMAND = &H112
Public Const GWL_WNDPROC = (-4)
’************************************************* **
Public Const MF_STRING = &H0&
Public Const MF_CHECKED = &H8&
Public Const MF_DISABLED = &H2&
Public Const MF_GRAYED = &H1&
Public Const MF_SEPARATOR = &H800&
’************************************************* **
Public Const MF_BYPOSITION = &H400&
Public Const MF_REMOVE = &H1000

Dim PrevProc As Long
Public Sub formyakala(handle As Long)
’handle numarası verilen pencereye kanca at
PrevProc = SetWindowLong(handle, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Sub Formbirak(handle As Long)
’handle numarası verilen pencereyi bırak
SetWindowLong handle, GWL_WNDPROC, PrevProc
End Sub
Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
WindowProc = CallWindowProc(PrevProc, hwnd, uMsg, wParam, lParam)
If uMsg = WM_SYSCOMMAND Then ’yapılan işlem sistem menüsü ile ilgiliyse ilgili kodları çalıştır.
’******************************************** **
If wParam = &H10 Then ’mesaj numarası HEX10 ise ilgili kodları çalıştır.
MsgBox "Deneme1 seçildi" _
& Chr(13) & _
"Buraya başka kodlar da yazılabilir"
’******************************************** **
End If
If wParam = &H20 Then ’mesaj numarası HEX10 ise ilgili kodları çalıştır.
MsgBox "Deneme2 seçildi" _
& Chr(13) & _
"Buraya başka kodlar da yazılabilir"
End If
’******************************************** **
End If
End Function

Ynt: Sistem Menüsü By: Musty19o5 Date: December 16, 2008, 09:16:19 PM
sağol.
Ynt: Sistem Menüsü By: melek_03 Date: May 04, 2010, 07:10:12 PM
Teşekkürler..
Ynt: Sistem Menüsü By: sibeL* Date: May 04, 2010, 07:11:40 PM
Teşekkürler..

SiteMap - İmode - Wap2