Mouse Move на иконке в трее

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Alex_2005
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 242
Зарегистрирован: 07.04.2005 (Чт) 17:09
Откуда: Germany, Baden-Wurttemberg, Bietigheim-Bissingen

Mouse Move на иконке в трее

Сообщение Alex_2005 » 26.01.2006 (Чт) 13:34

Как мне отловить Mouse Move на иконке в трее??
Guten Morgen! А если не Guten, то тогда это и не Morgen...

Gigahard
Бывалый
Бывалый
 
Сообщения: 253
Зарегистрирован: 24.07.2002 (Ср) 11:15
Откуда: Russia

Сообщение Gigahard » 26.01.2006 (Чт) 14:44

По событию MouseMove.

Код: Выделить всё
Private Sub form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
X = X / Screen.TwipsPerPixelX

Select Case X
Case WM_LBUTTONDOWN
Caption = "Left Click"
Case WM_RBUTTONDOWN
Caption = "Right Click"
Case WM_MOUSEMOVE
Caption = "Move"
Case WM_LBUTTONDBLCLK
Caption = "Double Click"
End Select
End Sub
Старый глюк лучше новых двух!

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 26.01.2006 (Чт) 14:57

Зависит от типа NOTIFYICONDATA. Если такой:
Код: Выделить всё
Private 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

то как написал Gigahard
Если такой:
Код: Выделить всё
Private Type NOTIFYICONDATA
  cbSize As Long
  hwnd As Long
  uID As Long
  uFlags As Long
  uCallbackMessage As Long
  hIcon As Long
  szTip As String * 128
  dwState As Long
  dwStateMask As Long
  szInfo As String * 256
  uTimeoutAndVersion As Long
  szInfoTitle As String * 64
  dwInfoFlags As Long
  guidItem As GUID
End Type

то при инициализации трея нужно .uCallbackMessage = WM_RBUTTONDOWN и
Код: Выделить всё
Private Enum TrayIcon_Mouse
    TRAYICON_MOUSE_MOVE = 0
    TRAYICON_MOUSE_LEFTDOWN = 1
    TRAYICON_MOUSE_LEFTUP = 2
    TRAYICON_MOUSE_LEFTDBLCLICK = 3
    TRAYICON_MOUSE_RIGHTDOWN = 4
    TRAYICON_MOUSE_RIGHTUP = 5
    TRAYICON_MOUSE_RIGHTDBLCLICK = 6
End Enum

Private Sub lForm_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Select Case (X And &HFF) / Screen.TwipsPerPixelX
        Case TRAYICON_MOUSE_LEFTDBLCLICK
            RaiseEvent DblClick(1)
        Case TRAYICON_MOUSE_LEFTDOWN
            RaiseEvent MouseDown(1)
        Case TRAYICON_MOUSE_LEFTUP
            RaiseEvent MouseUp(1)
        Case TRAYICON_MOUSE_RIGHTDBLCLICK
            RaiseEvent DblClick(2)
        Case TRAYICON_MOUSE_RIGHTDOWN
            RaiseEvent MouseDown(2)
        Case TRAYICON_MOUSE_RIGHTUP
            RaiseEvent MouseUp(2)
        Case TRAYICON_MOUSE_MOVE
            RaiseEvent MouseMove
    End Select
End Sub
Лучший способ понять что-то самому — объяснить это другому.

Gigahard
Бывалый
Бывалый
 
Сообщения: 253
Зарегистрирован: 24.07.2002 (Ср) 11:15
Откуда: Russia

Сообщение Gigahard » 26.01.2006 (Чт) 15:24

Да вообще без разницы к чему привязывать обработку мыши... Можно и к WM_MOUSEMOVE и к WM_RBUTTONDOWN и к WM_LBUTTONDOWN.

Но WM_MOUSEMOVE предпочтительней, т.к. не возникает мелких глючков, как в случае привязки к событиям обработки кликов.

Просто потом в коде формы нужно поставить соответствующие процедуры обработки... Если используем WM_MOUSEMOVE то обработчик нужно привязывать к событию формы MouseMove, а если обработку Callback привязываем к событию нажатия кнопки, то тот же код обработки нужно помещать в событие формы MouseDown...

от NOTIFYICONDATA это не зависит. Просто в одном случае пишется сокращенный вариант структуры, а во втором полный.
Точнее новые параметры добавлены в новой версии структуры... Не знаю прокатит ли такая структура скажем под 98ми...
Старый глюк лучше новых двух!

Alex_2005
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 242
Зарегистрирован: 07.04.2005 (Чт) 17:09
Откуда: Germany, Baden-Wurttemberg, Bietigheim-Bissingen

Сообщение Alex_2005 » 26.01.2006 (Чт) 17:15

получается, что событие трея привязывается к форме? Если так, то это не подходит, так как программа не имеет форму.
Guten Morgen! А если не Guten, то тогда это и не Morgen...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 26.01.2006 (Чт) 17:22

Без окна ты и значка в трее не создашь.
Lasciate ogni speranza, voi ch'entrate.

Gigahard
Бывалый
Бывалый
 
Сообщения: 253
Зарегистрирован: 24.07.2002 (Ср) 11:15
Откуда: Russia

Сообщение Gigahard » 26.01.2006 (Чт) 18:21

А me.hide сделать не судьба? :roll:
Старый глюк лучше новых двух!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 100

    TopList