Programalama > VISUAL BASIC

'''''''' Önce projenize bir module ekleyin ve aşağıdaki kodları yazın;

'''''''' Kullanacağımız API ve değişkenlerin tanımlamalarını yapıyoruz.
Public OldWindowProc As Long
Public TheForm As Form
Public TheMenu As Menu

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
Declare Function SetWindowLong Lib "User32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long

Public Const WM_USER = &H400
Public Const WM_LBUTTONUP = &H202
Public Const WM_MBUTTONUP = &H208
Public Const WM_RBUTTONUP = &H205
Public Const TRAY_CALLBACK = (WM_USER + 1001&)
Public Const GWL_WNDPROC = (-4)
Public Const GWL_USERDATA = (-21)
Public Const NIF_ICON = &H2
Public Const NIF_TIP = &H4
Public Const NIM_ADD = &H0
Public Const NIF_MESSAGE = &H1
Public Const NIM_MODIFY = &H1
Public Const NIM_DELETE = &H2

Public Type NOTIFYICONDATA
    cbSize As Long
    hWnd As Long
    uID As Long
    uFlags As Long
    uCallbackMessage As Long
    hIcon As Long
    szTip As String * 64
End Type

Private TheData As NOTIFYICONDATA

Private Declare Function SetForegroundWindow Lib "User32" (ByVal hWnd As Long) As Long
Private Declare Function PostMessage Lib "User32" Alias "PostMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const WM_NULL = &H0
Public Function NewWindowProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Const WM_NCDESTROY = &H82
Const WM_SYSCOMMAND = &H112
Const SC_MAXIMIZE = &HF030&
Const SC_MINIMIZE = &HF020&
Const SC_RESTORE = &HF120&

'''''''' Form kapanıyorsa traydeki iconu kaldırıyoruz, siz yine de formunuzun unload olayına TraydenAl yazmayı unutmayın.
    If Msg = WM_NCDESTROY Then
        TraydenAl
    ElseIf Msg = TRAY_CALLBACK Then

'''''''' Sol Tıkla Program açılıyor, bu özelliği istemezseniz sonunda ''''''''<<< olan satırları silin
    If lParam = WM_LBUTTONUP Then ''''''''<<<
         TheForm.Show ''''''''<<<
         If TheForm.WindowState = vbMinimized Then TheForm.WindowState = TheForm.LastState ''''''''<<<
         TheForm.SetFocus ''''''''<<<
    End If ''''''''<<<

'''''''' Sağ tıkla menu açılıyor
        If lParam = WM_RBUTTONUP Then
            SetForegroundWindow TheForm.hWnd
            TheForm.PopupMenu TheMenu
            If Not (TheForm Is Nothing) Then
                PostMessage TheForm.hWnd, WM_NULL, ByVal 0&, ByVal 0&
            End If
            Exit Function
        End If
    End If

'''''''' Form minimize olursa veya eski haline gelirse görünüm ve menu düzenleniyor
    If Msg = WM_SYSCOMMAND Then
        If wParam = SC_MINIMIZE Then
            TheForm.Hide
            TheForm.SetTrayMenuItems vbMinimized
            Exit Function
        ElseIf wParam = SC_RESTORE Then
            If Not TheForm.Visible Then
                TheForm.Show
                TheForm.SetTrayMenuItems vbNormal
                Exit Function
            End If
        End If
    End If


    NewWindowProc = CallWindowProc(OldWindowProc, hWnd, Msg, wParam, lParam)
End Function

'''''''' Traye icon eklerken çağıracağımız Sub
Public Sub TrayeEkle(frm As Form, mnu As Menu)
    Set TheForm = frm
    Set TheMenu = mnu
    OldWindowProc = SetWindowLong(frm.hWnd, GWL_WNDPROC, AddressOf NewWindowProc)
    With TheData
        .uID = 0
        .hWnd = frm.hWnd
        .cbSize = Len(TheData)
        .hIcon = frm.Icon.Handle
        .uFlags = NIF_ICON
        .uCallbackMessage = TRAY_CALLBACK
        .uFlags = .uFlags Or NIF_MESSAGE
        .cbSize = Len(TheData)
    End With
    Shell_NotifyIcon NIM_ADD, TheData
End Sub

'''''''' Iconu trayden kaldırırken çağıracağımız Sub
Public Sub TraydenAl()
    With TheData
        .uFlags = 0
    End With
    Shell_NotifyIcon NIM_DELETE, TheData
    SetWindowLong TheForm.hWnd, GWL_WNDPROC, OldWindowProc
    Set TheForm = Nothing
End Sub

