Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

EasyCoding - Программирование на любых языках для всех!


Информационный Канал Subscribe.Ru

EasyCoding

EasyCoding - Программирование на любых языках для всех! Программирование для всех и всё для программиста. Исходники, контролы, файлы, объекты, новости, обзоры, публикации и многое другое!

Это наш первый демонстрационный выпуск рассылки! Просим не критиковать нас жестоко. В этой рассылке Вы найдёте для себя много интересного и нового, несмотря на Ваш уровень знаний в области программирования. Мы постараемся сделать нашу рассылку наиболее интересной и познавательной. В рассылке мы никогда не будем публиковать "ворованные" исходники и статьи, только наш собственные!

Программирование на Visual Basic

Программное сдвигание курсора мыши: Ты, наверное не раз замечал в поисках приколов проги, способные хаотично перемещать курсор по экрану... Сегодня я объясню тебе, как это сделать.

Перед началом операции, по созданию крысы-мутанта, должен тебя предупредить., что эта прога не первая, т.е. следующая статья будет посвящена второй версии нашей прикольной программы, и ещё то, что я как раз параллельно пишу статью, объясняющую некоторые API команды для работы с курсором. Ну это всё потом, а сейчас открой VB и создай новый проект. Сразу же добавь в него новый стандартный модуль, а на форме размести кнопку и таймер. Приступим-с Для работы с курсором есть много всяких API функций (например, спрятать курсор, показать и т.д.) Мы же будем использовать только одну - SetCursorPos. Данная функция позволяет программно сдвинуть мышу по в любую часть экрана по оси абсцисс и по оси ординат (по X и по Y).Начнём с того, что "публично" объявим эту функцию в стандартном модуле:

Public Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long

Всё, модуль больше трогать не будем, перейдём к редактированию формы. "Оживляем" курсор Как ты помнишь на форме уже должны быть таймер и кнопка. Так вот, для начала настроим таймер.Задай его свойствам следующие значения: Enabled = False Interval = 10 Name = cur_move Таким образом, при запуске проги таймер будет отключён. Теперь создай обработчик события нажатия на кнопку, и впиши в него следующее: cur_move.Enabled = True Это заставит нашу прогу включать таймер по нажатию на кнопку. Процедура обработчик таймера, должна выглядить так: Dim xpos, ypos xpos = Int(Rnd * 600) ypos = Int(Rnd * 400) SetCursorPos xpos, ypos Тут есть две перменные: xpos и ypos, в которые будут заганяться случайные значения. После того, как значение присвоено, я пользуюсь API функцией SetCursorPos (синтаксис её такой: SetCursorPos x, y) дабы сместить курсор по оси X на значение равное занчению переменной xpos, и чтобы семестить курсор по оси Y на значение, равное значению переменной ypos. Хэппи енд! Ну всё. Тут сложного нет ничего...(важно только знать чё такое x и y :-)) Пофантозировав, ты сможешь писать более прикольные проги, моя задача была лишь в том, чтобы показать на примере этого прикола, что курсор двигать можно и в VB.

Изменение цвета фона в меню:

Option Explicit
' CreateBrushIndirect используется, чтобы создать фоновую кисть для меню
Private Declare Function CreateBrushIndirect Lib "gdi32" (lpLogBrush As LOGBRUSH) As Long
' GetMenu используется, чтобы получить дескриптор меню
Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
' GetMenuInfo используется, чтобы получить текущую информацию для меню
Private Declare Function GetMenuInfo Lib "user32" (ByVal hMenu As Long, lpcmi As tagMENUINFO) As Long
' SetMenuInfo используется, чтобы установить фоновую кисть назад в меню и все подменю
Private Declare Function SetMenuInfo Lib "user32" (ByVal hMenu As Long, lpcmi As tagMENUINFO) As Long
' Используется в запросах к CreateBrushIndirect
Private Type LOGBRUSH
lbStyle As Long ' Тип cтиля (мы только должны создать твердый фон для этого примера)
lbColor As Long ' Установите цвет кисти
lbHatch As Long ' Стиль штриховки (не используемый в этом примере, потому что это игнорируется для Твердого стиля)
End Type
' Используется в GetMenuInfo и запросах SetMenuInfo
Private Type tagMENUINFO
cbSize As Long ' Размер структуры типа (используйте len, чтобы вычислить)
fMask As Long ' Маска информации / действий, чтобы обработать
dwStyle As Long ' Стиль меню (не используемый в этом примере)
cyMax As Long ' Максимальная высота меню в пикселах (не используется в этом примере)
hbrBack As Long ' Дескриптор фоновой кисти
dwContextHelpID As Long ' ИДЕНТИФИКАТОР Справочного контекста (не используется в этом примере)
dwMenuData As Long ' Данные меню (снова не используются в этом примере)
End Type
Private Const BS_SOLID = 0 ' Твердый стиль для кисти
Private Const MIM_APPLYTOSUBMENUS = &H80000000 ' Обращение к маске подменю
Private Const MIM_BACKGROUND = &H2 ' Фоновая маска
Private Sub Form_Load()
Dim ret As Long ' Переменная для удержаyия возвращаемых значения от GetMenuInfo и SetMenuInfo
Dim hMenu As Long ' Переменная для удержания дескриптора меню
Dim hBrush As Long ' Переменная для удержания дескриптора фоновой кисти, которую мы собираемся создавать
Dim lbBrushInfo As LOGBRUSH ' Переменная для удержания информации CreateBrushIndirect API
Dim miMenuInfo As tagMENUINFO ' Переменная для удержания информации меню
lbBrushInfo.lbstyle="BS_SOLID" ' Установить тип кисти
lbBrushInfo.lbColor = vbRed ' Здесь мы устанавливаем наш цвет кисти
lbBrushInfo.lbHatch = 0 ' Это значение игнорируется
hBrush = CreateBrushIndirect(lbBrushInfo) ' Мы создаем нашу кисть
hMenu = GetMenu(Me.hwnd) ' Получают дескриптор меню, которое изменяем
miMenuInfo.cbSize = Len(miMenuInfo) ' Набор MenuInfo структурирует размер так, чтобы мы не получили ошибки
ret = GetMenuInfo(hMenu, miMenuInfo) ' Получить фактическую информацию меню (в случае успеха возвращается 0)
miMenuInfo.fMask = MIM_APPLYTOSUBMENUS Or MIM_BACKGROUND ' Устанавливают маску для изменений (изменение фона меню и всех подменю)
miMenuInfo.hbrBack = hBrush ' Назначение нашей кисти для меню
ret = SetMenuInfo(hMenu, miMenuInfo) ' Записывают нашу информацию назад в меню. Все OK (в случае успеха возвращается non-zero)
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbRightButton Then 'Процедура контекстного меню
Me.PopupMenu mnuMenu
End If
End Sub

В следующем выпуске нашей рассылки Вы сможете прочитать статьи по VB, Delphi, Pascal и, конечно, C++! По всем вопросам, касающимся рассылки обращайтесь на адрес zaivit@yandex.ru или на сайт http://easycoding.h15.ru ! Удачи Вам, дорогие подписчики!

 


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.easycoding
Отписаться
Вспомнить пароль

В избранное