Проблема с работающим классом

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Kiryusha
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 216
Зарегистрирован: 30.08.2005 (Вт) 10:56
Откуда: УР, Ижевск

Проблема с работающим классом

Сообщение Kiryusha » 10.05.2006 (Ср) 11:02

Вобщем, скачал исходники проги для добавлении иконки в трэй. Состоиит прога из формы и класса. Этот класс фактически все и делает, вот ну я его закинул в свою прогу, все повторил как в той программе, но не работает вызов popupmenu теряюсь в догадках почему. Вобщем там есть вот такая вот процедурка:
Код: Выделить всё

'вызвать ивент
Public Sub CallEvent(X As Single, Y As Single)
   'проверка, было ли действие по окну или по иконке в трее
      If Y Then Exit Sub
     
   'получаем тип действия
      Dim MouseButton As Integer
      MouseButton = (X And &HFF) / Screen.TwipsPerPixelX
   
   'генерируем ивент
      RaiseEvent OnIcon(MouseButton)
     
End Sub


В оригинале программы он работает, а в моей нет. То есть по щелчку мыши в MouseButton не код события, а 0 как будто ничего не произошло. Может я что-то не так сделал?
Судебно-медицинское вскрытие показало, что чукча умер в
результате судебно-медицинского вскрытия.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 10.05.2006 (Ср) 11:11

а тебя тип параметров Single не смущает?
Весь мир матрица, а мы в нем потоки байтов!

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 10.05.2006 (Ср) 11:23

2Кирюша, вот класс который юзаю я, у меня работает, только надо ReleaseCapture сделать там в одном месте, чтоб не тормозил после клика.
2Модераторы, не ругайтесь, что так длинно:
Код: Выделить всё

'*********************************************************************
'*                            TrayIcon                               *
'*             Библиотека для работы с SystemTray                    *
'*-------------------------------------------------------------------*
'
'  Ивенты:
'     OnIcon ( MouseButton as integer )
'                       ; генерируется при действии над иконкой в трее.
'                       ; MouseButton соответствует - Enum TRAYICON_MOUSE_*.
'  Свойства:
'     hWnd (Long)       ; hWnd окна, к которому привязана иконка
'     Icon (Long)       ; указатель на иконку. Иконка должна быть 16 цветная.
'     ToolTipText       ; всплывающий текст
'
'  Методы:
'     Add ( )           ; добавление иконки в трей. Заранее нужно установить все свойства.
'     Modify ( )        ; изменение иконки в трее.
'     Delete ( )        ; удаление иконки из трея
'     CallEvent ( X as single, Y as single )
'                       ; вызывается из Form_MouseDown, ей передаются значения X и Y
'
'---------------------------------------------------------------------
'     Version 0.90 Beta * Copyright (с) А.Щербаков * May 17, 2000
'*********************************************************************
   Option Explicit

'декларация функций Win32API
   Private Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
   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

'константы и структуры Win32API
   Private Const NIF_MESSAGE = &H1
   Private Const NIF_ICON = &H2
   Private Const NIF_TIP = &H4
   Private Const NIM_ADD = &H0
   Private Const NIM_MODIFY = &H1
   Private Const NIM_DELETE = &H2
   Private Const WM_RBUTTONDOWN = &H204
   Private Const WM_NULL = &H0
   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
   Private NID As NOTIFYICONDATA

'---------------------------------------------------------------------

'переменные и структуры модуля
   Private m_hWnd          As Long
   Private m_Icon          As Long
   Private m_ToolTipText   As String
   Public Enum TrayIcon_Mouse
      TRAYICON_MOUSE_NONE = 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

'ивенты
   Public Event OnIcon(MouseButton As Integer)
   

'---------------------------------------------------------------------
'  Свойства

'получить свойство hWnd
Public Property Get hwnd() As Long
      hwnd = m_hWnd
End Property

'присвоить свойство hWnd
Public Property Let hwnd(ByVal NewValue As Long)
      m_hWnd = NewValue
End Property


'получить свойство Icon
Public Property Get Icon() As Long
      Icon = m_Icon
End Property

'присвоить свойство Icon
Public Property Let Icon(ByVal NewValue As Long)
      m_Icon = NewValue
