VBNet
VBMania
Голосование: Голосования сайта VBNet.Ru. Результаты голосований передаются на сайт. Проследите, что есть соединение с интернетом. Ссылки: |
Господа!!! читайте MSDN!!! Несколько слов от автора:
Простите великодушно! Совсем про рассылку забыл.
Читайте! Содержание выпуска
Книги
Остальные книги о VB можно найти здесь. наверх Определение координат позиции курсора в TextBox Добавьте на форму элемент TextBox. Private Type POINTAPI X As Long Y As Long End Type Private Declare Function GetCaretPos Lib "user32" (lpPoint As POINTAPI) As Long Private Sub Text1_KeyPress(KeyAscii As Integer) Dim XPos As Long Dim YPos As Long XPos = GetTCursX YPos = GetTCursY Me.Caption = "X: " & XPos & " Y: " & YPos End Sub Public Function GetTCursX() As Long Dim pt As POINTAPI GetCaretPos pt GetTCursX = pt.X End Function Public Function GetTCursY() As Long Dim pt As POINTAPI GetCaretPos pt GetTCursY = pt.Y End Function наверх Определить количество строк в ComboBox Расположите на форме элемент ComboBox, элемент TextBox и 2 элемента CommandButton. Добавьте в ваш проект модуль. 'КОД МОДУЛЯ Option Explicit Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Private Const GWL_WNDPROC = (-4) Private lpPrevWndProc As Long Public lHookedhWnd As Long Public iListItems As Integer Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Private Const LB_GETITEMHEIGHT = &H1A1 Private Const WM_CTLCOLORLISTBOX = &H134 Private Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long Private Declare Function MoveWindow Lib "user32" (ByVal hWnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Public Sub Hook() lpPrevWndProc = SetWindowLong(lHookedhWnd, GWL_WNDPROC, AddressOf WindowProc) End Sub Public Sub Unhook() Dim lRetVal As Long lRetVal = SetWindowLong(lHookedhWnd, GWL_WNDPROC, lpPrevWndProc) End Sub Function WindowProc(ByVal hw As Long, ByVal uMsg _ As Long, ByVal wParam As Long, ByVal lParam As Long) As Long WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam) Select Case uMsg Case WM_CTLCOLORLISTBOX Dim rc As RECT Dim lItemHeight As Long Dim lListHeight As Long Static bIgnore As Boolean Const LIST_ITEMS As Long = 20 If Not bIgnore Then With rc lItemHeight = SendMessage(lParam, LB_GETITEMHEIGHT, 0, ByVal 0&) lListHeight = lItemHeight * iListItems + 2 Call GetWindowRect(lParam, rc) bIgnore = True Call MoveWindow(lParam, .Left, .Top, (.Right - .Left), lListHeight, True) bIgnore = False End With End If Case Else End Select End Function 'КОД ФОРМЫ Private Sub Command1_Click() Command1.Enabled = Not (Command1.Enabled) Command2.Enabled = Not (Command2.Enabled) Hook End Sub Private Sub Command2_Click() Command1.Enabled = Not (Command1.Enabled) Command2.Enabled = Not (Command2.Enabled) Unhook End Sub Private Sub Form_Load() Command2.Enabled = False Text1 = "2" Command1.Caption = "Установить" Command2.Caption = "Восстановить" Dim i As Integer For i = 1 To 51 Combo1.AddItem "Num " & i Next iListItems = 2 lHookedhWnd = Combo1.hWnd End Sub Private Sub Text1_Change() iListItems = Val(Text1) If iListItems < 1 Then iListItems = 1 End If End Sub наверх Изменение длины ComboBox Данный пример покажет, как можно ограничить длину любого элемента (в количестве символов) ComboBox. Расположите на форме элемент CommandButton.
Разноцветный баттон Этот код покажет, как изменяется цвет кнопки при передвижении над ней курсора. Использование Images вместо CommandButton Очень часто вместо обычных кнопок используются картинки. Т.е. существует всего три картинки - одна на которую будут жать (img1), вторая отжатая (img2) и третья нажатая (img3) (img2 и img3 - невидимы). Делаем это так: Private Sub Form_Load() 'при загрузке формы картинка 1 принимает вид картинки 2 (отжатая) img1.Picture = img2.Picture End Sub Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) 'при нажатии мышкой на картинку 1, она принимает вид картинки 3 (нажатая) img1.Picture = img3.Picture End Sub Private Sub Image1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) 'при отпускании кнопки мышки картинка 1, она снова принимает вид картинки 2 (отжатая) img1.Picture = img2.Picture End Sub Этот приём знает каждый... Но есть в нём один
недостаток, а именно: при серии непрерывных
кликов на объект картинка почему-то реагирует
через раз. Т.е. то нажмётся, то не нажмётся. Так вот
вот сам совет :-) : чтобы этого избежать в событие
Image1_MouseDown нужно вставить строку Размножить на форме картинку Данный пример размножает картинку на форме с целью создания фона формы. Для данного примера нам потребуется поставить
на форму объект Image, привязать к нему
рисунок, который хотим размножить на всю форму.
Мои программы BalloonMessage for MS Agent BalloonMessage for Microsoft Agent реализует диалог программы с
пользователем, используя при этом технологию Microsoft Agent. OCX реализует три
типа диалоговых окон: InputBox, MsgBox и MsgLabels. Автора: Шатрыкин Иван и Павел Сурменок. наверх Вопрос/Ответ Здесь Вы можете задать вопрос, или ответить на уже имеющиеся вопросы. Вопросы:Автор вопроса: ogf Ответ ожидается по этому адресу У меня вопрос, как узнать список расшаренных ресурсов с определенного ip. Автор вопроса: Антон Ответ ожидается по этому адресу Как сделать screenshot экрана и передать его через WinSock, да еще и прочитать его, когда удаленный комп его примет? Автор вопроса: LexSys Ответ ожидается по этому адресу Работа с Winsock: 1. У меня есть Project1... в нём на форме есть Picture Box, как из этого пикчера переслать ияображение на Profect2... тоже в пикчер!!! 2. Как пересылать файлы? Автор вопроса: Oleg Ответ ожидается по этому адресу Как в VB подключить к Data базу Access 2000 и при этом защищенную паролем на открытие? Автор вопроса: goodroman Ответ ожидается по этому адресу Как отправить письмо из VB-кода? Для этого API-функция какая есть? Причем со вложенным файлом (письмо)... Автор вопроса: Алексей Ответ ожидается по этому адресу Кто-нить сталкивался с многопоточностью? Если есть такие, то может у кого есть код, который организует несколько УПРАВЛЯЕМЫХ потоков. Если есть у кого доки по многопоточности скиньте плз мне на мыло. Автор вопроса: Сергей Ответ ожидается по этому адресу Что-то я ничего не понимаю... Форматирую колонку с датами .Col = 2 For i = 1 To .Rows - 1 .Row = i .Text = Format(.Text, "dd.mm.yyyy hh:nn") Next А на форме получаю: - если dd > mm , то все OK! - усли dd < mm , то получаю mm.dd.yyyy hh:nn Такая пересортица получается, что и не поймешь какая всеже здесь дата!!! Может я что-то не то делаю? Автор вопроса: Diamond Ответ ожидается по этому адресу Есть прога - локальный чат, который использует широковещательные пакеты. так вот, надо написать прогу, которая слушает порт (на котором сидит этот чат) и принимает не только "свои" пакеты с сообщениями, но и "чужие". Короче говоря, че-то типа сниффера! Как это можно организовать? Автор вопроса: Винокуров К Ответ ожидается по этому адресу У меня такой вопрос, а можно ли сделать пинговальщик (или что-то вроде этого) удалённого компьютера и чтобы он рботал без соединения с интернетом? Автор вопроса: Лев Ответ ожидается по этому адресу Я делаю VB-программу, которая должна работать как background process, т.е. на заднем плане. И из этой программы мне нужно в определенный момент вызвать на передний план (foreground) окно другой программы. Трудность в том, что в системе имеется ограничение - Windows 98/Me, Windows 2000/XP: The system restricts which processes can set the foreground window. A process can set the foreground window only if one of the following conditions is true: a.. The process is the foreground process. b.. The process was started by the foreground process. И далее еще несколько условий, ни одно из условий в моем случае не выполняется. Знает ли кто-нибудь как это сделать? Автор вопроса: Andrushin Sergey Ответ ожидается по этому адресу Как создать подключ в реестре при помощи RegCreateKey, постоянно происходит ошибка, не могу понять в чём дело. Public Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long. Автор вопроса: Сергей Ответ ожидается по этому адресу Есть вопрос. Даже два. 1. Для сжимания базы ранее использовал DAO : Set fs = CreateObject("Scripting.FileSystemObject") 'Создаем файловую систему tmpMDB = fs.GetTempName 'Получаем временный файл DBEngine.CompactDatabase Base, tmpMDB, dbLangCyrillic 'Сжимаем базу данных fs.CopyFile tmpMDB, Base, True 'Переписываем файл Kill tmpMDB 'Удаляем временный файл А как это же сделать в ADO ??? В справке ACCESS 2000 ничего не нашел. 2. Для формы открыт один Recordset на MDB-файл. Мне его нужно сжать. Для того чтобы отсоединится от базы использую rstTEL.Close Set rstVED = Nothing Не помогает. Как же от нее отсоединится??? Автор вопроса: Doomsday Ответ ожидается по этому адресу Как нписать спектроанализатор (как в Winamp'е), т.е. как получить параметры звуковго потока, или как написать плагин к Winamp'у. Автор вопроса: Антон Ответ ожидается по этому адресу Как скопировать файл по WinSock'у? Автор вопроса: SAM Ответ ожидается по этому адресу В Excel программа на VBA. Моя процедура вешается на событие BeforeDoubleClick (Sub Worksheet_BeforeDoubleClick), как сделать так что бы после завершения моей процедуры DoubleClick не отрабатывался? или может есть другой способ для вызова моей процедуры по DoubleClick? Автор вопроса: Роман Ответ ожидается по этому адресу 1) Как в Data Bound Grid менять кол-во колонок без заполнения сетки? 2) Использую базу данных MDB(Acces), элементы Data и Data Bound Grid. Как редактировать базу? Автор вопроса: Ильдар Ответ ожидается по этому адресу Как можно создать метку (Label) во время работы программы, и как можно ее удалить. Причем добавление и удаление по возможности неограниченного количества Labelов за один запуск программы и по возможности чтобы они были систематизированы. Автор вопроса: Сергей Перехода Ответ ожидается по этому адресу Не мог бы мне кто-нибудь подсказать, как работать с числами в двоичной, 16-ричной, 8-ричной системами счисления. Может быть, в бэйсике есть какие-нибудь операции и функции для работы с ними? Ответы: Вопрос: Я хочу создать в реестре значение типа DWORD равное = 1, а оно мне создаёт 31(в шестнадцатеричной) и 49 (в десятичной). Привожу код. Подскажите пожайлуста где ошибка? Private Sub PiZdA_Click() Dim hREn As Long, IDenT As Long, znak As String hREn = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\", 0, KEY_ALL_ACCESS, IDenT) znak = 1 Print znak Call RegSetValueEx(IDenT, "NoDesktop", 0, REG_DWORD, ByVal znak, 4) End Sub Ответ: Автор ответа: Doomsday Не могу объяснить в чем суть, но код будет выглядеть так: Dim hREn As Long, IDenT As Long, znak As String hREn = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\", 0, KEY_ALL_ACCESS, IDenT) 'Вместо 1 можешь подставить любую другую цифру. znak = Chr(1) Print znak Call RegSetValueEx(IDenT, "NoDesktop", 0, REG_DWORD, ByVal znak, 4) Вопрос: Есть у меня проблема не как не могу решить её. Есть textbox когда я его закриваю с помащи свойства Locked от изменений то не получается можно его изменить с помащи меню которое выходит нажав на правую кнопку мышки и мне надо это убрать. Ответ: Автор ответа: Dima Сделай так: text1.enabled=false Если этот вариант не подходит, то напиши - отвечу как убрать это меню Ответ: Автор ответа: Doomsday Убери locked и пиши: Private Sub Text1_KeyPress(KeyAscii As Integer) KeyAscii = 0 End Sub Вопрос: У меня такой вопрос: Как вызвать меню файла (т.е. как в проводнике, когда щелкаешь по нему правой кнопкой) в собственной программе. Ответ: Автор ответа: Dima Используй PopupMenu(имя меню) в событии Mouse_Down. Вопрос: Есть ли способ сделать так, чтобы при выполнении определенного условия программа удалила сама себя с диска или что-нибудь в этом роде...? Ответ: Автор ответа: Nechaev Sergey Если надо удалит с диска саму прогу, то единственный выход здесь - это написать bat файл, который будет сносить екзкшник и прописать его выполнение в автозагрузку (желательно в реестр). При перезагрузки машины файл будет удален. Кстати говоря, bat файл умеет удалять сам себя. Ответ: Автор ответа: Артем Кривокрисенко Насколько мне известно, удалить программу, которая в данный момент выполняется, нельзя. Ответ: Автор ответа: P@Ssword На трояны потянуло ;-) '-------- создать bat-файл--------Open App.Path + "\Delself.bat" For Output As #1 Print #1, "@echo off" Print #1, ":try" Print #1, "del " + App.EXEName + ".exe" Print #1, "if exist " + App.EXEName + ".exe goto try" Print #1, "del " + App.Path + "\Delself.bat" Close #1 '----------------------------------------- Shell App.Path + "\Delself.bat", vbHide Вопрос: На форме поместил timer, progressbar. Мне надо, чтобы progressbar, дойдя до значения 85, двигался в обратную сторону. Ответ: Автор ответа: Nechaev Sergey Ну и что такого - если дошли до 85 ставим флаг, что в последствии надо идти назад. Потом проверям флаг и делаем что надо Private Sub Timer1_Timer() Static Down As Boolean If Down Then progressbar1.value = progressbar1.value - 1 Exit Sub End If progressbar1.value= progressbar1.value+ 1 If progressbar1.value>= 85 Then Down = True End Sub Ответ: Автор ответа: Корик Пользуйся: Dim flag As Integer Private Sub Form_Load() flag = 1 Timer1.Enabled = True End Sub Private Sub Timer1_Timer() If flag = 1 Then ProgressBar1.Value = ProgressBar1.Value + 1 Else ProgressBar1.Value = ProgressBar1.Value - 1 End If If ProgressBar1.Value = 85 Then flag = 0 End If If ProgressBar1.Value = 0 Then flag = 1 End If End Sub Ответ: Автор ответа: Doomsday Dim CS As Boolean Private Sub Timer1_Timer() If CS = False Then ProgressBar1 = ProgressBar1 + 1 Else ProgressBar1 = ProgressBar1 - 1 If ProgressBar1 = 85 Then CS = True If ProgressBar1 = 0 Then Timer1.Enabled = False End Sub Вопрос: podskagyte please, kak sozdat *.ini file , zapisat w nego String dannyje , a potom po zagruzke application odchitat eti dannyje w textbox . sreda VB 6.0 Ответ: Автор ответа: Doomsday Declare Function WritePrivateProfileString Lib "kernel32.dll" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Long lpApplicationName - Значение раздела INI-файла lpKeyName - Значение ключа lpString - Устанавлимое строковое значение lpFileName - Имя INI-файла Declare Function GetPrivateProfileString Lib "kernel32.dll" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long lpApplicationName - Раздел-имя,заключенное в квадратные скобки [] и группирующее ключи и значения. lpKeyName - Значение ключа.Ключ должен быть уникальным только внутри своего раздела. lpDefault - Возвращаемое значение, если правильное(допустимое) значение не может читаться. lpReturnedString - Строка фиксированной длины, получаемая при чтении любой строки файла или lpDefault. nSize - Длина в символах переменной lpReturnedString. lpFileName - Имя INI-файла для чтения. Если файла не существует, то файл будет создан при записи в него Вопрос: kak sdealat read / write registry key ? ne mogu najti primerow ? VB 6.0 Ответ: Автор ответа: Pistol Помести все это в модуль. Ты получишь следующие функции: SaveString, GetString, SaveDword, GetDword, DeleteKey и DeleteValue 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 ERROR_SUCCESS = 0& ' Registry API prototypes Declare Function RegCloseKey Lib "advapi32.dll" (ByVal Hkey As Long) As Long Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal Hkey As Long, ByVal lpSubKey As String, phkResult As Long) As Long Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal Hkey As Long, ByVal lpSubKey As String) As Long Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal Hkey As Long, ByVal lpValueName As String) As Long Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal Hkey As Long, ByVal lpSubKey As String, phkResult As Long) As Long Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal Hkey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal Hkey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long Public Const REG_SZ = 1 ' Unicode nul terminated string Public Const REG_DWORD = 4 ' 32-bit number Public Sub SaveKey(Hkey As Long, strPath As String) Dim keyhand& r = RegCreateKey(Hkey, strPath, keyhand&) r = RegCloseKey(keyhand&) End Sub Public Function GetString(Hkey As Long, strPath As String, strValue As String) Dim keyhand As Long Dim datatype As Long Dim lResult As Long Dim strBuf As String Dim lDataBufSize As Long Dim intZeroPos As Integer r = RegOpenKey(Hkey, strPath, keyhand) lResult = RegQueryValueEx(keyhand, strValue, 0&, lValueType, ByVal 0&, lDataBufSize) If lValueType = REG_SZ Then strBuf = String(lDataBufSize, " ") lResult = RegQueryValueEx(keyhand, strValue, 0&, 0&, ByVal strBuf, lDataBufSize) If lResult = ERROR_SUCCESS Then intZeroPos = InStr(strBuf, Chr$(0)) If intZeroPos > 0 Then GetString = Left$(strBuf, intZeroPos - 1) Else GetString = strBuf End If End If End If End Function Public Sub SaveString(Hkey As Long, strPath As String, strValue As String, strdata As String) Dim keyhand As Long Dim r As Long r = RegCreateKey(Hkey, strPath, keyhand) r = RegSetValueEx(keyhand, strValue, 0, REG_SZ, ByVal strdata, Len(strdata)) r = RegCloseKey(keyhand) End Sub Function GetDword(ByVal Hkey As Long, ByVal strPath As String, ByVal strValueName As String) As Long Dim lResult As Long Dim lValueType As Long Dim lBuf As Long Dim lDataBufSize As Long Dim r As Long Dim keyhand As Long r = RegOpenKey(Hkey, strPath, keyhand) ' Get length/data type lDataBufSize = 4 lResult = RegQueryValueEx(keyhand, strValueName, 0&, lValueType, lBuf, lDataBufSize) If lResult = ERROR_SUCCESS Then If lValueType = REG_DWORD Then GetDword = lBuf End If 'Else ' Call errlog("GetDWORD-" & strPath, False) End If r = RegCloseKey(keyhand) End Function Function SaveDword(ByVal Hkey As Long, ByVal strPath As String, ByVal strValueName As String, ByVal lData As Long) Dim lResult As Long Dim keyhand As Long Dim r As Long r = RegCreateKey(Hkey, strPath, keyhand) lResult = RegSetValueEx(keyhand, strValueName, 0&, REG_DWORD, lData, 4) 'If lResult <> error_success Then Call errlog("SetDWORD", False) r = RegCloseKey(keyhand) End Function Public Function DeleteKey(ByVal Hkey As Long, ByVal strKey As String) Dim r As Long r = RegDeleteKey(Hkey, strKey) End Function Public Function DeleteValue(ByVal Hkey As Long, ByVal strPath As String, ByVal strValue As String) Dim keyhand As Long r = RegOpenKey(Hkey, strPath, keyhand) r = RegDeleteValue(keyhand, strValue) r = RegCloseKey(keyhand) End Function Вопрос: Как открыть файл (например 123.wav) из директории с утановленной программы? Можно так: Private Sub Form_Load() MediaPlayer1.FileName=Dir("123.wav") End Sub Но если запускать прогу с ярлыка, то но будет искать его в директории, где находится ярлык! :( Ответ: Автор ответа: Nechaev Sergey чтобы получить путь, где лежит исполняемый файл надо использовать App.path - возвратит каталог с файлом без закрывающего слеша. Ответ: Автор ответа: Michael Fezulaev MediaPlayer.Filename=App.Path + "\123.wav" Ответ: Автор ответа: Loki А ты так пробовал: Private Sub Form_Load() MediaPlayer1.FileName= (app.Path & "\123.wav") End Sub Ответ: Автор ответа: Корик App.Path - даёт директорию, в которой находится прога Ответ: Автор ответа: Doomsday Все просто Private Sub Form_Load() If Right(App.Path, 1) = "\" Then MediaPlayer1.FileName = Dir(App.Path & "123.wav") Else MediaPlayer1.FileName = Dir(App.Path & "\" & "123.wav") End Sub Ответ: Автор ответа: Артем Кривокрисенко App.path возвращает путь к исполняемому файлу (без последнего слэша) Ответ: Автор ответа: Мунгалов Андрей А для этого есть такое свойство ярлыка как "Рабочая папка" в ней надо прописать дорогу до твоей директории. Либо использовать функцию App.Path которая и возвращает дорогу где находиться программа. Можете заполнить эту форму, либо отослать вопрос СЮДА Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта. |
|||||||||||||||
Выпуск подготовили: |
Сурменок Павел |