Часть 1/Часть 2/Часть 3/Часть 4/Часть 5/Часть 6/Часть 7/Часть 8/Часть 9/ Часть 10 /Часть 11/Часть 12/Часть 13/Часть 14/Часть 15/Часть 16 /Часть 17 /Часть 18
Вообще в API ни чего сложного нет, т.к. в них даже думать особо не надо.
Винд использует кучу АПИ(их около 10000), например для работы с реестром, установки рисунка на рабочем столе, изменения разрешения экрана...(не буду их всех перечислять, т.к. это займет много времени).
И зачем писать огромный код, когда можно использовать АПИ винда. И VB не всегда может сделать то, что можно сделать с помощью АПИ. Вот так.
Теперь я дам тебе задание: "На рабочем столе создай текстовой документ(или какой - нибуть другой), назови его как - нибуть, в него ты будешь записывать все АПИ, которые ты считаешь нужными(т.к. есть еще куча не нужных)"
Создал? Молодец, теперь запиши туда свою первую АПИ(см. ниже).
АПИ можно разделить на 2 части. В первой - мы ее декларируем, а во второй пишем код.
Вот маленький пример функции, которая устанавливает курсор в любое место на экране:
Public Declare Function SetCursorPos Lib "user32" (ByVal r As Long, ByVal r1 As Long) As Long 'Это как ты наверное понял(или нет?) процесс декларации, здесь я написал в самом начале Public, это означает что декларировать можно где хош, хоть в модуле(ой, сорри, ДЕКЛАРИРОВАТЬ МОЖНО ТОЛЬКО В МОДУЛЕ, но декларация будет глобальна...); если написать Private - то АПИ можно будет использовать только в том месте где находится код к ней(это обычно в форме); а если вообще ни чего не писать(оставить Declare...as Long), то декларировать можно будет только в Модуле
Private Sub Command1_Click() 'При нажатии на кнопку устанавливаем курсор в координаты 66 и 77
qqq = SetCursorPos(66, 77)
End Sub
Мою коллекцию API ты можешь увидеть
Здесь. Сборник многих API ты можешь скачать с моего сайта - ИЩИ.
Т.к. у некоторых версий винда нестандартная дирка (у Винда95 - Win95, у других Windows...), наша цель узнать ее. Для этого можно использовать очень старую (еще с QBasic), и почти всеми забытою функцию Environ("windir")(Text1.Text = Environ("windir")), но истинный программер должен знать и API функцию. GetWindowsDirectory.
На форму кидаем текстовое поле и кнопку. В модуле декларируем API-функцию GetWindowsDirectory:.Для этого войди в Project/Add Module и нажми Module. Они нужны для объявления глобальных переменных и декларирования API функций.
Declare Function
GetWindowsDirectory
Lib "kernel32" Alias
"GetWindowsDirectoryA"
(ByVal lpBuffer As
String, ByVal
nSize
As Long)
As Long
Теперь впиши этот код в окне кода программы:
Private Sub Command1_Click()
Dim WinDir
As String
'Переменную, которую надо передать API,
мы уже
'объявили и теперь
заполняем пробелами.
'
Пробелов должно быть примерно столько,
'сколько примерно символов должна иметь
переменная.
'В этом случае хватит
и 20, т.к. Windows обычно устанавливают в
' С:\Windows или C:\Win95, и т.д. Т.е.
сумма символов, скорее
' всего
не превысит 20
WinDir =
Space(20)
Text1.Text=
Left(WinDir, GetWindowsDirectory(WinDir,
20))
'Т.к. API является
функцией, то она должна возвращать
какое-то
'значение. В данном
случае функция GetWindowsDirectory
возвращает
'длину искомого
значения. Т.е. если, например, искомое
значение
' это C:\WINDOWS, то
функция вернёт значение 10.
'Переменная же имеете длину 20. Эти 10
символов записываются
'первыми, а дальше идут 10 пробелов.
Зачем нам, спрашивается,
'лишние
10 символов? Ведь это используется ненужная
память...
'Поэтому инструкцией
Left мы из переменной WinDir вытаскиваем
'ровно столько первых символов, сколько
вообще нужных...
End Sub
У тебя в текстовом поле появится путь к винду, а что касается деклараций функций, не забывай указывать ByVal, здесь вместо ipBuffer и nSize можно указать любую букву или слово (хоть Suka Bla)
Реестр эта база данных винда (ой, я же забыл тебе сказать, что такое базы данных). Ну ладно уговорил, скажу, что это такое: База данных это любой текст, который где - то хранится (например, в текстовом документе). Ну я это точно не знаю т.к. в базах я не спец. А создавать мы их будем в ближайшем будущем, т.к. сейчас у меня нет одной программы, без которой не обойтись. Ну хватит определений!!! Уже 2 штуки сказал! Перейдем к делу! Короче в реестре хранятся все настройки юзера. Например разрешение экрана, логин от инет карты, а пароль мы узнаем другим способом, с помощью реестра ты можешь сделать так чтоб твоя программа запускалась при старте винда (т.е. при входе в программу, юзер от нее никогда не избавится, короче в нем хранится почти все настройки юзера (и не только, все устройства, расширения файлов...), их можно менять, дополнять.... Но об этом потом. ВСЕ ПОТОМ. А сейчас будем работать с реестром с помощью VB. Но скажу сразу возможности VB ограничены, и это еще сильно сказано.
В VB можно работать только с одним ключем, а этот ключ - самый ненужный ключ во всем Реестре, даже нельзя поместить программу в автозагрузку, а это унизительно..., НО, все равно, для хранения настроек программы он сойдет. Начнем.
Программа для работы с реестром находится в Винде, и зовется она RegEdit.EXE. Найди ее. А для ленивых есть в Пуске Раздел "Выполнить", нажми на него, и в текстовом поле впиши regedit и нажми ОК. Перед тобой откуда не возьмись открывается окно Редактор реестра. Там находится 6 ключей, но нам они не нужны, т.к. мы работаем без АПИ, а с помощью функций VB, а VB может работать только с одним ключем - HKEY_CURRENT_USER. Нажми на него(или 2 раза по нему, или один раз на плюс). Перед тобой появляется до хрена подключей, но нам они опять не нужны, т.к. МЫ БЕЗ АПИ КАК БЕЗ РУК!!!, но все равно нажми на SOFTWARE(т.е. Софт). И вот оно! То что нам надо! Это ключ VB and VBA Program Setting. В этом ключе Басик чувствует себя как дома! И в этом ключе мы будем работать с помощью VB функций. Полный путь к нему: HKEY_CURRENT_USER\SOFTWARE\VB and VBA Program Settings. Прежде чем рассказать о функциях я скажу пару умных слов(НЕ ОПРЕДЕЛЕНИЙ!!!!!!!!!!!!!!!!!!!!!).
Ключ - это таккая хрень, которая находится в самом начале, и начинается на HKEY_(ключей всего 6)
Подключ - это все что находится в ключе.
Строковой параметр - Ты наверное заметил, что редактор реестра поделен на 2 части, в первой - Ключи & Подключи, во второй - Строковые параметры, и числовые. А строковые параметры выглядят так:
Числовые нам вообще пока не нужны, они выглядят почти также, только синие.
Как всегда сделаем программу, которая будет сохранять текст в реестр(т.е. в строковой параметр), читать их от туда, создовать навые подключи. Войди в VB, на форму кинь 3 кнопки(У первой Caption = "Сохранить", у 2ой - "Удалить", у 3ей - "Прочитать"), и текстовое поле. Код:
Private Sub Command1_Click()
SaveSetting "New Ключ", "Нью Подключ", "Строковой Параметр", "Строковое значение которое принемает параметр"
'Создаем ключ New Ключ(т.е. подключ), и подключ Нью Подключ, в подключе Нью Ключ создаем Строковой параметр, а в нем запись.
End Sub
Private Sub Command2_Click()
'Удаляем
DeleteSetting "New Ключ", "Нью Подключ", "Строковой Параметр"
'Если ты хочешь удалить сразу всю папку то впиши: DeleteSetting "New Ключ"
End Sub
Private Sub Command3_Click()
Text1.Text = GetSetting("New Ключ", "Нью Подключ", "Строковой Параметр")'Читаем в текстовое поле содержимое Строкового параметра
End Sub
Теперь в редакторе реестра нажнми Вид\Обновить, или просто F5.
Исходник
Вот оно! То что нам надо! Теперь перейдем на нормальную работу с реестром. Ура! Открой VB(Standart EXE), создай там модуль и вставь туда этот код:
Public Const REG_SZ As Long = 1
Public Const REG_DWORD As Long = 4
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_USERS = &H80000003
Public Const ERROR_NONE = 0
Public Const ERROR_BADDB = 1
Public Const ERROR_BADKEY = 2
Public Const ERROR_CANTOPEN = 3
Public Const ERROR_CANTREAD = 4
Public Const ERROR_CANTWRITE = 5
Public Const ERROR_OUTOFMEMORY = 6
Public Const ERROR_INVALID_PARAMETER = 7
Public Const ERROR_ACCESS_DENIED = 8
Public Const ERROR_INVALID_PARAMETERS = 87
Public Const ERROR_NO_MORE_ITEMS = 259
Public Const KEY_ALL_ACCESS = &H3F
Public Const REG_OPTION_NON_VOLATILE = 0
Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition As Long) As Long
Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Declare Function RegQueryValueExString Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long
Declare Function RegQueryValueExLong Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Long, lpcbData As Long) As Long
Declare Function RegQueryValueExNULL Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As Long, lpcbData As Long) As Long
Declare Function RegSetValueExString Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As String, ByVal cbData As Long) As Long
Declare Function RegSetValueExLong Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, ByVal cbData As Long) As Long
Declare Function RegDeleteKey& Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String)
Declare Function RegDeleteValue& Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String)
'Создание нового ключа
Public Function CreateNewKey(lPredefinedKey As Long, sNewKeyName As String)
Dim hNewKey As Long
Dim lRetVal As Long
lRetVal = RegCreateKeyEx(lPredefinedKey, sNewKeyName, 0&, vbNullString, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0&, hNewKey, lRetVal)
RegCloseKey (hNewKey)
End Function
'Запись данных в ключ
Public Function SetKeyValue(lPredefinedKey As Long, sKeyName As String, sValueName As String, vValueSetting As Variant, lValueType As Long)
Dim lRetVal As Long
Dim hKey As Long
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
lRetVal = SetValueEx(hKey, sValueName, lValueType, vValueSetting)
RegCloseKey (hKey)
End Function
Public Function SetValueEx(ByVal hKey As Long, sValueName As String, lType As Long, vValue As Variant) As Long
Dim lValue As Long
Dim sValue As String
Select Case lType
Case REG_SZ
sValue = vValue
SetValueEx = RegSetValueExString(hKey, sValueName, 0&, lType, sValue, Len(sValue))
Case REG_DWORD
lValue = vValue
SetValueEx = RegSetValueExLong(hKey, sValueName, 0&, lType, lValue, 4)
End Select
End Function
'Возвращает значения записанные в ключе(т.е. чтение)
Public Function QueryValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)
Dim lRetVal As Long
Dim hKey As Long
Dim vValue As Variant
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
lRetVal = QueryValueEx(hKey, sValueName, vValue)
QueryValue = vValue
RegCloseKey (hKey)
End Function
Function QueryValueEx(ByVal lhKey As Long, ByVal szValueName As String, vValue As Variant) As Long
Dim cch As Long
Dim lrc As Long
Dim lType As Long
Dim lValue As Long
Dim sValue As String
On Error GoTo QueryValueExError
'Определение размера и типа считываемых данных
lrc = RegQueryValueExNULL(lhKey, szValueName, 0&, lType, 0&, cch)
If lrc <> ERROR_NONE Then MsgBox "Данных (ключа) не существует!", vbExclamation, Form1.Caption
Select Case lType
'Для символьных
Case REG_SZ:
sValue = String(cch, 0)
lrc = RegQueryValueExString(lhKey, szValueName, 0&, lType, sValue, cch)
If lrc = ERROR_NONE Then
vValue = Left$(sValue, cch)
Else
vValue = Empty
End If
'Для числовых
Case REG_DWORD:
lrc = RegQueryValueExLong(lhKey, szValueName, 0&, lType, lValue, cch)
If lrc = ERROR_NONE Then vValue = lValue
'Для остальных не поддержанных типов данных
Case Else
lrc = -1
End Select
QueryValueExExit:
QueryValueEx = lrc
Exit Function
QueryValueExError:
Resume QueryValueExExit
End Function
'Удаление значений ключа
Public Function DeleteValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)
Dim lRetVal As Long
Dim hKey As Long
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
lRetVal = RegDeleteValue(hKey, sValueName)
RegCloseKey (hKey)
End Function
'Удаление ключа
Public Function DeleteKey(lPredefinedKey As Long, sKeyName As String)
Dim lRetVal As Long
lRetVal = RegDeleteKey(lPredefinedKey, sKeyName)
End Function
Все, модуль сделали, и теперь про него можешь забыть. Теперь переключичсь на форму. На нее кинь 4 кнопки(у первой Caption = "Создать", у 2ой = "Запись", у 3ей = "Чтение", у 4ой и 5ой = "Удаление") и текстовое поле. Код:
Private Sub Command1_Click()
'Создание ключей
CreateNewKey HKEY_LOCAL_MACHINE, "VB6"
'Можно создать и подключи
'CreateNewKey HKEY_LOCAL_MACHINE, "VB6\RegistryKey"
End Sub
Private Sub Command2_Click()
'Запись
SetKeyValue HKEY_LOCAL_MACHINE, "VB6", "Proga", "Твои данные", REG_SZ
End Sub
Private Sub Command3_Click()
'Чтение
Dim Variable As String
Text1.Text = QueryValue(HKEY_LOCAL_MACHINE, "VB6", "Proga")
End Sub
Private Sub Command4_Click()
'Удаление данных из ключа
DeleteValue HKEY_LOCAL_MACHINE, "VB6", "Program"
End Sub
Private Sub Command5_Click()
'Удаление ключа
DeleteKey HKEY_LOCAL_MACHINE, "VB6"
End Sub
Вот в этом "маленьком" примере лежат самые основы реестра.
Исходник
Теперь сделаем программу которая будет записывать в святую святых РЕЕСТРА нашу программу(т.е. в подключ Run).
Святая святых реестра это раздел Run, т.е. наша программа будет запускаться при запуске компа. Что нам для этого надо? Нам нужен Модуль который мы сделали в предыдущем шаге. Его ты можешь скачать Здесь. Чтобы подключить его нажми Проэкт(Project)>>Добавить файл(Add File). В появившимся окне выбери наш модуль. Теперь на форму кинь кнопку, при нажатии на нее путь к нашей программе попадает в святую святых реестра.
Для начала я скажу где хранится раздел Run - HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
. Да, да сюда мы сейчас и будем записывать свою программу. Кстати, в этом же разделе есть 5-7 папок начинающихся на Run, они тоже сойдут(например RunOnce).Код(ТОЛЬКО НЕ ЗАБУДЬ МОДУЛЬ ПОДКЛЮЧИТЬ!!!!)
Dim q As String
Private Sub Command1_Click()
q = App.Path + "\proga.exe"
'Узнаем путь к нашей программе(App.Path), и прибавляем ее название(НЕЗАБУДЬ ЕЕ ПЕРЕИМЕНОВАТЬ В proga)
SetKeyValue HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "Proga", q, REG_SZ
'Запись!
End Sub
Теперь немного объясню: Первой идет функция SetKeyValue, она нужна для записи(Ты что забыл?), потом главный ключ(HKEY_LOCAL_MACHINE), потом путь к объекту Run(SOFTWARE\Microsoft\Windows\CurrentVersion\Run), потом название строкового параметра(Proga), а потом путь к программе.
Вот и все!
Исходник
Не зная о чем писать, я решил тебе устроить маленький прогрузон, рассказать тебе множество моих советов, и может они тебе пригодятся.
Чтоб твоя программа была во весь экран необязательно использовать длинные API функции, можно обойтись и без нее.
Входим в VB(Standart EXE), у формы в свойстве BorderStyle - ставим 0 - None, в Form_Load пишем:
Private Sub Form_Load() 'При запуске формы:
Form1.Width = Screen.Width 'Ширина формы будет равна ширине экрана
Form1.Height = Screen.Height 'Высота формы будет равна высоте экрана
End Sub
Слава мне!!! Я опять обошелся без API!!! На форму кидаем текстовое поле и кнопку. Код:
Private Sub Command1_Click() 'При нажатии на кнопку:
Dim width As String 'Объявляем переменную width как строковую
Dim height As String 'Объявляем переменную height как строковую
width = Screen.width / 15
height = Screen.height / 15
Text1.Text = width + "x" + height
End Sub
Здесь я не буду тебя грузить, скажу саму идею. На форму кидаем Frame. У него убираем свойство Caption, и него кидаем несколько меток. Это и будет твое меню. Сворачиваем фрейм до минимума, оставляем только одну метку, и при нажатии на нее фрейм должен разворачиваться до обычного размера, ну идею ты наверное понял, короче сделай так чтоб она была похожа на обычное меню. У тебя должна получится такая штука:
Достоинства этого меню: Ты можешь запихнуть туда картинку, поменять шрифт...
Хей перцы! Меня кто - нибуть слышит? Отлично! Тогда я тебе скажу одну полезную штуку, как надо запретить запуск двух копий программы, но не просто запретить, а и еще обасрать, чтоб в следующий раз юзер думал, а потом кликал!
Private Sub Form_Load()
If App.PrevInstance = True Then
MsgBox "Эй ламер поганый, ты что ослеп что ле, я уже запущена!!!",16,"Думай что делаешь!"
End
End If
End Sub
Ща я тебе покажу, как надо отсылать свои сообщения в любые другие программы. Тебе надо только указать заголовок той программы, куда ты хочешь отослать свой текст.
Private Sub Command1_Click()
AppActivate ("Безымянный") 'Здесь пишем заголовок программы (место Безымянный можешь написать WordPad, Установка связи...)
SendKeys ("Эй Блокнот - меня слышно?") 'Отсылаемый текст
End Sub
Очень часто(особенно когда в реестре прописываешь) надо знать имя своей программы. Ты скажешь: "А нафига? Я ведь ее назвал, и имя запомнил.". А юзер - то может ее и переименовать, для этого есть свойство ExeName у объекта App.
Private Sub Form_Load()
Text1.Text = App.EXEName + ".exe"
End Sub
Иногда надо узнать полный путь к своей программе (например, чтоб прописать ее в реестре...), и для этого в VB есть свойство Path(Путь). На форму кинь Текстовое поле и кнопку.
Private Sub Command1_Click()
Text1.Text = App.Path 'В Текстовом поле появится путь к твоей программе
End Sub
Ты наверное заметил, что когда всуешь CD в CD - ROM, происходит Автозапуск. Если у тебя есть пишущий сидюшник, то это как раз для тебя, но если у тебя его нет, ты можешь сделать Autorun для диска C: например, или любого другого диска. Начнем! Я буду рассматривать на примере диска C:, т.к. не у всех сидюшник пишет, но точно также можно делать и для круглых дисков. В диске C: создай текстовой документ, в нем впиши:
[autorun]
open=1.exe
icon=1.ico
Здесь Open = путь к файлу,Icon = иконка для диска.
Сохраняй его как Autorun.inf(он должен сидеть в корневом каталоге диска(у нас C:\)). Входи в Мой комп, жми F5(обновить), и любуйся.
Ты наверное заметил, что оператор Dim не обязательно писать пять раз, чтобы объявить пять переменных а можно написать так:
Dim QW1, QW2, QW3, QW4, QW5 As Long
Здесь мы объявляем пять переменных, но всели они будут Long? НЕТ!!! Первые четыре будут Variant, а только последняя будет Long. Если я тебе не говорил в чем разница между Variant, Long, Integer..., то слушай:
Variant - жрет памяти очень много, ее используют только начинающие VB программеры(если ты все еще используешь Variant - ТО СРОЧНО ПЕРЕХОДИ НА LONG!!!)
>
Integer(8 бит) - Этот тип жрет памяти меньше чем Variant(она вроде 16 бит), но больше чем Long(2 бита).
Long - этот тип жрет памяти меньше всего, и ты если используешь другой, то переходи на него!!!
Это я говорю к тому, что если ты хочешь объявлять переменные в одну строчку, а не в пять, то пиши так:
Dim QW1 As Long, QW2 As Long, QW3 As Long, QW4 As Long, QW5 As Long
Иногда, бывает что программа виснет(очень часто это бывает когда цикл зацикливается). Короче, чтоб безопасно выключить программу надо нажать Ctrl + PauseBreak.
Иногда надо ограничить переменную до определенного количества символов, для этого при объявлении переменной нужно указать количество символов, до которых нужно ограничить переменную. Например:
Dim X As String * 3 'Ограничиваем переменную X до 3 символов
Private Sub Form_Load()
X = "123456"
MsgBox X 'Выдает 123
End Sub
1. String - строковые переменные
2. Long - числовые переменные от -2147483648 до +2147483647
3. Integer числовые переменные от -32768 до +32767, работают медлее Long
4. Single - хранит дробные числа с точностью до 7 цифр, и длинной до 38 символов. Вычисления приблизительны
5. Double - хранит дробные числа с точностью до 16 цифр и длиной до 300 символов. Вычисления тоже приблизительны. Работает медлее Single.
6. Variant - данные любого типа
7. Byte - хранит целые числа от 0 до 255. Экономит оперативную память и размеры массивов.
Комментарии задаются ковычкой '
Также, можно использовать оператор REM
Dim x as Long: REM Объявляем переменную x
Чтобы выполнить последовательность команд над одним объектом, не перечисляя его каждый раз, есть инструкция With. Не буду тебе о нем много говорить, а лучше покажу как пользоваться.
Private Sub Command1_Click() 'При нажатии на кнопку:
With Label1 Делаем инструкцию With для Метки
.Caption = "Сук" 'Меняем надпись
.FontSize = 14 'Меняем шрифт
.ForeColor = vbRed 'Меняем цвет
End With 'Завершаем инструкцию
End Sub
Теперь ты можешь не писать по десять раз имя объекта
Для использование своего курсора есть спец АПИ функция. Вот код:
Private Declare Function CopyCursor Lib "user32" Alias "CopyIcon" (ByVal hcur As Long) As Long
Private Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA" (ByVal lpMyFileName As String) As Long
Private Declare Function GetCursor Lib "user32" () As Long
Private Declare Function SetSystemCursor Lib "user32" (ByVal hcur As Long, ByVal id As Long) As Long
Private NewCur, OldCur As Long
Private Sub Form_Load()
NewCur = LoadCursorFromFile("c:\APPSTART.ani")'Там где необходимо запоминаем системный курсор и загружаем анимированный
OldCur = GetCursor()
OldCur = CopyCursor(OldCur)
SetSystemCursor NewCur, 32512
End Sub
Private Sub Form_Unload(Cancel As Integer)
If OldCur <> 0 Then SetSystemCursor OldCur, 32512'Выгружаем наш курсор и возвращаем стандартный
End Sub
А ты спросишь: "Где ani курсора достать?" Нажми F3 и впиши *.ani, и он должен в папке Windows найти 3 анимированных курсора.
У меня для тебя хорошая новость - ТЕПЕРЬ ФУНКЦИИ API НЕ НАДО ДЕКЛАРИРОВАТЬ!!! Теперь можно скачать с моего сайта библиотеку wintlb. Подключив ее большинство API функций не надо декларировать(~700), и самое главное то, что функция, которую ты не будешь декларировать - МЕСТО ЗАНИМАТЬ НЕ БУДЕТ! Для ее подключения войди в Project/Referentces, жми Browse, ищи библиотеку, и подключай ее. Теперь можешь написать, например API для нахождения дирки винда (только без Declare...). Библиотеку качай с моего сайта.
Любая программа, даже крутая, без озвучивания будет не программа, а какая - то фигня, но VB сам не может проигрывать звуковые файлы, и для проигрывания звуковых файлов воспользуемся API функцией. На форму кинь 2 кнопки, и впиши код: автор учебника: Падре
Private Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As Long
'Чтобы воспроизвести файл:
Private Sub Command2_Click()
Call mciExecute("play 2.wav") 'Проигрываем файл 2.wav, он должен находиться в той же папке, где и сама программа(НИКОГДА НЕ ПИШИ ПОЛНЫЙ ПУТЬ - например c:\2.wav, - на вражеском компе, звуков не будет, т.к. комп будет искать на другом компе, в диске c:\ звуковой файл(а его там и нету), а если ты напишешь 2.wav, то он будет искать в той же папке, где и сама программа)
End Sub
'Чтобы закрыть файл:
Private Sub Command1_Click()
Call mciExecute("close 2.wav")
End Sub
При нажатии на 2 кнопку, издастся звук, при нажатии на 1 кнопку он остановится.
Здесь Исходник
Дата создания: 26 Марта 2003 года
Место под Банеры |
![]() |