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
'где-то в районе 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
anian писал(а):Проблема та же...убрал я таймер, отрисовку всего и вся...просто хочу курсор поменять номально - не дает, сабака сутулая...может у меня в генах ошибка?
Стопудово. Нет бы, как все люди, pBox.MousePointer менять, - полез в API
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
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 писал(а): … и еще перед сменой вида курсора проверяй, может он у тебя уже и так нужного тебе вида, то зачем его опять менять
SHURUP писал(а):Если это делать - то мерцать не должно.Konst_One писал(а): … и еще перед сменой вида курсора проверяй, может он у тебя уже и так нужного тебе вида, то зачем его опять менять
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
пока мыша не двигается - держит форму, как двигать начинаешь - мерцает впремешку с обычным курсором-указателем
Kovu писал(а):А ты MSDN читаешь? Там для Умственно Одарённых(у.о.) написано что в VB так курсор менять нельзя
Сейчас этот форум просматривают: Yandex-бот и гости: 174