'''''''' Iconun Balonunu eklerken veya değiştirirken çağıracağımız Sub
Public Sub TrayBalonu(tip As String)
    With TheData
        .szTip = tip & vbNullChar
        .uFlags = NIF_TIP
    End With
    Shell_NotifyIcon NIM_MODIFY, TheData
End Sub

'''''''' Iconu değiştirirken çağıracağımız Sub
Public Sub YeniTrayIcon(pic As Picture)
    If pic.Type <> vbPicTypeIcon Then Exit Sub
    With TheData
        .hIcon = pic.Handle
        .uFlags = NIF_ICON
    End With
    Shell_NotifyIcon NIM_MODIFY, TheData
End Sub


'''''''' Formun içine ise aşağıdaki kodları yazın;

Public Sub SetTrayMenuItems(window_state As Integer)
'''''''' Module tarafından traydeki iconun menusunu düzenlemek için kullanılır
End Sub

'''''''' Şimdi, diyelim ki formumuzun adı Form1 ve icona eklemek istediğimiz menude menuPOP, o halde Traye icon eklemek için form içinde yazmamız gereken kod aşağıdaki gibi olur;
TrayeEkle Form1, Form1.menuPOP
'''''''' Form1 adlı formun iconunu alır ve saatin yanına ekler ve formun menuPOP adlı menusünü mouse tuşu ile icona tıklayınca açılmasını sağlar. (Formunuza icon eklemeyi unutmayın.)

'''''''' iconu kaldırmak için ise aşağıdaki kodu yazmanız gerekli;
TraydenAl
'''''''' Programınızın sorunsuz kapanması için iconu mutlaka kaldırmanız gerekir, bunuda yukarıdaki komutu formun unload olayına yazarak yapabilirsiniz.

'''''''' Mouse ile traydeki iconun üzerine gelince balon çıkmasını ve o balona istediğiniz bilgiyi yazmak isterseniz;
TrayBalonu
'''''''' kullanmalısınız, örneğin balonda tarihi yazdırmak istiyoruz;
TrayBalonu "Tarih: " & Date()
'''''''' yazarsanız, mouse icon üzerine gelince açılan balonda tarih yazacaktır. Siz istediğiniz bilgiyi yazabilirsiniz. Tray balonundaki bilgiyi istediğiniz zaman değiştirebilirsiniz.

'''''''' Traydeki iconu değiştirmek isterseniz;
YeniTrayIcon
'''''''' komutunu kullanmalısınız, örneğin command1 butonunun picture''''''''ına yüklediğimiz iconla değiştirelim;
YeniTrayIcon command1.picture
'''''''' Burada yalnızca icon kullanmaya dikkat edin.
''''''''------------------------------------------------------------
''''''''Şimdi diyelim ki, module''''''''ü hazırladınız ve projenize eklediniz, buyrun bir tane de örnek;
''''''''Formun adı Form1 olsun ve bir menu oluşturup menunun adını menuPOP yapın (captionı değil adını, yani menu hazırladığınız sayfadaki üstten ikinci satıra yazdığınız ve kodlamada kullandığınız adını), 1 adet Timer ve 1 adet button ekleyin, buttonun picture''''''''ına bir icon ekleyin ve sonra aşağıdaki kodları yazın;

Dim a

Private Sub Form_Load ()
Timer1.Interval = 1000
Timer1.Enabled = True
TrayeEkle Form1, Form1.menuPOP '''''''' Traye iconu ekledik
End Sub

Private Sub Form_Unload()
TraydenAl ''''''''Form kapatılırsa iconu kaldırıyoruz
End Sub

Private Sub Timer1_Timer()
TrayBalonu "Saat: " & Time() '''''''' Iconun balonuna saati ekliyoruz
if a = 0 then YeniTrayIcon command1.picture : a = 1 : exit sub ''''''''a sıfırsa iconu command1''''''''in picture''''''''ı ile değiştiriyor
YeniTrayIcon Me.Icon : a = 0 '''''''' a 1 se iconu formun iconu ile değiştiriyoruz
End Sub

'''''''' Başarılar.

leed ut
leedut


Yorumlar                 Yorum Yaz
Bu hazır kod'a ilk yorumu siz yapın!
KATEGORİLER
ASP - 240
ASP.NET - 24
C# - 75
C++ - 174
CGI - 8
DELPHI - 247
FLASH - 49
HTML - 536
PASCAL - 246
PERL - 11
PHP - 160
WML - 9
XML - 2
Copyright © 2002 - 2024 Hazır Kod - Tüm Hakları Saklıdır.
Siteden yararlanırken gizlilik ilkelerini okumanızı tavsiye ederiz.
hazirkod.com bir İSOBİL projesidir.