Главная Гостевая Форум INFA

Программируем на Visual Basic'e:

Часть 1/Часть 2/Часть 3/Часть 4/Часть 5/Часть 6/Часть 7/Часть 8/Часть 9/ Часть 10 /Часть 11/Часть 12/Часть 13/Часть 14/Часть 15

ШАГ 71:

API - Начало:

Если у тебя нет духа программера, или ты по какой - то причине был непосвещен, то дальше МОЖЕШЬ НЕ ЧИТАТЬ!!! Т.к. API это не для чайников, а если ты не посвещен, то удивительно как ты вообще досюда дочитал. Вообще в 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 ты можешь скачать с моего сайта - ИЩИ.

ШАГ 72:

Узнаем дирку Винда:

Т.к. у некоторых версий винда нестандартная дирка (у Винда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)

ШАГ 73:

Основы Работы с РЕЕСТРОМ Винда:

Реестр эта база данных винда (ой, бля я же забыл тебе сказать, что такое базы данных). Ну ладно уговорил, скажу, что это такое: База данных это любой текст, который где - то хранится (например, в текстовом документе). Ну я это точно не знаю т.к. в базах я не спец. А создавать мы их будем в ближайшем будущем, т.к. щас у меня нет одной проги, без которой не обойтись. Ну хватит определений!!! Уже 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.
Исходник

ШАГ 74:

Работаем с РЕЕСТРОМ с помощью АПИ:

Вот оно! То что нам надо! Теперь перейдем на нормальную работу с реестром. Ура! Открой 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).

ШАГ 75:

Запись в святую святых Реестра:

Святая святых реестра это раздел 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(ты можешь написать хоть Сука бля ламер, это не имеет значения)), а потом путь к проге. Вот и все!
Исходник

ШАГ 76:

Полезные советы:

Не зная о чем писать, я решил тебе устроить маленький прогрузон, рассказать тебе множество моих советов, и мож они тебе пригодятся.

1. Полноэкранный режим

Чтоб твоя прога была во весь экран необязательно использовать длинные API функции, можно обойтись и без нее.
Входим в VB(Standart EXE), у формы в свойстве BorderStyle - ставим 0 - None, в Form_Load пишем:
Private Sub Form_Load() 'При запуске формы:
Form1.Width = Screen.Width 'Ширина формы будет равна ширине экрана
Form1.Height = Screen.Height 'Высота формы будет равна высоте экрана
End Sub

2. Узнаем разрешение экрана

Слава мне!!! Я опять обошелся без 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

3. Делаем свое Меню

Здесь я не буду тебя грузить, скажу саму идею. На форму кидаем Frame. У него убираем свойство Caption, и него кидаем несколько меток. Это и будет твое меню. Сворачиваем фрейм до минимума, оставляем только одну метку, и при нажатии на нее фрейм должен разворачиваться до обычного размера, ну идею ты наверное понял, короче сделай так чтоб она была похожа на обычное меню. У тебя должна получится такая фенька:

Достоинства этого меню: Ты можешь запихнуть туда картинку, поменять шрифт...

4. Запретить запуск двух копий программы

Хей перцы! Меня кто - нибудь слышит? Отлично! Тогда я тебе скажу одну полезную штуку, как надо запретить запуск двух копий проги, но не просто запретить, а и еще обасрать, чтоб в следующий раз юзер думал, а потом кликал!
Private Sub Form_Load()
If App.PrevInstance = True Then
MsgBox "Эй ламер поганый, ты что ослеп что ле, я уже запущена!!!",16,"Думай что делаешь!"
End
End If
End Sub

5. Послать строковое сообщение в любую другую прогу

Ща я тебе покажу, как надо отсылать свои сообщения в любые другие проги. Тебе надо только указать заголовок той проги, куда ты хочешь отослать свой текст.
Private Sub Command1_Click()
AppActivate ("Безымянный") 'Здесь пишем заголовок проги (место Безымянный можешь написать WordPad, Установка связи...)
SendKeys ("Эй Блокнот - меня слышно?") 'Отсылаемый текст
End Sub

6. Узнаем имя своей проги

Очень часто(особенно когда в реестре прописываешь) надо знать имя своей проги. Ты скажешь: "А нафига? Я ведь ее назвал, и имя запомнил.". А юзер - то может ее и переименовать, для этого есть свойство ExeName у объекта App. Private Sub Form_Load()
Text1.Text = App.EXEName + ".exe"
End Sub

7. Узнаем путь к своей проге

Иногда надо узнать полный путь к своей проге (например, чтоб прописать ее в реестре...), и для этого в VB есть свойство Path(Путь). На форму кинь Текстовое поле и кнопку.
Private Sub Command1_Click()
Text1.Text = App.Path 'В Текстовом поле появится путь к твоей проге
End Sub

8. Делаем автозапуск своей проги

Ты наверное заметил, что когда всуешь CD в CD - ROM, происходит Автозапуск. Если у тебя есть пишущий сидюшник, то это как раз для тебя, но если у тебя его нет, ты можешь сделать Autorun для диска C: например, или любого другого диска. Начнем! Я буду рассматривать на примере диска C:, т.к. не у всех сидюшник пишет, но точно также можно делать и для круглых дисков. В диске C: создай текстовой документ, в нем впиши:
[autorun]
open=1.exe
icon=1.ico
Здесь Open = путь к файлу,Icon = иконка для диска. Сохраняй его как Autorun.inf(он должен сидеть в корневом каталоге диска(у нас C:\)). Входи в Мой комп, жми F5(обновить), и любуйся.

9. Окуратнее с Оператором DIM

Ты наверное заметил, что оператор 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

10. Аварийный выход

Иногда, бывает что прога виснет(очень часто это бывает когда цикл зацикливается). Короче, чтоб безопасно выключить прогу надо нажать Ctrl + PauseBreak.

ШАГ 77

Инструкция With

Чтобы выполнить последовательность команд над одним объектом, не перечисляя его каждый раз, есть инструкция With. Не буду тебе о нем много говорить, а лучше покажу как пользоваться.
Private Sub Command1_Click() 'При нажатии на кнопку:
With Label1 Делаем инструкцию With для Метки
.Caption = "Сука" 'Меняем надпись
.FontSize = 14 'Меняем шрифт
.ForeColor = vbRed 'Меняем цвет
End With 'Завершаем инструкцию
End Sub
Теперь ты можешь не писать по десять раз имя объекта

ШАГ 78:

Использование своего курсора(обычного и анимационного):

Для использование своего курсора есть спец АПИ функция. Вот код:

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 анимированных курсора.

ШАГ 79:

API - БЕЗ ДЕКЛАРАЦИЙ!!!

У меня для тебя хорошая новость - ТЕПЕРЬ ФУНКЦИИ API НЕ НАДО ДЕКЛАРИРОВАТЬ!!! Теперь можно скачать с моего сайта библиотеку wintlb. Подключив ее большинство API функций не надо декларировать(~700), и самое главное то, что функция, которую ты не будешь декларировать - МЕСТО ЗАНИМАТЬ НЕ БУДЕТ! Для ее подключения войди в Project/Referentces, жми Browse, ищи библиотеку, и подключай ее. Теперь можешь написать, например API для нахождения дирки винда (только без Declare...) Скачать БИБЛОТЕКУ(Если не будет скачиваться, то зайди на мой сайт(vbstreets.narod.ru), и в разделе библиотеки можешь ее скачать)

ШАГ 80:

Проигрывание файлов любых ФорМатоВ:

Любая прога, даже крутая, без озвучивания будет не прога, а какая - то фигня, но 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 кнопку он остановится.
Здесь Исходник

Если ты зайдешь на мой сайт, кликни плиз по банеру Porta(сиреневый), мне за это немного бабла отвалется(2 цента). И если ты захочешь поддержать Отечественного производителя(т.е. Меня), то кликай по банеру раз в месяц. А если ты очень богатый, то не просто кликни, а еще что - нибудь купи.

автор учебника: Падре
Дата создания: 26 Марта 2003 года

Место под Банеры

Официальный сайт учебника - 'Программируем на Visual Basic'