Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Изменение курсора мыши

62K
27 августа 2010 года
chitor
6 / / 23.08.2010
Полазил везде где тока можно а ответа так не нашёл...неужели нельзя никак отследить изменение курсора мыши за пределами формы? у меня кое-что получилось но эт работает тока в среде разработке, или как там она называется...а в винде не пашет, не знаю почему...

Вот такой код:

Код:
Private Declare Function CopyCursor Lib "user32" Alias "CopyIcon" (ByVal hcur As Long) As Long
Private Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA" (ByVal lpMyFileName As String) As Long
Private Declare Function GetCursor Lib "user32" () As Long
Private Declare Function SetSystemCursor Lib "user32" (ByVal hcur As Long, ByVal id As Long) As Long
Private NewCur, OldCur As Long
Dim a

Private Sub Form_Load()
NewCur = LoadCursorFromFile("c:\banana.ani")
OldCur = GetCursor()
OldCur = CopyCursor(OldCur)
SetSystemCursor NewCur, 32512
a = GetCursor()
End Sub

Private Sub Form_Unload(Cancel As Integer)
If OldCur <> 0 Then SetSystemCursor OldCur, 32512
End Sub

Private Sub Timer1_Timer()
If GetCursor <> a Then MsgBox "Change"
End Sub


Может кто-то что подскажет? хотя бы куда копать...
327
30 августа 2010 года
UserNet2008
748 / / 03.04.2010
Цитата: chitor
Может кто-то что подскажет? хотя бы куда копать...



Как изменить курсор

Для версии VB2010 у меня все работает, когда курсор над формой он становиться ani, за пределами формы system cursor

P.S если будут проблемы отпишитесь доведем до ума вместе

Public Class Form1
Private Declare Function CopyCursor Lib "user32" Alias "CopyIcon" (ByVal hcur As Integer) As Integer
Private Declare Function GetCursor Lib "user32" () As Integer
Private Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As Integer
Private Declare Function SetSystemCursor Lib "user32" (ByVal hcur As Integer, ByVal id As Integer) As Integer

Private Const OCR_NORMAL = 32512
Dim hCursor As Integer, hOldCursor As Integer

Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
'движение мыши над Формой
If hCursor = 0 Then
Dim lRet As Integer
'укажите правильную директорию для курсора
hCursor = LoadCursorFromFile("C:\windows\cursors\hourglas.ani")
If hCursor Then
lRet = GetCursor()
hOldCursor = CopyCursor(lRet)
'Новый курсор
lRet = SetSystemCursor(hCursor, OCR_NORMAL)
End If
End If
End Sub

Private Sub Form1_MouseLeave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.MouseLeave
'движение мыши за Формой
Dim lRet As Integer
If hCursor Then
'Востановить системный курсор
lRet = SetSystemCursor(hOldCursor, OCR_NORMAL)
End If
hCursor = 0

End Sub

Private Sub Form1_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed
'при закрытии формы
Dim lRet As Integer
If hCursor Then
'Востановить системный курсор
lRet = SetSystemCursor(hOldCursor, OCR_NORMAL)
End If
hCursor = 0
End Sub
End Class

62K
30 августа 2010 года
chitor
6 / / 23.08.2010
ну после небольшой адаптации кода под шестерку, всё равно не заработало...завтра попробую поставить десятку) в глаза её не видел) хоть посмотрю как там)
а вообще мне кажется что правильней будет отлавливать сообщение WM_SETCURSOR которое посылает винда активному окну...ну то есть поставить что-то типа хука, который бы ждал изменение курсора...единственное что по-моему в этом сообщении тока координаты передаются...а сам значок курсора я так и не допер где( уже неделю втыкаю в мсдн)
327
30 августа 2010 года
UserNet2008
748 / / 03.04.2010
Цитата: chitor
Для 6-ки



Это только для 6_ки
Поменяйте везде тип Integer на Long

Как ругается 6_ка , че ей не нравиться ?

327
30 августа 2010 года
UserNet2008
748 / / 03.04.2010
срочно переходите на vb2010 expres можно без денег скачать у Била
Зашел на 6_ку ну не в обиду просто отстой , хотя 12 лет назад это был прорыв технологий

P.S Хотел написать код на 6_ке как открыл так и закрыл. Могу предложить код на 6_ке "ПрЮвет Мир" . Хотя VB2010 тоже не так гладко

Единственное , что 6_ке нормально шли API ФУНКЦИИ

[COLOR="Teal"]правильней будет отлавливать сообщение WM_SETCURSOR которое посылает винда[/COLOR]

Думаю ,что не Виндовоз должен думать, а сам объект(по принципу каждый за себя) так как у каждого объекта есть манипулятор
62K
31 августа 2010 года
chitor
6 / / 23.08.2010
сейчас как раз ставлю девятку) если заработает то нужно будет как-то впихнуть это в код шестерки, потому что основной код софтины написан на ней(
если тока скомпилить и запускать оттуда эту экзешку)
62K
31 августа 2010 года
chitor
6 / / 23.08.2010
таак...у меня вообще почему-то курсор меняется тока на форме...это не совсем то что нужно...
мне нужно не менять курсор, а отследить изменение системного курсора, причем когда форма свернута...вот если бы была такая функция типа GetSystemCursor, тада всё понятно бы было, а без неё мне на ум приходит тока отлавливать это сообщение...
я уже знаю как отловить нажатие левой или правой кнопки мыши, а вот изменение курсора пока не знаю(
327
31 августа 2010 года
UserNet2008
748 / / 03.04.2010
Не совсем понял *отследить изменение системного курсора, причем когда форма свернута...*
в моем коде все что за пределами формы это системный курсор
А если добавить следующий код когда форма теряет фокус

Private Sub Form1_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.LostFocus

Me.Text = "LOstFocus"

End Sub

P.S
Visual Basic (Declaration)
Function GetSystemCursor (context As Control ) As Cursor

_*http://docs.yworks.com/yfilessilverlight/html/M_yWorks_Canvas_ICanvasCursor_GetSystemCursor.htm
62K
31 августа 2010 года
chitor
6 / / 23.08.2010
ух-ты) а какая там библиотека должна быть? user32.dll не подходит(
мне вот как раз и нужно отследить изменение системного курсора, форму можно вообще скрыть и никому не показывать))
62K
31 августа 2010 года
chitor
6 / / 23.08.2010
А, и вообще это по-моему тока для силверлайта, там наверно какой-то особый бейсик(
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог