VBNet
VBMania
Голосование: Голосования сайта VBNet.Ru. Результаты голосований передаются на сайт. Проследите, что есть соединение с интернетом. Ссылки: |
Господа!!! читайте MSDN!!! Несколько слов от автора:
Господа! Материалы для рассылки скоро закончаться! У кого есть хорошие коды, достойные появления на сайте VBNet.Ru и в этой рассылке, просьба присылать мне. Особенно буду рад кодам Visual Basic .Net.
Читайте! Содержание выпуска
Книги
Остальные книги о VB можно найти здесь. наверх Как заблокировать стандартное контекстное меню Данный пример покажет, как можно заблокировать стандартное контекстное меню элемента TextBox. Расположите на форме TextBox, а также создайте невидимое меню mnuText и как минимум одно подменю. Запустите проект, нажмите правой клавишей мыши на TextBox'е... Private Declare Function LockWindowUpdate Lib "User32" (ByVal hwndLock As Long) As Long Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = vbRightButton Then LockWindowUpdate Text1.hWnd Text1.Enabled = False DoEvents PopupMenu mnuText Text1.Enabled = True LockWindowUpdate 0& End If End Sub наверх Изменение вида каретки Вы знаете, что такое каретка? Это та вертикальная палочка, котрая постоянно мигает в любом текстовом редакторе, когда вы набираете какой-либо текст, и она медленько так передвигается вместе с вашими буковками по экрану. Этот небольшой пример покажает, как изменить вид этой самой каретки. В изменении вида каретки принимает участие API-функция CreateCaret Declare Function CreateCaret Lib "user32" (ByVal hwnd As Long, ByVal hBitmap As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long ByVal hwnd - обозначает хэндл окна, в котором меняется вид каретки Следующий пример покажет различные способы изменения вида каретки Добавьте на форму 1 PictureBox и 3 TextBox'а. Загрузите в элемент PictureBox bmp-файл. Запустите проект на выполнение, нажимайте ТАБУЛЯТОР и смотрите, как меняется вид каретки.
Запретить ввод определенных символов Private Sub Text1_KeyPress(KeyAscii As Integer) Dim sTemplate As String 'Replace the '!@#$%^&*()_+=' какие символы игнорировать sTemplate = "!@#$%^&*()_+=" If InStr(1, sTemplate, Chr(KeyAscii)) > 0 Then KeyAscii = 0 End Sub наверх Как вернуться на то же место, при потере фокуса Dim x Private Sub Text1_GotFocus() On Error Resume Next Text1.SelStart = x End Sub Private Sub Text1_LostFocus() x = Text1.SelStart End Sub наверх Как очистить все TextBox'ы на форме Добавьте на форму несколько элементов TextBox и CommandButton Private Sub Command1_Click() Dim Contrl As Control For Each Contrl In Form1.Controls If (TypeOf Contrl Is TextBox) Then Contrl.Text = "" Next Contrl End Sub наверх Добавить новую линию в существующий текст элемента TextBox Добавить Command Button на форму Private Sub Command1_Click() Dim NewText As String With Text1 'replace 'My New Text' with the Text you want to add NewText = "My New Text" .SelStart = Len(.Text) .SelText = vbNewLine & NewText End With End Sub Private Sub Form_Load() Text1.Text = "My Initial Text" End Sub наверх Мои программы BalloonMessage for MS Agent BalloonMessage for Microsoft Agent реализует диалог программы с
пользователем, используя при этом технологию Microsoft Agent. OCX реализует три
типа диалоговых окон: InputBox, MsgBox и MsgLabels. Автора: Шатрыкин Иван и Павел Сурменок. наверх Вопрос/Ответ Здесь Вы можете задать вопрос, или ответить на уже имеющиеся вопросы. Вопросы:Автор вопроса: Mirus Ответ ожидается по этому адресу Как проиграть midi файл находящийся в файле ресурсов не сохраняя его на диск? Автор вопроса: I hate the fucking world Ответ ожидается по этому адресу Люди кто знает как определить серийный номера жесткого диска? Именно ЖД, о не логического диска С, D и т.д., т.к. после форматирования номера логических дисков изменяются.Очень срочно Автор вопроса: alek Ответ ожидается по этому адресу А возможно ли закрыть из VB окно сеанса ДОС? Автор вопроса: goodroman Ответ ожидается по этому адресу 1) где взять MSDN на русском или хотя бы описание любых API-функций (на русском) 2) Если на первый вопрос ответа нет, то помогите разобраться с функцией GetClassName(1,2,3). Первое яначение я знаю чё значит, а второе и третье нет. Помогите пожайлуста. 3) Чё означает встроенная VB функция String$() и Left$() Автор вопроса: Daniel Zaharov Ответ ожидается по этому адресу Стоит задача создания «среды разработки» (возможно на VB), т.е. есть панель инструментов, взял нужный и поставил в нужном месте (как в VB, например). Кроме того, данная среда должна быть ориентирована на построение моделей, а именно один блок генерирует событие, другой –накапливает, третий – принимает на себя и т.д. Есть идея создать контролы, выполняющие данные функции. Может кто что посоветует, буду очень благодарен. Автор вопроса: Виталий Ответ ожидается по этому адресу Подскажите как сделать оформление в силе ХР под Win2k или в Win9x. Автор вопроса: goodroman Ответ ожидается по этому адресу Где можно раядобыть описание API-функций для реестра (желательно на русском)? И вообще есть какой-нить русскоязычный сайт посвящённый АПИ-функциям или где они рассматриваются? Ответы: Вопрос: Есть программа (ЕХЕ-файл) написаная мной как-то давненько. Все данные об этой прогрмамме утеряны. Есть ли возиожность каким то способом разобрать снова эту программу, для изменений. Если есть, намыльте как это делается. Ответ: Автор ответа: I hate the fucking world Просто, но тебе необходимо знать ASM на 50-99% ты ее просто дизасемблиш и смотриш код. Ответ: Автор ответа: Neutral Единственный способ - это использовать дизассемблер, но там без знаний acm'а не обойтись. Ну можно еще попытаться найти утилиты для перевода кода ассемблера в VB, но я не уверен если для перевода в VB(в Delphi и С есть) и на 100% они тебе ничего не переведут. Так что лучше садись вспоминай что ты там напрограммил и пиши снова. Вопрос: 1. В PictureBox, методом PaintPicture закинул рисунок. Как его сохранить в файл? 2. Как получить свойства принтера. Т.е. вызвать родное окно с его родными свойствами? Ответ: Автор ответа: Саша Карамнов SavePicture ИмяОбъекта.Picture, "ПутьСКонечным файлом" Пример: SavePicture Picture1.Picture, "C:\Picture.bmp" Вопрос: 1. Как сделать так, чтобы какое-нибудь событие сопровождалось звуком, например при щелчке по кнопки раздавался сигнал. 2. Не могу понять, как пользоваться элементом ProgressBar, мне надо, чтобы через каждые 10 секунд прибавлялось одно деление. Ответ: Автор ответа: I hate the fucking world На форму ставиш таймер с интервалом 10000 в коде пишеш progressbar1.value=progressbar1.value+1 и все Вопрос: Я еще новичек в VB, поэтому можетэто и глупый вопрос, но как обратиться к элементу строки стоящим под n-ым номером? Ответ: Автор ответа: Nechaev Sergey Чтобы получить символ N из строки надо использовать функцию Mid Mid(строка, начало извлекаемой подстроки, ее длина) Например дана строка Привет Mid("Привет", 3, 2) даст подстроку "ве" (я мог ошибиться но примерно так) Чтобы получить энный символ укажи Начало=N, длинна=1. Ответ: Автор ответа: Neutral Просто используй функцию Mid. Ее синтаксис: Mid(строка, начало выделения, длина выделения) То есть если тебе надо обратиться например к 10 элементу строки stroka ты пишешь: Mid(stroka, 10, 1) Этим ты выделишь один 10 элемент строки stroka. Ответ: Автор ответа: Luza newstr = mid(yourstr,n,m) newstr - фрагмент строки yourstr - исхдная строка n - с какого символа (по счету) начинать вырезать m - сколько символов вырезать Пример: yourstr="Никомунекабельность" newstr=mid(yourstr,4,6) Print newstr 'newstr="омунек" Ответ: Автор ответа: Артем Кривокрисенко Я, конечно, понимаю, что новичкам не очень просто общаться с "продвинутыми" программистами, но в вопросе можно было указать, к элементу чего тебе нужнго обратиться. Обратиться к n-ому элементу в массиве: strText=strArray(n) где StrText - переменная, в которую поместится текст atrArray - массив переменных Обратиться к n-ому элементу в ListBox'е: strText=lstText.list(n) где strText - переменная, в которую поместится текст lstText - твой ListBox Внимание! нумерация начинается с 0 Если ты не нашел ответа на свой вопрос, можешь написать мне - Artyom_kr@mail.ru. Рекомендую подписаться к конференции СообЧа - VB. Там тебе дадут ответы на все твои вопросы. Подписать ся можно, отправив пустое письмо по этому адрессу: VB-on@soobcha.org Ответ: Автор ответа: Alexander Функция Mid. Вопрос: Где можно вяять инфу по работе с DirectX'ом. Ответ: Автор ответа: Артем Кривокрисенко www.msdn.microsoft.com - первоисточник информации по программированию. О DirectX там тоже есть инфа. Диски MSDN. У меня MSDN за январь 2001. там весь четвертый компакт посвящен DirectX (DirectX SDK(сам не знаю, что это такое), хэлп и примеры (есть для Visual C++ и даже для VB)) www.vbstreets.ru - здесь есть несколько исходников. Вопрос: Есть код, позволяющий создать окно произвольной формы. В Win9x/Me все работает как положено, а в Win XP ненужные участки формы не обрезаются, т.е. на экране форма имеет вид прямоугольника. Кто подскажет, в чем дело? Код программы привожу: Option Explicit 'Объявляем API-функцию, которая так сказать 'накладывает созданный регион на окно (те 'части которые остались за пределами 'региона исчезают), где: hwnd - идентифика- 'тор окна, на котором нужно "выдавить" 'форму, hRgn - "формочка" для окна, 'bRedraw - перерисовывать ли окно после '"выдавления". Private Declare Function SetWindowRgn _ Lib "user32" (ByVal hwnd As Long, _ ByVal hRgn As Long, ByVal bRedraw As _ Boolean) As Long 'Объявляем API-функцию чтобы создать 'регион-"формочку" (состоит регион из n-ого 'количества точек, которое необходимо 'задать), где: lpPoint - первая точка 'региона, nCount - количество точек, 'nPolyFillMode - описание метода заливки 'полигона. Private Declare Function CreatePolygonRgn _ Lib "gdi32" (lpPoint As POINTAPI, _ ByVal nCount As Long, ByVal _ nPolyFillMode As Long) As Long 'Объявляем тип для описания координат 'каждой точки Private Type POINTAPI x As Long y As Long End Type 'Объявляем массив P по типу POINTAPI Dim P(128) As POINTAPI Private Sub Form_Load() 'Присвоим свойству Picture формы такого 'же вида свойство Picture = Image1 'Записываем код для каждой точки, 'описывающий её координаты в пикселах P(0).x = 448: P(0).y = 25 P(1).x = 97: P(1).y = 45 P(2).x = 98: P(2).y = 33 'Тут задаются координаты точек от 3 до 125 P(126).x = 90: P(126).y = 43 P(127).x = 93: P(127).y = 45 P(128).x = 448: P(128).y = 25 'Объявляем переменную, содержащую 'регион Dim Rgn As Long 'Создаём регион Rgn = CreatePolygonRgn(P(0), 128, 0) '"Выдавливем форму" Call SetWindowRgn(hwnd, Rgn, True) End Sub Ответ: Автор ответа: RaZoom Не пробовал после Rgn = CreatePolygonRgn(P(0), 128, 0) вставить строку Debug.Print Rgn А дело в том, что полигон не создается из-за некорректного вызова функции. Надо так: Rgn = CreatePolygonRgn(P(0), 128, ALTERNATE) или Rgn = CreatePolygonRgn(P(0), 128, WINDING) но не 0. Для справки: Const ALTERNATE = 1 Const WINDING = 2 Ответ: Автор ответа: Артем Кривокрисенко Все дело в том, что вызывая функцию CratePolyRgn ты ставишь третий параметр, определяющий режим создания региона, 0. Поэтому эта функция возвращает 0 (то есть, произошла ошибка). Ставить необходимо один из следующих режимов: Public Const ALTERNATE = 1 'Пересекающиеся области региона "выколоты" не будут Public Const WINDING = 2 'Пересекающиеся области региона будут "выколоты" То есть, напиши: Rgn = CreatePolygonRgn(P(0), 128, ALTERNATE) или Rgn = CreatePolygonRgn(P(0), 128, WINDING) Очевидно, в 98-й не требубуется специально указывать этот параметр, а в XP - обязательно Ответ: Автор ответа: Vir Место: Rgn = CreatePolygonRgn(P(0), 128, 0) надо писать: Rgn = CreatePolygonRgn(P(0), 128, 1) И добавь после кода: DeleteObject Rgn (очищает память) Вопрос: А можно ли как-то узнать название (букву) CD-ROM'а? Ответ: Автор ответа: Luza Ставь на форму DriveListBox и кнопку. Теперь впиши код: Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long Private Sub Command1_Click() For t = 0 To Drive1.ListCount - 1 drive_name = Left(Drive1.List(t), 2) & "\" If GetDriveType(drive_name) = 5 Then MsgBox "Drive " & drive_name & " is CDROM" '0 - не удалось определить тип '1 - корневой директории диска не сущ. '2 - гибкий диск '3 - жесткий диск '4 - сетевой диск '5 - CDROM '6 -RAM - диск(виртуальный) Next t End Sub Вопрос: Как зделать так чтобы моя программа запускалась один раз, а когда программа запускалась второй раз требовала пароль??? Ответ: Автор ответа: Murat Shonov Можешь использовать запись в реестре или ини-файле глубоко в винде. Для реестра код простой: записать при первой загрузке, а потом проверять если ключ есть то требовать пароль SaveSetting "Имя_приложения", "Секция", "Ключ", "Установка" считывать n = GetSetting("Имя_приложения", "Секция", "Ключ", "Значение_по_умолчанию") Значение по умолчанию используется если такого ключа нет. Можно в разные места поназасовывать ключей типа от разных программ, а то юзеры сильно умными стали. А с ини сложнее там надо через АПИ функции. Но если надо пиши muha@land.ru Ответ: Автор ответа: RaZoom Это тебе поможет: If App.PrevInstance = True Then ... Ответ: Автор ответа: Артем Кривокрисенко Снова неточная формулировка вопроса. Непонятно, что нужно сделать: отслеживатьвторой запуск программы ВООБЩЕ, или запуск программы, если копия этой программы уже запущена. Отвечаю на оба вопроса: 1) При запуске программы проверим, запускалась ли программа хоть раз (попробуем считать из реестра этот параметр) Sub Form_Load() dim boolWasLoaded as boolean dim strPassword as string boolWasLoaded=iif( _ GetSetting (App.Path,"Options","WasLoaded","NO")="YES",True,False) if boolWasLoaded then 'Спрашиваем пароль strPassword=inputbox("Введите пароль!") 'Если пароль неверен, выходим if strPassword <> "Hello" then end Else 'Записываем в реестре, что программа уже была запущена SaveSetting app.path, "Options","WasLoaded","YES" end if end sub 2) При запуске программы проверяем, заущена ли уже копия этой программы Sub Form_Load() dim boolWasLoaded as boolean dim strPassword as string boolWasLoaded=app.PrevInstance 'Далее по той же схеме if boolWasLoaded then 'Спрашиваем пароль strPassword=inputbox("Введите пароль!") 'Если пароль неверен, выходим if strPassword <> "Hello" then end end if end sub Этот код не идеален. Продвинутый пользователь легко постаит значение "NO" в реестре. Но это уже вопросы шифрования и защиты. Ответ: Автор ответа: Rutshtein Alex Используй в Form_Load() свойство App.PrevInstance, собствеено если оно true, то твоя программа уже запущена и можешь спрашивать пароль. Вопрос: Подскажите, как в тексте программы задать св-во MouseIcon? Что-то в хелпах по этому поводу ничего нет. Ответ: Автор ответа: RaZoom Me.MousePointer = vbCustom Me.MouseIcon = LoadPicture("<Путь_к_файлу_курсора>") Ответ: Автор ответа: Luza Вот, например: Private Sub Form_Load() Form1.MouseIcon = Picture1.Picture Form1.MousePointer = 99 'Иконка пользователя End Sub Ответ: Автор ответа: Артем Кривокрисенко ТвойКонрол.MouseIcon=ТвойIcon. ТвойIcon - это твоя иконка. Это может быть свойство Picture какого-то контрола. Но туда должна быть загружена иконка. Можно загрузить картинку из файла - используй функцию LoadPicture. Вопрос: Подскажите как создать или удалить строковый параметр в реестре, например в автозагруяке. Ответ: Автор ответа: Luza 'Registry keys Public Const HKEY_CLASSES_ROOT = &H80000000 Public Const HKEY_CURRENT_USER = &H80000001 Public Const HKEY_LOCAL_MACHINE = &H80000002 Public Const HKEY_USERS = &H80000003 Public Const HKEY_PERFORMANCE_DATA = &H80000004 Public Const HKEY_CURRENT_CONFIG = &H80000005 Public Const HKEY_DYN_DATA = &H80000006 'Registry access constants Public Const KEY_QUERY_VALUE = &H1 'Permission to query subkey data. Public Const KEY_SET_VALUE = &H2 'Permission to set subkey data. Public Const KEY_CREATE_SUB_KEY = &H4 Public Const KEY_ENUMERATE_SUB_KEYS = &H8 Public Const KEY_NOTIFY = &H10 Public Const KEY_CREATE_LINK = &H20 Public Const KEY_READ = KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Public Const KEY_WRITE = KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Public Const KEY_ALL_ACCESS = KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_SUB_KEY Or KEY_CREATE_LINK Or KEY_SET_VALUE Public Const REG_OPTION_NON_VOLATILE = 0& Public Const REG_OPTION_VOLATILE = &H1 Public Type SECURITY_ATTRIBUTES nLength As Long lpSecurityDescriptor As Long bInheritHandle As Long End Type Public Enum RegTypes RegNonee = 0 RegSZ = 1 RegExpandSz = 2 RegBinary = 3 RegDword = 4 RegDwordLittleEndian = 4 RegDwordBigEndian = 5 RegLink = 6 RegMultiSz = 7 RegResourceList = 8 RegFulResourceDesc = 9 End Enum Declare Function RegOpenKeyEx Lib "advapi32" 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 RegSetValueEx Lib "advapi32" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal szData As String, ByVal cbData As Long) As Long Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long Declare Function RegQueryValueEx Lib "advapi32" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, ByRef lpType As Long, ByVal szData As String, ByRef lpcbData As Long) As Long Declare Function RegCreateKeyEx Lib "advapi32" 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, ByRef lpSecurityAttributes As SECURITY_ATTRIBUTES, phkResult As Long, lpdwDisposition As Long) As Long Public Function RegGetValue(Root As Long, SubKey As String, Key As String) As String Dim Buffer As String, hKey As Long, nType As Long, nSize As Long RegGetValue = "" If Not RegOpenKeyEx(Root, SubKey, 0, KEY_READ, hKey) Then nSize = 0 RegQueryValueEx hKey, Key, 0, nType, Buffer, nSize If hKey And nSize > 0 And nType = RegSZ Then Buffer = Space(nSize + 1) RegQueryValueEx hKey, Key, 0, nType, Buffer, nSize RegGetValue = Left(Buffer, nSize - 1) RegCloseKey hKey End If End If End Function Public Sub RegSetValue(Root As Long, SubKey As String, Key As String, value As String) Dim hKey As Long, sa As SECURITY_ATTRIBUTES, nDisp As Long If Not RegCreateKeyEx(Root, SubKey, 0, vbNull, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, sa, hKey, nDisp) Then RegSetValueEx hKey, Key, 0, RegSZ, value, Len(value) + 1 RegCloseKey hKey End If End Sub Использование: sUser = RegGetValue(HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion", "RegisteredOwner") RegSetValue HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion", "RegisteredOwner", "Darth Vader" Ответ: Автор ответа: Артем Кривокрисенко На сайте www.vbnet.ru есть целая статья по этому поводу. Вопрос: 1. Можно ли зделать прозрачную форму? Если да то как? (BackColor - прозрачный) 2. Как Получить управление с помощью колесика мышы? Ответ: Автор ответа: Ревягин_Алексей Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal _ hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Const WS_EX_TRANSPARENT& = &H20& ' окно является прозрачным и не скрывает окна под собой Dim tmplong1 As Long SetWindowLong Me.hwnd, -20, tmplong1 Or WS_EX_TRANSPARENT& Me.Height = Me.Height - 10 Me.Height = Me.Height + 10 Ответ: Автор ответа: Артем Кривокрисенко На сайте www.vbnet.ru есть статья и по этому поводу. Можете заполнить эту форму, либо отослать вопрос СЮДА Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта. |
|||||||||||||||
Выпуск подготовили: |
Сурменок Павел |