|
|
Несколько слов от автора:
Приветствую! Вот сижу, отмечаю свой день рождения. Стараюсь, как быстрее накатать вам выпуск. Ну вот, ловите, что сумел, накатал.
РАССЫЛКА: Открылся сайт рассылки по адресу http://soobcha-vb.narod.ru/alex/ На сайте вы найдете весь архив рассылки, проекты и многое другое.
ПРИМЕЧАНИЕ: Выпуски данной рассылки начиная с первого вы сможете прочитать на http://subscribe.ru/archive/comp.design.snoozex/
@LEXis
|
|
26.05.2001 Выпуск N25 Обзор ведет @LEXis
# E-Mail группа "СообЧа-Visual BASIC":
| О группе |
| Создание ярлыка для программы |
# Практикум на примерах:
| Windows API (Часть 3 - Использование) |
# Практикум на примерах:
| Выравнивание меню по правому краю |
# В разделе "вопросы/ответы":
| Ответы на вопросы читателей |
# Рубрика "Объявления"
E-Mail группа "СообЧа-Visual BASIC"
|
| О группе |
Группа VB. Заходите в гости. Здесь вы приобретете практические навыки по программированию на Visual Basic. Как вы этого сможете достигнуть? Путем написания собственной серьезной программы. Чем обычно занимается рядовой чайник-программист? Ну, пишет там всякие приколы на VB... Ну, ма-а-ленькую полезную программку наваляет. А как получить навыки в создании серьезных программ? Правильно, путем создания серьезных программ. ;) Но в одиночку вам с этим не справиться. Вот для этого в проекте СообЧа существует группа программистов-чайников, которые занимаются разработкой серьезного софта на VB. Суть состоит в том, что вам совсем необязательно знать все в Visual Basicе. Вам достаточно быть рядовым чайником и немного знать операторы VB. Остальному научимся вместе. На данный момент в группе разрабатывается почтовая программа под рабочим названием "Сообчайлер". Она будет уметь все, что умеет популярная программа The Bat и даже намного больше. Есть сборник оригинальных идей, выдвинутых чле!
нами нашей!
группы, которые мы постараемся реализовать все вместе. Проект разбивается на отдельные простые задачи. Такие как: проверка орфографии, форма для написания нового письма, главное окно... и т.п. Каждую часть делает отдельный человек. Затем он высылает сделанный модуль в группу, и остальные просто присоединяют его к базовому проекту. Вам совсем не обязательно четко представлять, как это сделать. Достаточно просто начать и столкнуться с какой-нибудь проблемой. Пусть это будет даже проблема типа "А как добавить новый модуль к проекту?". Все. Наткнулись... ;) Дальше действуем по одной схеме - пишем письмо с описанием проблемы в группу и мы все вместе разбираемся в проблеме. Таким образом, все остальные получат ЗНАНИЯ и некоторые навыки в решении создавшихся проблем. Не забывайте - все мы чайники. Не стоит бояться задать вопрос. Задавайте - а мы вместе попытаемся найти ответ.
Подписаться в группу (пустое письмо)
| Создание ярлыка для программы |
@LEXis Май 2001
Public Declare Function fCreateShellLink Lib "STKIT432.DLL" _
(ByVal lpstrFolderName As String, _
ByVal lpstrLinkName As String, _
ByVal lpstrLinkPath As String, _
ByVal lpstrLinkArgs As String) As Long
fCreateShellLink "C:\Windows\Desktop", _
"NotePad", _
"C:\Windows\Notepad.exe", vbNullString
| Windows API (Часть 3 - Использование) |
Использование функций API в Visual Basic
Функции API,вызываемые в Visual Basic должны быть предварительно объявлены. При объявлении указывается имя DLL и функции,а также информация о количестве и типе аргументов.
Объявление функций API и DLL
Процедуры DLL объявляются командой Declare в секции General Declarations модуля формы или стандартного модуля:
Declare Function имя Lib "библиотека" [Alias "псевдоним"] [([[ByVal ] _
переменная [As тип] [,ByVal,] переменная [As тип]]...])] As тип
Процедуры DLL,находящиеся в стандартных модулях,по умолчанию являются открытыми и могут вызываться из любой точки приложения.Процедуры,объявленные в модуле формы,являются закрытыми и перед их объявлением должно стоять ключевое слово Private .
Примечание.
Начиная с версии Visual Basic 5,в именах процедур учитывается регистр символов.
Библиотеки
Секция Lib сообщает,где следует искать файл DLL,содержащий функцию.При ссылке на основные библиотеки Windows(user32.dll,kernel32.dll,gdi.dll) расширение включать не обязательно.
Если путь к файлу не указан,то начинается просмотр каталогов в следующей последовательности
- Каталог,содержащий EXE-файл программы
- Текущий каталог
- Системный каталог Windows
- Каталог Windows
- Переменная окружения Path
Стандартные библиотеки DLL |
Библиотека | Описание
| advapi.dll | Защита NT,реестр и другие продвинутые сервисы.
comdlg.dll | Стандартные диалоговые окна.
gdi.dll | Интерфейс графических устройств.
kernel32.dll | Память,диски,процессы,ресурсы.
mpr.dll | Сети.
netapi32.dll | Библиотека сетевого API.
shell32.dll | Оболочка Windows,drag-and-drop,выборка значков.
user32.dll | Пользовательский интерфейс-окна,меню,строки,сообщения.
version.dll | Контроль версий.
winmm.dll | Мультимедиа,звук,джойстики,таймеры.
winspoll.dll | Диспетчер печати.
| | | | | | | | | | |
Псевдонимы
Атрибут Alias позволяет присвоить DLL-функции новое имя в Visual Basic. Например,в VB не разрешается начинать имена функций со знака подчеркивания(_lopen,_lread и другие). Во избежание этих проблем с именами функций,написанных на Си,используется псевдоним(например,lopen).
Передача аргументов
Большинство процедур DLL задокументировано с использованием нотации языка программирования C и C++.Для успешного преобразования функции API в команду Declare необходимо разбираться в механизме передачи аргументов.Обычно аргументы передаются по значению.Ниже перечислены типы аргументов C и их эквиваленты в Visual Basic
Типы данных в C и Visual Basic |
Windows API | Visual Basic
| char | ByVal Byte
handle | ByVal Long
INT | ByVal Long
UINT | ByVal Long
Bool | ByVal Long
WORD | ByVal Integer
DWORD | ByVal Long
WPARAM | ByVal Long
LPARAM,LRESULT | ByVal Long
COLORREF | ByVal Long
ATOM | ByVal Integer
Byte | ByVal Byte
| | | | | | | | | | | |
Передача аргументов по значению
При передаче аргумента по значению передается не сама переменная,а ее временная копия.Если процедура изменяет ее значение,такие изменения будут относиться к копии,но не к самой переменной.При передаче по значению используется ключевое слово ByVal
Передача аргументов по ссылке
При передаче аргумента по ссылке процедура получает доступ к той области памяти,где хранится сама переменная.В результате вызываемая процедура может изменить значение этой переменной.Если аргумент передается по ссылке,то используется ключевое слово ByRef.
Поленые коды на Visual BASIC
|
| Выравнивание меню по правому краю |
Добавьте на форму любое меню, состоящее из скольки угодно пунктов, а также одну кнопку Command1. Затем внесите в модуль кода формы следующее:
'Необходимые нам API функции
Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetMenuItemInfo Lib "user32" Alias "GetMenuItemInfoA" _
(ByVal hMenu As Long, ByVal un As Long, ByVal b As Boolean, lpMenuItemInfo _
As MENUITEMINFO) As Long
Private Declare Function SetMenuItemInfo Lib "user32" Alias "SetMenuItemInfoA" _
(ByVal hMenu As Long, ByVal un As Long, ByVal bool As Boolean, _
lpcMenuItemInfo As MENUITEMINFO) As Long
'Константы
Const MIIM_TYPE = &H10
Const MFT_RIGHTJUSTIFY = &H4000
Const MFT_STRING = &H0&
'Тип MENUITEMINFO
Private Type MENUITEMINFO
cbSize As Long
fMask As Long
fType As Long
fState As Long
wID As Long
hSubMenu As Long
hbmpChecked As Long
hbmpUnchecked As Long
dwItemData As Long
dwTypeData As String
cch As Long
End Type
'При нажатии на кнопку меню перескочит из левого края в правый
Private Sub Command1_Click()
Dim MnuInfo As MENUITEMINFO
Dim mnuH As Long, MyTemp As Long
mnuH = GetMenu(Me.hwnd)
MnuInfo.cbSize = Len(MnuInfo)
MnuInfo.fMask = MIIM_TYPE
'Если вы хотите выравнять только часть пунктов меню, тогда замените в следующей
'строке, а также в строке над End Sub число 0 на число пунктов, которое вы хотите
'оставить слева
MyTemp = GetMenuItemInfo(mnuH, 0, True, MnuInfo)
MnuInfo.fType = MFT_RIGHTJUSTIFY Or MFT_STRING
'Вам также надо заменить "MenuCaption" на имя пункта, которое будет крайним слева
'в новой расстановке
MnuInfo.cch = Len("MenuCaption")
MnuInfo.dwTypeData = "MenuCaption"
MnuInfo.cbSize = Len(MnuInfo)
MyTemp = SetMenuItemInfo(mnuH, 0, True, MnuInfo)
MyTemp = DrawMenuBar(Me.hwnd)
End Sub
|
| Отправитель вопроса @LEXis
Приветствие!
Не подскажите, как из VB отключить клавиатуру?
Заранее спасибо.
|
|
| Требуются люди
Хочу напомнить, что еще пусты многие вакансии рассылки:
- Рубрика "Рецензия книг"
- Рубрика "Практикум на примерах"
Также можно просто присылать коды.
|
| Проекты группы СообЧа-VB
Вот проекты которые на данный момент в рабочем состоячнии:
- Сообчайлер: почтовый клиент
- Крестики - Нолики: игра :)
- Secret CODE: шифратор
- Inet TIMER: блокиратор интернета
|
|
Код моей кнопки:
<!-- SnoozeX Design "PLAY" -->
<a href="http://snoozex.boom.ru" TARGET="_blank"><BR><IMG SRC="http://snoozex.boom.ru/new.gif" WIDTH=88 HEIGHT=31 BORDER=1 ALT="SnoozeX Design"></a>
<!-- SnoozeX Design "END" -->
|
© 2000 - 2001 @LEXis & Design by SnoozeX Design
|
Рассылка является составной частью проекта "СообЧа - СООБщество ЧАйников"
© 2000 - 2001 СообЧа (СООБщество ЧАйников)
|
| |
Спасибо за внимание. Ваш @LEXis |
|