Не изменяется форма курсора

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
anian
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 116
Зарегистрирован: 02.10.2002 (Ср) 12:05
Откуда: /dev/null

Не изменяется форма курсора

Сообщение anian » 18.06.2004 (Пт) 15:10

Суть такая: на форме есть пикчербокс, в нем всякие разные штуки рисуются апишными функциями. По таймеру определяютмя координаты мыша над пикчером, и ежели они лежат в одной области, то курсор мыша должен изменить форму (на size NS), ежели в другой - область меняет цвет и так далее...Но: курсор форму меняет, да тока на какую-то долю секунды, потом опять становится стандартным...немного мыша двинул - опять изменил форму ненадолго и так без конца
Трез-вы-ми мы не сда-дим-сииии!!! Ураааааа!!!

Oxygen
Белая и пушистая
Белая и пушистая
Аватара пользователя
 
Сообщения: 1314
Зарегистрирован: 15.07.2003 (Вт) 7:14
Откуда: Москва

Сообщение Oxygen » 18.06.2004 (Пт) 17:17

А можно код в студию? Так не совсем понятно.
Процедура клонирования завершена.
Коррекция имплантированного сознания соответствует принятым алгоритмам.
Уникальный идентификатор скопирован в чип временного паспорта.
Активация прав гражданина ожидается в течение 24 часов

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 18.06.2004 (Пт) 17:44

Private Sub Timer1.Timer()
..........
полюбому ошибка тута :wink:
..........
End

anian
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 116
Зарегистрирован: 02.10.2002 (Ср) 12:05
Откуда: /dev/null

Сообщение anian » 19.06.2004 (Сб) 8:09

Да ради Бога...вот этот кусочек:
Код: Выделить всё
Private Sub tmrHeader_Timer()
    Dim j&, hBr&
   
'mTCols() - свойства и координаты областей
'mTSplits() as RECT - области-разделители, где курсор должен менять форму

    GetCursorPos ptM
    ScreenToClient UserControl.hwnd, ptM
   
    For j = 1 To m_iCols
   
    hBr = CreateSolidBrush(TranslateColor(vbWhite))
    FillRect hdc, mTSplits(j), hBr
    DeleteObject hBr
   
    If PtInRect(mTCols(j).tCR, ptM.x, ptM.y) <> 0 Then
        MousePointer = 0
        SetTextColor hdc, TranslateColor(vbHighlight)
        pDrawHText mTCols(j)
    ElseIf PtInRect(mTSplits(j), ptM.x, ptM.y) <> 0 Then
        MousePointer = 5
    Else
        MousePointer = 0
        SetTextColor hdc, TranslateColor(vbButtonText)
        pDrawHText mTCols(j)
    End If
   
    Next
    Refresh 'можно и не рефрешь...погоды не делает
End Sub
Трез-вы-ми мы не сда-дим-сииии!!! Ураааааа!!!

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 21.06.2004 (Пн) 11:24

Хм. Я бы вместо таймера использовал MouseMove(). Туда и координаты мыши передаются...

anian
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 116
Зарегистрирован: 02.10.2002 (Ср) 12:05
Откуда: /dev/null

Сообщение anian » 24.06.2005 (Пт) 13:57

Мда-с...год прошел...вспомнил я про это дело, решил до логического конца довести...

Проблема та же...убрал я таймер, отрисовку всего и вся...просто хочу курсор поменять номально - не дает, сабака сутулая...может у меня в генах ошибка? :)

Код: Выделить всё
'где-то в районе Form_Load
...
Dim bCur as Boolean
bCur = False
...
'пикчер бокс
Private Sub pBox_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
               
        If Not bCur Then
            hCurs = LoadCursor(0, IDC_SIZEWE)
            bCur = True
            'SetCursor hCurs - если здесь стоит, то курсор форму вообще не меняет
        End If
            SetCursor hCurs
       
End Sub

пока мыша не двигается - держит форму, как двигать начинаешь - мерцает впремешку с обычным курсором-указателем
Трез-вы-ми мы не сда-дим-сииии!!! Ураааааа!!!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.06.2005 (Пт) 14:08

anian писал(а):Проблема та же...убрал я таймер, отрисовку всего и вся...просто хочу курсор поменять номально - не дает, сабака сутулая...может у меня в генах ошибка? :)

Стопудово. Нет бы, как все люди, pBox.MousePointer менять, - полез в API :roll:
Изображение

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 24.06.2005 (Пт) 15:14

если у тебя слишком тонкая граница, где курсор должен меняться, то задай допуск +-1или2px на его изменение и еще перед сменой вида курсора проверяй, может он у тебя уже и так нужного тебе вида, то зачем его опять менять :D

anian
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 116
Зарегистрирован: 02.10.2002 (Ср) 12:05
Откуда: /dev/null

Сообщение anian » 24.06.2005 (Пт) 16:13

Блин, ребяты...это минимальный код, упрощенный до предела...пусть хотя бы при попадании в область пикчера форму меняет...

Стопудово. Нет бы, как все люди, pBox.MousePointer менять, - полез в API :roll:

В этом все и дело...меняться он должен лишь в определенных облястях пикчера...

Вставьте код в форму, киньте пикчер с соответствующим именем, запустите и все увидите...
Трез-вы-ми мы не сда-дим-сииии!!! Ураааааа!!!

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 24.06.2005 (Пт) 16:23

просто поставь picturebox с именем picture1 на форму и вставь туда код:

Код: Выделить всё
Option Explicit

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Picture1.Line (50, 50)-(50, 100)
    Picture1.Line (50, 100)-(100, 100)
    Picture1.Line (100, 100)-(100, 50)
    Picture1.Line (100, 50)-(50, 50)
   
    If X > 50 And X < 100 And Y > 50 And Y < 100 Then
        Picture1.MousePointer = 3
    Else
        Picture1.MousePointer = 0
    End If
   
End Sub



разве не просто?
ХЎ

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

Сообщение GSerg » 24.06.2005 (Пт) 16:26

Не просто.

Непросто понять, что такое 0 и что такое 3. Есть, к примеру, vbDefault, vbIbeam... Но это так, к слову...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 24.06.2005 (Пт) 16:59

Код: Выделить всё
Option Explicit

Private Const limit = 5
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Caption = setSizeCursor(Picture1, X, Y)
End Sub

Public Function setSizeCursor(pb As PictureBox, X As Single, Y As Single) As Byte
Dim Xc As Byte, Yc As Byte
Dim Cur As MousePointerConstants
    Select Case X
        Case 0 To limit: Xc = 1
        Case pb.ScaleWidth - limit - 1 To pb.ScaleWidth: Xc = 4
    End Select
    Select Case Y
        Case 0 To limit: Yc = 2
        Case pb.ScaleHeight - limit - 1 To pb.ScaleHeight: Yc = 8
    End Select
    Select Case (Xc Or Yc)
        Case 1, 4: Cur = vbSizeWE
        Case 2, 8: Cur = vbSizeNS
        Case 3, 12: Cur = vbSizeNWSE
        Case 6, 9: Cur = vbSizeNESW
    End Select
    If Not (pb.MousePointer = Cur) Then pb.MousePointer = Cur
    setSizeCursor = (Xc Or Yc)
End Function

' функция setSizeCursor возвращает значение, соотв. стороне в которой курсор
' (это может быть полезно, если собираешься в дальнейшем изменять размеры пикчурбокса перетаскиванием за край)

' 3     2      6
'   \ - + - /
'   |       |
' 1 +   0   + 4
'   |       |
'   / - + - \
' 9     8     12
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 24.06.2005 (Пт) 17:04

SHURUP
молодец :!:
воплотил как раз то, о чем я ранее написал

anian
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 116
Зарегистрирован: 02.10.2002 (Ср) 12:05
Откуда: /dev/null

Сообщение anian » 24.06.2005 (Пт) 17:29

Вариант с таймером и MousePointer'ом весьма хорош, учитывая малую область "горячего квадрата"...почти не мерцает...а если область больше, то финиш...а таймер должен быть _обязательно_...
Трез-вы-ми мы не сда-дим-сииии!!! Ураааааа!!!

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 24.06.2005 (Пт) 18:07

Konst_One писал(а): … и еще перед сменой вида курсора проверяй, может он у тебя уже и так нужного тебе вида, то зачем его опять менять :D
:!: :!: :!: Если это делать - то мерцать не должно.
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

anian
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 116
Зарегистрирован: 02.10.2002 (Ср) 12:05
Откуда: /dev/null

Сообщение anian » 24.06.2005 (Пт) 18:12

to SHURUP:
Блин, я об этом еще и не заикался...так, в планах было...Спасибо!
Трез-вы-ми мы не сда-дим-сииии!!! Ураааааа!!!

anian
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 116
Зарегистрирован: 02.10.2002 (Ср) 12:05
Откуда: /dev/null

Сообщение anian » 24.06.2005 (Пт) 18:16

SHURUP писал(а):
Konst_One писал(а): … и еще перед сменой вида курсора проверяй, может он у тебя уже и так нужного тебе вида, то зачем его опять менять :D
:!: :!: :!: Если это делать - то мерцать не должно.


А как же...проверка первым делом...тут даже с моими генами все понятно :lol:
Трез-вы-ми мы не сда-дим-сииии!!! Ураааааа!!!

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 24.06.2005 (Пт) 19:34

anian писал(а):Мда-с...год прошел...вспомнил я про это дело, решил до логического конца довести...

Проблема та же...убрал я таймер, отрисовку всего и вся...просто хочу курсор поменять номально - не дает, сабака сутулая...может у меня в генах ошибка? :)

Код: Выделить всё
'где-то в районе Form_Load
...
Dim bCur as Boolean
bCur = False
...
'пикчер бокс
Private Sub pBox_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
               
        If Not bCur Then
            hCurs = LoadCursor(0, IDC_SIZEWE)
            bCur = True
            'SetCursor hCurs - если здесь стоит, то курсор форму вообще не меняет
        End If
            SetCursor hCurs
       
End Sub

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

А ты MSDN читаешь? Там для Умственно Одарённых(у.о.) написано что в VB так курсор менять нельзя :!:
Если всё делать своими ручками, они скоро отвалятся !

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.06.2005 (Пт) 20:04

Kovu, няп - проблема уже решена...
Изображение

anian
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 116
Зарегистрирован: 02.10.2002 (Ср) 12:05
Откуда: /dev/null

Сообщение anian » 25.06.2005 (Сб) 11:44

Kovu писал(а):А ты MSDN читаешь? Там для Умственно Одарённых(у.о.) написано что в VB так курсор менять нельзя :!:


Линку на статью об этой фиче дай, пожалуйста...а то пока я летающих бегемотов своими глазами не увижу, я в них не поверю... :lol:
Трез-вы-ми мы не сда-дим-сииии!!! Ураааааа!!!


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

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

Сейчас этот форум просматривают: Majestic-12 [Bot], SemrushBot и гости: 122

    TopList  
cron