Добрый день! Балуюсь. Хотел попробовать сделать управляемую штуку - типа змейки чтоли. Получилось то что вышло (в прикреплённом файле)
[vba]
Код
Private cancel1 As Boolean Private Up2 As Boolean Private Down2 As Boolean Private Left2 As Boolean Private Right2 As Boolean Private n1 As Long, n2 As Long, n As Long, n11 As Long, n22 As Long Private i As Long, j As Long Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer Sub Zmeya2() Right2 = True n1 = 1 n2 = 1 i = 2 j = 1 cancel1 = True Time1 = Timer Do While cancel1 DoEvents Up1 = GetKeyState(&H26) Down1 = GetKeyState(&H28) Left1 = GetKeyState(&H25) Right1 = GetKeyState(&H27) If Timer - Time1 > 0.7 Then Time1 = Timer Call func2 '(n1, n2, i, j) Cells(i, j).Interior.Pattern = xlNone j = n11 i = n22 If j = 10 Or j = 1 Then n1 = -n1 End If If i = 10 Or i = 1 Then n2 = -n2 End If Cells(i, j).Interior.Color = 65535 If Up1 < 0 Then Up2 = True Down2 = False Left2 = False Right2 = False End If If Down1 < 0 Then Down2 = True Up2 = False Left2 = False Right2 = False End If If Left1 < 0 Then Left2 = True Down2 = False Up2 = False Right2 = False End If If Right1 < 0 Then Right2 = True Down2 = False Left2 = False Up2 = False End If End If Loop Range(Cells(1, 1), Cells(10, 10)).Interior.Pattern = xlNone End Sub Sub func2() '(a, b, c, d) If Up2 = True Then n11 = j n22 = i - n2 End If If Left2 = True Then n11 = j - n1 n22 = i End If If Right2 = True Then n11 = j + n1 n22 = i End If If Down2 = True Then n11 = j n22 = i + n2 End If End Sub Sub Canc2() cancel1 = False End Sub
[/vba]
Из-за того, что проверка нажатия клавиш находится внутри цикла с другими процессами, получается, что жать клавишу надо секунду - две чтобы квадратик сменил направление.
Поэтому подумал поместить в отдельную процедуру: [vba]
Код
Do While cancel1 DoEvents Up1 = GetKeyState(&H26) Down1 = GetKeyState(&H28) Left1 = GetKeyState(&H25) Right1 = GetKeyState(&H27) loop
[/vba] и если бы вышло запустить её одновременно с процессом перемещения квадратика (и независимо от цикла, по которому выполняется перемещение), то мб чувствительность нажатия была бы лучше... Возможен ли запуск 2-х процедур одновременно (параллельно)?
Добрый день! Балуюсь. Хотел попробовать сделать управляемую штуку - типа змейки чтоли. Получилось то что вышло (в прикреплённом файле)
[vba]
Код
Private cancel1 As Boolean Private Up2 As Boolean Private Down2 As Boolean Private Left2 As Boolean Private Right2 As Boolean Private n1 As Long, n2 As Long, n As Long, n11 As Long, n22 As Long Private i As Long, j As Long Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer Sub Zmeya2() Right2 = True n1 = 1 n2 = 1 i = 2 j = 1 cancel1 = True Time1 = Timer Do While cancel1 DoEvents Up1 = GetKeyState(&H26) Down1 = GetKeyState(&H28) Left1 = GetKeyState(&H25) Right1 = GetKeyState(&H27) If Timer - Time1 > 0.7 Then Time1 = Timer Call func2 '(n1, n2, i, j) Cells(i, j).Interior.Pattern = xlNone j = n11 i = n22 If j = 10 Or j = 1 Then n1 = -n1 End If If i = 10 Or i = 1 Then n2 = -n2 End If Cells(i, j).Interior.Color = 65535 If Up1 < 0 Then Up2 = True Down2 = False Left2 = False Right2 = False End If If Down1 < 0 Then Down2 = True Up2 = False Left2 = False Right2 = False End If If Left1 < 0 Then Left2 = True Down2 = False Up2 = False Right2 = False End If If Right1 < 0 Then Right2 = True Down2 = False Left2 = False Up2 = False End If End If Loop Range(Cells(1, 1), Cells(10, 10)).Interior.Pattern = xlNone End Sub Sub func2() '(a, b, c, d) If Up2 = True Then n11 = j n22 = i - n2 End If If Left2 = True Then n11 = j - n1 n22 = i End If If Right2 = True Then n11 = j + n1 n22 = i End If If Down2 = True Then n11 = j n22 = i + n2 End If End Sub Sub Canc2() cancel1 = False End Sub
[/vba]
Из-за того, что проверка нажатия клавиш находится внутри цикла с другими процессами, получается, что жать клавишу надо секунду - две чтобы квадратик сменил направление.
Поэтому подумал поместить в отдельную процедуру: [vba]
Код
Do While cancel1 DoEvents Up1 = GetKeyState(&H26) Down1 = GetKeyState(&H28) Left1 = GetKeyState(&H25) Right1 = GetKeyState(&H27) loop
[/vba] и если бы вышло запустить её одновременно с процессом перемещения квадратика (и независимо от цикла, по которому выполняется перемещение), то мб чувствительность нажатия была бы лучше... Возможен ли запуск 2-х процедур одновременно (параллельно)?Roman777
rTemp - это переменная, которая прописывается основным макросом, обозначающая строку Target.Row - это строка активирования. Если мы меняем курсор клавиатурой - [vba]
Код
Target.Row будет <> rTemp или Target.column будет <> cTemp
[/vba] Если макрос меняет курсор, то Target.Row будет = rTemp
[vba]
Код
Up1 = Target.Row < rTemp
[/vba] Это дает возможность понять куда мы тыцнули если [vba]
Код
Target.Row < rTemp тогда Up Target.Row < rTemp тогда Down
[/vba] Надеюсь доступно изложил свою мысль иногда самому сложно понять, что написал
Пока писал сообщение Вы и сами догадались
rTemp - это переменная, которая прописывается основным макросом, обозначающая строку Target.Row - это строка активирования. Если мы меняем курсор клавиатурой - [vba]
Код
Target.Row будет <> rTemp или Target.column будет <> cTemp
[/vba] Если макрос меняет курсор, то Target.Row будет = rTemp
[vba]
Код
Up1 = Target.Row < rTemp
[/vba] Это дает возможность понять куда мы тыцнули если [vba]
Код
Target.Row < rTemp тогда Up Target.Row < rTemp тогда Down
[/vba] Надеюсь доступно изложил свою мысль иногда самому сложно понять, что написал
SLAVICK, да, оч доступно))) просто я самого выражения не понял, когда Вы сначала написали "=", а потом ещё добавили знак "<"... А это просто означает, что если мы нажмём "вверх" то ячейка сместиться выше, соответственно Up1 станет равной True... я этого сразу не понял))).
SLAVICK, да, оч доступно))) просто я самого выражения не понял, когда Вы сначала написали "=", а потом ещё добавили знак "<"... А это просто означает, что если мы нажмём "вверх" то ячейка сместиться выше, соответственно Up1 станет равной True... я этого сразу не понял))).Roman777