Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: System Tray Добавлено: 17.03.06 14:22  

Автор вопроса:  Fobos
У меня такой вопрос...
Сделать чтобы прога сворачивалась в трей я могу...
И попап меню оформить тоже можно...
Вопрос не об этом )
Проблема следующая:
Если форму с которой порисходят действия растянуть вширь и медленно курсор вести вправо, то открывается попап меню трея... или мсгбокс (смотря как реагирует иконка в трее на движение или щелчок мыши)
Как будто проведена вертикальная невидимая линия на форме, выход за которую воспринимается как щелчок на иконку в трее...
Сколько разных кодов я перепробовал, такая проблема была всегда...
Может это можно как нибудь исправить ?

Ответить

  Ответы Всего ответов: 15  

Номер ответа: 1
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #1
Добавлено: 17.03.06 14:29
У меня такой вопрос...
Сделать чтобы прога сворачивалась в трей я могу...
И попап меню оформить тоже можно...
Вопрос не об этом )

:)

Кто тебя знает.. код выкладывай, это не распространённая проблема.

Ответить

Номер ответа: 2
Автор ответа:
 SL



ICQ: 277007669 

Вопросов: 10
Ответов: 86
 Профиль | | #2 Добавлено: 17.03.06 14:41
код кнопки в трее передаётся через x (нижнее слово lParam), так что иногда случайно совпадает

Ответить

Номер ответа: 3
Автор ответа:
 SL



ICQ: 277007669 

Вопросов: 10
Ответов: 86
 Профиль | | #3 Добавлено: 17.03.06 14:42
ты прячь енту форму, а показывай другую....

Ответить

Номер ответа: 4
Автор ответа:
 SL



ICQ: 277007669 

Вопросов: 10
Ответов: 86
 Профиль | | #4 Добавлено: 17.03.06 14:43
или не делай форму больше определённых размеров...

Ответить

Номер ответа: 5
Автор ответа:
 Fobos



Вопросов: 3
Ответов: 5
 Профиль | | #5 Добавлено: 17.03.06 15:17
Случайно заметил этот баг, но он у меня получался всегда...
Просто он не всегда заметен...
У меня главное окошко программы большое, поэтмоу и заметил...
SL, стопудов... так и сделаю )
Че ж я сам не додумался то )))

Ответить

Номер ответа: 6
Автор ответа:
 Fobos



Вопросов: 3
Ответов: 5
 Профиль | | #6 Добавлено: 17.03.06 15:41
Со второй формой конечно нет этого косяка, но хотелось бы не обойти ошибку а исправить ее...
Вот собственно код:
В модуле:Option Explicit

Public Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean

Public Const NIM_ADD = &H0
Public Const NIM_MODIFY = &H1
Public Const NIM_DELETE = &H2
Public Const NIF_MESSAGE = &H1
Public Const NIF_ICON = &H2
Public Const NIF_TIP = &H4
Public Const WM_MOUSEMOVE = &H200
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_LBUTTONUP = &H202
Public Const WM_LBUTTONDBLCLK = &H203
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_RBUTTONUP = &H205
Public Const WM_RBUTTONDBLCLK = &H206
Public Const HWND_TOPMOST = -1

Public nid As NOTIFYICONDATA

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 Sub Form_Load()
Me.Show
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim Sys As Long
Sys = x / Screen.TwipsPerPixelX
Select Case Sys
Case WM_LBUTTONDBLCLK:
WindowState = vbNormal
Me.Show
Case WM_RBUTTONDOWN:
Me.PopupMenu mnuSystray
End Select
End Sub

Private Sub Form_Resize()
If WindowState = vbMinimized Then
Me.Hide
Me.Refresh
With nid
.cbSize = Len(nid)
.hwnd = Me.hwnd
.uId = vbNull
.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
.uCallBackMessage = WM_MOUSEMOVE
.hIcon = Me.Icon
.szTip = Me.Caption & vbNullChar
End With
Shell_NotifyIcon NIM_ADD, nid
Else
Shell_NotifyIcon NIM_DELETE, nid
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
Shell_NotifyIcon NIM_DELETE, nid
End
End Sub
Private Sub mnuexit_Click()
Unload Me
End Sub
Private Sub mnuRestore_Click()
WindowState = vbNormal
Me.Show
End Sub

