Использование API-функций в Visual Basic

Домой Наверх Предыдущий Следующий

Анимированный курсор

В этом примере мы с Вами рассмотрим, как использовать в программе на Visual Basic'е анимированные курсоры.

Как известно, Visual Basic не поддерживает анимированных курсоров напрямую. В свойстве MouseIcon Вы можете указывать только файлы обычных курсоров. Как Вы, конечно, знаете расширение у таких файлов *.cur.

Нам же хочется использовать анимированный курсор. Для этого нам придется воспользоваться парочкой API-функций.

Для создания заготовки нашего приложения-примера выполните следующие инструкции:

1.Создайте обычный проект типа Standard EXE и сохраните его в некоторой папке.

2.Добавте на форму Form1 две стандартные кнопки. Они будут использоваться для того, чтобы задавать для нашего приложения анимированный курсор и возвращать обычный.

3.Задайте для наших кнопок следующие свойства: Свойство Первая кнопка Вторая кнопка Name cmdAnimCursor cmdDefaultCursor Caption Анимированный курсор Обычный курсор 4.Найдите на диске какой-нибудь анимированный курсор (это файл с расширением *.ani) и поместите его в папку Вашей программы. В нашем примере используется файл HOURGLAS.ANI. Разумеется, Вы в соответствующих местах программы вместо этого названия должны использовать имя Вашего файла.

Теперь добавим необходимые API-функции. Для этого:

1.Запустите утилиту API Text Viewer.

2.В меню File выберите "Load Database File".

3.В появившемся диалоговом "Select a Jet Database" окне выберите файл WIN32API.MDB. Нажмите OK.

4.Убедитесь, что в TextBox'е "API type" выбран пункт Declares. Тем самым мы указываем утилите API Text Viewer, что мы хотим выбрать некоторую API-функцию.

5.Найдите и выберите в списке "Available Items" API-функции LoadCursorFromFile и SetClassLong. Каждую из них перенесите двойным щелчком в поле "Selected Items". При этом проследите, что бы у Вас был выбран переключатель Private.

6.Теперь добавим ещё необходимые константы. Для этого выберите в TextBox'е "API type" пункт Constants.

7.Найдите в алфавитном списке константу GCL_HCURSOR и двойным щелчком перенесите её в поле "Selected Items".

8.Нажимите на кнопку Copy для копирования объявлений наших найденных API-функций в буфер обмена.

9.Закройте API Text Viewer, нажав на кнопку OK.

10.Вставьте содержащийся в буфере обмена текст сразу после строки Option Explicit в окне кода для нашей формы Form1.

Теперь код для Вашей формы должен выглядеть следующим образом:

  Option Explicit
  Private Declare Function LoadCursorFromFile Lib "user32" _
  Alias "LoadCursorFromFileA" _
  (ByVal lpFileName As String) As Long
  Private Declare Function SetClassLong Lib "user32" _
  Alias "SetClassLongA" _
  (ByVal hwnd As Long, _
  ByVal nIndex As Long, _
  ByVal dwNewLong As Long) As Long
  Private Const GCL_HCURSOR = (-12)

Обратите внимание, что мы разбили длинные строки на более компактные. Как Вы помните, для этого Вы должны использовать " _" (символы пробела и подчёркивания) в конце строки.

Теперь займемся кодом для кнопок нашей программы.

Для начала нам надо ввести некоторое количество необходимых переменных.

Сразу после объявления API-функций в окне кода нашей программы вставьте следующий строки:

'путь к файлу анимированного курсора
Dim strCursorFileName As String
'указатель на анимированный курсор
Dim hAnimCursor As Long
'переменная для запоминания старого курсора
Dim hOldCursor As Long
Dim lngReturn As Long

Далее введите для первой кнопки (для события Click, естественно) строки

'берем курсор из папки приложения
strCursorFileName = App.Path & "\HOURGLAS.ANI"
'загружаем курсор из файла

hAnimCursor = LoadCursorFromFile(strCursorFileName) 'изменяем курсор для нашей формы на анимированный hOldCursor = SetClassLong(Form1.hwnd, GCL_HCURSOR, hAnimCursor)

и для второй

'изменяем курсор для нашей формы на обычный
lngReturn = SetClassLong(Form1.hwnd, GCL_HCURSOR, hOldCursor)

Теперь можете запустить программу и убедиться, что при нажатии на первую кнопку курсор для формы (но не для кнопок на ней!) изменится на анимированный, и что при нажатии на вторую кнопку восстановится стандартный курсор (возможно, придётся подождать пару секунд).

Давайте теперь сделаем небольшие комментарии по нашему коду.

API-функция LoadCursorFromFile только загружает файл с курсором в Ваше приложение. Это вовсе не означает, что этот новый курсор автоматически появится. За появление нового курсора отвечает функция SetClassLong. Она принимает три параметра: первый - это указатель на наше окно (Form1.hwnd), второй - константа, показывающая, что мы меняем именно курсор (в данном случае), третий - указатель на новый курсор.

Далее, функция SetClassLong возвращает некоторое значение. Какое именно? Очень просто - она возвращает указатель на старый курсор. Так что после того, как мы вызвали функцию SetClassLong в первый раз, то указатель на старый курсор сохранится в переменной hOldCursor.

Потом этим указателем мы воспользуемся при восстановлении старого курсора. Эта строка

lngReturn = SetClassLong(Form1.hwnd, GCL_HCURSOR, hOldCursor)

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

Вопрос.

А то такое за свойство hwnd для нашей формы?

Ответ.

В Windows каждое окно имеет свой уникальный номер. Так вот, hwnd - это и есть этот номер.

Далее

© Ушку ду Кашку

hidden/visible

Hosted by uCoz