End Property


'получить свойство ToolTipText
Public Property Get ToolTipText() As String
      ToolTipText = m_ToolTipText
End Property

'присвоить свойство ToolTipText
Public Property Let ToolTipText(ByVal NewValue As String)
      m_ToolTipText = NewValue
End Property

'---------------------------------------------------------------------
'  Методы

'добавление иконки в Tray
Public Sub Add()
   Dim ret As Long
     
   'заполняем структуру
      NID.uID = m_hWnd
      NID.hwnd = m_hWnd
      NID.hIcon = m_Icon
      NID.szTip = Left$(m_ToolTipText, 63) & Chr$(0)
      NID.uFlags = NIF_TIP + NIF_MESSAGE + NIF_ICON
      NID.uCallbackMessage = WM_RBUTTONDOWN
      NID.cbSize = Len(NID)
   
   'вызываем функцию API
      ret = Shell_NotifyIcon(NIM_ADD, NID)
     
End Sub

'изменение иконки и ToolTip в Tray
Public Sub Modify()
   Dim ret As Long
   
   'заполняем структурку
      NID.hIcon = m_Icon
      NID.szTip = Left$(m_ToolTipText, 63) & Chr$(0)
      NID.uFlags = NIF_TIP + NIF_ICON
      NID.cbSize = Len(NID)
     
   'вызываем функцию API
      ret = Shell_NotifyIcon(NIM_MODIFY, NID)
     
End Sub

'удаление иконки из Tray
Public Sub Delete()
   Dim ret As Long
   
   'заполняем структурку
      NID.cbSize = Len(NID)
   
   'вызываем функцию API
      ret = Shell_NotifyIcon(NIM_DELETE, NID)
     
End Sub


'вызвать ивент
Public Sub CallEvent(X As Single, Y As Single)
   'проверка, было ли действие по окну или по иконке в трее
      If Y Then Exit Sub
     
   'получаем тип действия
      Dim MouseButton As Integer
      MouseButton = (X And &HFF) / Screen.TwipsPerPixelX
   
   'генерируем ивент
      RaiseEvent OnIcon(MouseButton)
     
End Sub

'вызов всплывающего меню
Public Sub CallPopupMenu(Window As Form, PopMenu As Menu, Optional Flags, Optional X, Optional Y, Optional DefMenu)
     
   'устанавливаем окно
      SetForegroundWindow m_hWnd
     
   'выводим всплывающее меню
      Window.PopupMenu PopMenu, Flags, X, Y, DefMenu
     
   'посылаем сообщение окну
      PostMessage m_hWnd, WM_NULL, 0, 0

End Sub
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Kiryusha
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 216
Зарегистрирован: 30.08.2005 (Вт) 10:56
Откуда: УР, Ижевск

Сообщение Kiryusha » 10.05.2006 (Ср) 14:11

!Viper! не смущает потому что в свойсте Form_MouseDown X и Y тоже сингл

Хакер я именно его и юзаю и у меня он не пашет на моей проге, а на оригнале пашет вот я и не знаю что делать
Судебно-медицинское вскрытие показало, что чукча умер в
результате судебно-медицинского вскрытия.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Проблема с работающим классом

Сообщение Viper » 10.05.2006 (Ср) 14:47

Kiryusha писал(а):
Код: Выделить всё
   'получаем тип действия
      Dim MouseButton As Integer
      MouseButton = (X And &HFF) / Screen.TwipsPerPixelX   
End Sub




странноватое како-то действие для типа Single. Я имею ввиду операцию And.

А в событии MouseDown помимо X и Y еще и Button c Shift имеются. Тип Integer.
Весь мир матрица, а мы в нем потоки байтов!

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 10.05.2006 (Ср) 14:51

Не нужно на это обращать внимание. Проблема в другом. У меня этот класс работает (да хотябы см. Наши проекты->I-Net Money Counter)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Kiryusha
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 216
Зарегистрирован: 30.08.2005 (Вт) 10:56
Откуда: УР, Ижевск

Сообщение Kiryusha » 11.05.2006 (Чт) 15:29

Дк я еще раз повторяю! На скаченной проге этот класс пашет(!) иначе зачем бы я его вообще совал в свой проект, просто когда тот в моей проге, то на иксе всегда 0 тоесть щелкаю я не щелкаю всегда 0, а сегодня вот провел мышкой по верху формы, просто так, и тут раз и сработал этот класс! Я вообще в шоке, из-за чего может быть такая херь? (Кстати может это потому что курсор просто залез в форме по координатам скажем (5,0) что соответсвует например нажатию правой кнопки?)
Судебно-медицинское вскрытие показало, что чукча умер в
результате судебно-медицинского вскрытия.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.05.2006 (Чт) 16:23

Координаты выстави форме в пиксели.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Kiryusha
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 216
Зарегистрирован: 30.08.2005 (Вт) 10:56
Откуда: УР, Ижевск

Сообщение Kiryusha » 12.05.2006 (Пт) 10:19

да там итак в форме я не по твипам а по пикселям работаю
Судебно-медицинское вскрытие показало, что чукча умер в
результате судебно-медицинского вскрытия.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 12.05.2006 (Пт) 13:04

1) А ты класс копи-пастишь или вставляешь в проект готовый (из сущ. CLS файла)?

2) Форма обычная или SuperGiper-навороченная?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Kiryusha
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 216
Зарегистрирован: 30.08.2005 (Вт) 10:56
Откуда: УР, Ижевск

Сообщение Kiryusha » 12.05.2006 (Пт) 14:34

1) Я вставляю готовый класс (Добавить файл...)

2) Что ты имеешь ввиду поду супер навороченой и причем тут вообще форма?
Судебно-медицинское вскрытие показало, что чукча умер в
результате судебно-медицинского вскрытия.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 12.05.2006 (Пт) 14:41

Супер навороченная прога: с регионами, прозрачностью колоркеем, и субклс (т.е. с подменённым WndProc) и прочая дрянь на форме...


СОВЕТ: Сделай новую форму и опробуй класс на ней... Если класс не будет работать и с новой формой, то уже совсем др. дело.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Kiryusha
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 216
Зарегистрирован: 30.08.2005 (Вт) 10:56
Откуда: УР, Ижевск

Сообщение Kiryusha » 12.05.2006 (Пт) 15:24

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

Kiryusha
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 216
Зарегистрирован: 30.08.2005 (Вт) 10:56
Откуда: УР, Ижевск

Сообщение Kiryusha » 14.05.2006 (Вс) 17:17

Попробовал с другой прогой класс работает, дк почему же тогда не работает с моей прогой? Какие еще варианты?
Судебно-медицинское вскрытие показало, что чукча умер в
результате судебно-медицинского вскрытия.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 14.05.2006 (Вс) 17:45

Проджект в студию либо сам методом исключения находи в чём причина...
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Kiryusha
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 216
Зарегистрирован: 30.08.2005 (Вт) 10:56
Откуда: УР, Ижевск

Сообщение Kiryusha » 14.05.2006 (Вс) 18:03

блин все народ я щас сдохну или меня в дурку заберут, вобщем стоило мне в вот этот код (который работал):
Код: Выделить всё
Private Sub cTray_OnIcon(MouseButton As Integer)
    If MouseButton = TRAYICON_MOUSE_LEFTUP Then Form1.Show
End Sub


вставить несколько строк и получить вот это:
Код: Выделить всё
Private Sub cTray_OnIcon(MouseButton As Integer)
    Dim koord As POINTAPI

    If MouseButton = TRAYICON_MOUSE_LEFTUP Then
        Form1.Show
    End If
    If MouseButton = trayicon_mouse_rightup Then
        GetCursorPos koord
        cTray.CallPopupMenu Form1, Me.mnuFile, , koord.x * Screen.twipsPerPixelX, koord.y * Screen.TwipsPerPixelY
    End If
End Sub


Как класс опять перестал работать, причем когда я удаляю новые строки, он все равно не работает. А код кинуть я не могу :( коммерческая тайна.
Судебно-медицинское вскрытие показало, что чукча умер в
результате судебно-медицинского вскрытия.


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

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

Сейчас этот форум просматривают: AhrefsBot, SemrushBot и гости: 9

    TopList