Ответить

Номер ответа: 7
Автор ответа:
 Fobos



Вопросов: 3
Ответов: 5
 Профиль | | #7 Добавлено: 17.03.06 15:47
Тем более если я код буду писать в одной форме и сделаю ее невидимой а сворачивать буду вторую, то ничего происходить не будет...
Я не подумал и сразу согласился с SL

Ответить

Номер ответа: 8
Автор ответа:
 SL



ICQ: 277007669 

Вопросов: 10
Ответов: 86
 Профиль | | #8 Добавлено: 17.03.06 16:19
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim Sys As Long
Sys = x / Screen.TwipsPerPixelX
If Not Me.Visible Then
Select Case Sys
Case WM_LBUTTONDBLCLK:
WindowState = vbNormal
Me.Show
Case WM_RBUTTONDOWN:
Me.PopupMenu mnuSystray
End Select
End If
End Sub

Ответить

Номер ответа: 9
Автор ответа:
 SL



ICQ: 277007669 

Вопросов: 10
Ответов: 86
 Профиль | | #9 Добавлено: 17.03.06 16:22
а про две формы, то всё будет работать - надо правильно сделать))) :)

Ответить

Номер ответа: 10
Автор ответа:
 Fobos



Вопросов: 3
Ответов: 5
 Профиль | | #10 Добавлено: 17.03.06 16:22
Во, другое дело...
Логично было бы это дописать... но ведь главное придумать идею )
Спасибо в общем.. вопрос исчерпан

Ответить

Номер ответа: 11
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #11 Добавлено: 17.03.06 23:12
2 All: че паритесь???
.hwnd = Me.hwnd

Пишите хэндл какого-нить picturebox и ловите Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single) соответственно в Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)

Ответить

Номер ответа: 12
Автор ответа:
 Fever



Вопросов: 60
Ответов: 808
 Профиль | | #12 Добавлено: 18.03.06 16:13
У тебя пикчер с невидимой гранью находится за гранью формы. На него передаются ивенты от иконки. Щелчок на нем вызывает те же события.
sacred Phoenix, он так и сделал. Так многие ловятся.

Ответить

Номер ответа: 13
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #13 Добавлено: 18.03.06 21:05
sacred Phoenix, он так и сделал. Так многие ловятся.
В смысле?

У тебя пикчер с невидимой гранью находится за гранью формы. На него передаются ивенты от иконки. Щелчок на нем вызывает те же события.
Х. з. почему, но, прочитав 3 раза эту фразу, так и не понял, что ты имел в виду :)

Ответить

Номер ответа: 14
Автор ответа:
 Fever



Вопросов: 60
Ответов: 808
 Профиль | | #14 Добавлено: 20.03.06 10:15
Ну, есть пикчер. Его не видно(BorderStyle=0? BackColor=ButtonFace). А еще он за границей формы. На него передаются события с иконки(MouseDown,Move,Up). Он случайно по нем щелкает-ловятся все равно те же события. Ну или он передает прям на форму-когда она маленькая, щелкнуть негде, а при ресайзе появляется свободное место. Здесь все примеры этим страдают.(AfClock)

Ответить

Номер ответа: 15
Автор ответа:
 Victor



ICQ: 345743490 

Вопросов: 42
Ответов: 385
 Web-сайт: vt-dbnz.narod.ru
 Профиль | | #15
Добавлено: 20.03.06 19:27
Прще воспользоваться контролом SysTray от Microsoft. Он у меня нашелся на Disk3 к VS6.0. Там у меня еще сервиспак третий, агент и еще изрядно всякой фигни. Он в исходных кодах, никаких OCX. И мне нравится: просто, удобно, и глюков еще не замечал.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам