VBNet
VBMania
Голосование: Голосования сайта VBNet.Ru. Результаты голосований передаются на сайт. Проследите, что есть соединение с интернетом. Ссылки: |
Господа!!! читайте MSDN!!! Несколько слов от автора:
Новый выпуск!
Читайте! Содержание выпуска
Книги
Остальные книги о VB можно найти здесь. наверх Имена компьютеров в сети Очень необходимый пример, который позволяет узнать имя подсети, в которой вы работаете, а также имена всех компьютеров в данной сети, а также имена ресурсов, доступ к которым открыт на каждом из компьютеров. Большой объем данного примера не позволяет разместить его на страницах "Библиотеки кодов", поэтому вот вам ссылка для загрузки проекта в ZIP-файле. Определение раскладки клавиатуры любого окна Хотите знать, какая раскладка клавиатуры у любой программы, запущенной в данный момент? Будь то Microsoft Word, простейший Блокнот или любая программа для редактирования текстов. Теперь нет ничего проще. Благодаря форуму http://bbs.vbstreets.ru и человеку, ответившему на этот вопрос, вы можете использовать этот пример в своих программах. Прежде
всего, вам понадобится модуль из ранее
опубликованного примера "Поиск hwnd процесса на
панели задач", ну а на основной форме
добавьте элемент CommandButton.
Создание директории любой степени вложености Данный пример работает на всех версиях ВБ (5 и 6, поскольку более старые версии ВБ я практически не видел). Sub MakeDirPath(dirname As String) Dim i As Long, path As String Do i = InStr(i + 1, dirname & "\", "\") path = Left$(dirname, i - 1) If Right$(path, 1) <> ":" And Dir$(path, vbDirectory) = "" Then MkDir path End If Loop Until i >= Len(dirname) End Sub Private Sub Command1_Click() Call MakeDirPath("c:\1\2\3\4\") End Sub наверх Функция для изменения расширения файла Данный пример очень прост, поэтому особых пояснений не нужно. Function ChangeFileExtension(FileName As String, Extension As String, Optional AddIfMissing As Boolean) As String Dim i As Long For i = Len(FileName) To 1 Step -1 Select Case Mid$(FileName, i, 1) Case "." ChangeFileExtension = Left$(FileName, i) & Extension Exit Function Case ":", "\" Exit For End Select Next If AddIfMissing Then ChangeFileExtension = FileName & "." & Extension Else ChangeFileExtension = FileName End If End Function Private Sub Command1_Click() MsgBox ChangeFileExtension("ggg.htm", "txt") MsgBox ChangeFileExtension("ggg", "txt", True) End Sub наверх Определить, имеет ли папка подпапки Private Const MAX_PATH = 260 Private Type SHFILEINFO hIcon As Long iIcon As Long dwAttributes As Long szDisplayName As String * MAX_PATH szTypeName As String * 80 End Type Private Declare Function SHGetFileInfo Lib "Shell32" Alias "SHGetFileInfoA" (ByVal pszPath As Any, ByVal dwFileAttributes As Long, psfi As SHFILEINFO, ByVal cbFileInfo As Long, ByVal uFlags As Long) As Long Function FolderHasSubFolders(ByVal sPath As String) As Boolean Const SFGAO_HASSUBFOLDER = &H80000000 Const SHGFI_ATTRIBUTES = &H800 Dim FInfo As SHFILEINFO SHGetFileInfo sPath, 0, FInfo, Len(FInfo), SHGFI_ATTRIBUTES FolderHasSubFolders = (FInfo.dwAttributes And SFGAO_HASSUBFOLDER) End Function Private Sub Command1_Click() MsgBox FolderHasSubFolders("C:\Program Files") MsgBox FolderHasSubFolders("C:\Program Files\NetMeeting") End Sub наверх Мои программы BalloonMessage for MS Agent BalloonMessage for Microsoft Agent реализует диалог программы с
пользователем, используя при этом технологию Microsoft Agent. OCX реализует три
типа диалоговых окон: InputBox, MsgBox и MsgLabels. Автора: Шатрыкин Иван и Павел Сурменок. наверх Вопрос/Ответ Здесь Вы можете задать вопрос, или ответить на уже имеющиеся вопросы. Вопросы:Автор вопроса: kakerss Ответ ожидается по этому адресу у меня 4 вопроса но особенно меня волнуют 1 и 4(в особенности) вопросы. 1).как через winsock отправлять файлы 2).как из *dll использовать ресурсы 3).как с помощью vb запорлить папку 4).как в ходе работы программы записовать текст прямо в *exe-шник программы и читать его от туда! Автор вопроса: Николай Шаманов Ответ ожидается по этому адресу Где найти библиотеку VB со статистическими или аналитическими функциями, например вычисление корреляции между массивами? Всё-таки испольяование Excel тяжеловесно! Автор вопроса: HoodWin Ответ ожидается по этому адресу Как ассоциировать приложение с какой либо папкой. Т. е. чтобы при её открытии запускалась и программа. Автор вопроса: Vadim Ответ ожидается по этому адресу Как узнать рассшареные ресурсы на удаленом компе. Автор вопроса: ALEX Ответ ожидается по этому адресу А можно передать "нажатие" клавиш на клаве программе, которая уже запущена? Автор вопроса: Лёха Ответ ожидается по этому адресу Кто знает как получить содержимое ListBox с помощью API??? Автор вопроса: Kirill I. Vinokurov Ответ ожидается по этому адресу 1) Мне надо чтобы файл readme.txt записывался на все компьютеры в сети, например, в папку C:\Мои документы\. 2) Подскажите где можно найти подробное описание работы с MAPI. Можно (и нужно :)) ссылку. Автор вопроса: efimov_oleg Ответ ожидается по этому адресу Существует какой-либо контрол для отображение полей БД в виде таблицы, и как им пользовааться. А то использовать несколько ListBox-ов кажется перегибом. Автор вопроса: Алексей Ответ ожидается по этому адресу Как использовать файл "programm.exe.manifest". У меня однажды получилось, интерфейс действительно стал в стиле ХР, но потом убрал ссылку на какую-то библиотеку и все пропало. Win XP начал выдавать ошибку в msvbm60.dll прияапуске приграммы. Удаляю .manifest - все работает, но интерфейс становится стандартным. Как это исправить? Автор вопроса: XAM Ответ ожидается по этому адресу Суть проблемы: есть база данных (mdb), в которой есть например 5 полей, первое из которых - время записи. Хочется просматривать значения полей в виде графиков. Использовал для этой цели MSChart, привязанный к Adodc. Данные отображаются сносно, но я не смог найти, как заставить MSChart отображать на оси времени не номера записей (R1...R5)а значения поля времени соответствующих записей. Кто знает, как это сделать не сильно выворобушкываясь? Или есть какой-нить более продвинутый контрол? Автор вопроса: ShAdE Ответ ожидается по этому адресу Кто-нть знает как можно поместить свой эелмент в панель управления, как например это делает ReGet?? Принимаются любые мысли и ссылки на ресурсы, посвященные этому вопросу... Автор вопроса: Ivan Salnikov Ответ ожидается по этому адресу Как можнл перехватить нажатие клавиши tab на каком нибудь контроле, keypress и keydown не работают. Может надо пользоваться какой-нибудь API-шной функцией, поскольку вроде Windows перехватывает упрвление на себя? Ответы: Вопрос: Подскажите как открыть Базу данных Microsoft Access 2000? С помощью Data1.databasename не получается, ругается что не подходящий формат! Ответ: Автор ответа: VMJ Используй DAO 3.6 - в ссылках редактора (примерно там где добавляются новые компоненты) А свой элемент дата запускай таким образом: dim mDb as database set mDb=opendatebase("Имя файла") set data1.recordset=mDb.openrecordset("Название таблицы или SQL-запрос", dbopendynaset) 'или Dbopentable, Dbopensnapshot.... Будет работать как из пушки, но будут проблемы с подготовкой дистрибутива - стандартный паковщик "заточен" под DAO 3.5 и недостающие компонеты придется доставлять "ручками"... Вопрос: Суть проблемы: Создается файл *.mdb, в котором создается таблица (например на 5 полей), в которую затем пишутся real-time данные. Проблема в том, что из-за св-ва Required=true прога требует обязательного заполнения данными всех полей. А данные (иногда бывает) могут отсутствовать в некоторых полях. Каким образом и где в коде установить св-во Required в false? Или есть другой выход из положения? Ответ: Автор ответа: Александр Чернов При создании полей в Access-е 97 с пом. DBEngine по умолч. св-во Required = False. Если же ты польз-ся чем-то, что по умолч. ставит это св-во в Труе, то устанавливай св-во в лоб: Dim dbNew As Database Dim tdNew As TableDef Dim fldNew As Field Set dbNew = DBEngine.CreateDatabase("D:\db1", dbLangCyrillic) Set tdNew = dbNew.CreateTableDef("TempTable") Set fldNew = tdNew.CreateField("fld1", dbText, 20) fldNew.Required = False tdNew.Fields.Append fldNew Set fldNew = tdNew.CreateField("fld2", dbLong) fldNew.Required = False tdNew.Fields.Append fldNew Set fldNew = tdNew.CreateField("fld3", dbCurrency) fldNew.Required = False tdNew.Fields.Append fldNew Set fldNew = tdNew.CreateField("fld4", dbInteger) fldNew.Required = False tdNew.Fields.Append fldNew Set fldNew = tdNew.CreateField("fld5", dbBoolean) fldNew.Required = False tdNew.Fields.Append fldNew dbNew.TableDefs.Append tdNew dbNew.Close Set fldNew = Nothing Set tdNew = Nothing Set dbNew = Nothing А если тебе надо какое-то временное хранилище для real-time, то может воспользоваться чем-то попроще, напр. текстовым файлом с разделителями или dbf? Вопрос: Как перехватить сообщения Windows (все подряд MsgBox). А еще лучше определить строку, которая находится под мышкой, в любом приложении Win. Это вобще возможно? Для того, чтобы легче было понять проблему объясню на пальцах. Представьте лупу из специальных возможностей Windows. Висит она значит в углу, и отображает только текст, находящийся под мышкой (без графики). Или текст сообщения, выскочившего при ошибке, копировании, перемещении и т.д. На самом деле мне нужна не лупа, а нечто другое, поэтому не пишите как увеличить картинку. Мне нужен только текст. Ответ: Автор ответа: Лёха Если знать hWnd окна под курсором, то с помощью функции WindowTextFromWnd можно получить текст сообщения. Ответ: Автор ответа: shadow Как перехватывать системные сообщения - незнаю, а вот текст под курсором прочитать можно (вот тут кстати Артём Кривокрисенко и неправ :о) ): форма со свойством авторедрав = труе и таймером (интервал 200 - вполне достаточно) 'кстати кто спрашивал про енумвиндовс - можно тут посмотреть в действии МОДУЛЬ: Option Explicit Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long Public Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long Public 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 Const WM_GETTEXT = &HD Public m_Count As Long Public m_TopLevel As Long Public m_Buffer As String Public m_Results As String Global hWndOver As Long Global hWndParent As Long Global hWndParentOld As Long Public Function SeeText(Results As String) As Long m_Count = 0 m_Results = "" m_Buffer = Space$(1024) Call EnumWindows(AddressOf EnumMain, 0&) Results = m_Results SeeText = m_Count End Function Public Function EnumMain(ByVal hWnd As Long, ByVal lParam As Long) As Long m_TopLevel = hWndOver Call EnumChildWindows(hWndParentOld, AddressOf EnumChild, 0&) End Function Public Function EnumChild(ByVal hWnd As Long, ByVal lParam As Long) As Long SendMessage m_TopLevel, WM_GETTEXT, Len(m_Buffer), ByVal m_Buffer m_Results = m_Results & TrimNull(m_Buffer) & vbCrLf m_Count = m_Count + 1 End Function Public Function TrimNull(ByVal StrIn As String) As String Dim nul As Long nul = InStr(StrIn, vbNullChar) Select Case nul Case Is > 1 TrimNull = Left$(StrIn, nul - 1) Case 1 TrimNull = "" Case 0 TrimNull = Trim$(StrIn) End Select End Function '**** ФОРМА: Option Explicit Private OldX As Single Private OldY As Single Private TpX As Integer ' TwipsPerPixelX Private HotX As Integer Private HotY As Integer Private Type POINTAPI X As Long Y As Long End Type Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long Private Declare Function WindowFromPointXY Lib "user32" Alias "WindowFromPoint" (ByVal xPoint As Long, ByVal yPoint As Long) As Long Private Declare Function GetParent Lib "user32" (ByVal hWnd As Long) As Long Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long Sub Timer1_Timer() Dim pt32 As POINTAPI Dim ptx As Long, pty As Long Static hWndLast As Long ' позиция курсора GetCursorPos pt32 ptx = pt32.X pty = pt32.Y If ptx = HotX And pty = HotY Then Show ' окно под курсором hWndOver = WindowFromPointXY(ptx, pty) ' изменения hWndLast = hWndOver Cls hWndParent = GetParent(hWndOver) If hWndParent <> 0 Then hWndParentOld = hWndParent Else hWndParentOld = hWndOver End If 1 hWndParent = GetParent(hWndParent) If hWndParent <> 0 Then hWndParentOld = hWndParent GoTo 1 End If Dim msg As String If SeeText(msg) Then Else msg = "Нет там текста" End If Print "Текст в подмышкином окне: " + msg Height = (Height - ScaleHeight) + CurrentY End Sub 'їShadow '****** вроде работает Если скажут как ловить системные сообщения - делись Вопрос: Простейшая ситуация, но не знаю как ее решить. Есть два ListBox, в первом и во втором содержится взаимосвязанная информация. Возникает ситуация когда количество строк в ListBox1 не вмещаются на экран, и для просмотра, тех что не "влезли" на экран приходится пользоваться полосой прокрутки. Можно ли сделать так что бы при использовании полосы прокрутки в ListBox1, информация в ListBox2, также поднималась (или опускалась) синхронно с информацией в ListBox1 ? Ответ: Автор ответа: Александр Чернов Используй событие Scroll первого списка: Private Sub List1_Scroll() List2.TopIndex = List1.TopIndex End Sub Вопрос: Как вывести " на экран с текстом Ответ: Автор ответа: Алексей CHR(34) или """" Ответ: Автор ответа: ViTal "Печатаем """ в тексте" или "Печатаем " & Chr(34) & " в тексте" Вопрос: При попытке подключить ActiveX компонент выскакивает ошибка: The file 'C:\WINDOWS\SYSTEM\VBDirect8.ocx' was not registerable as an ActiveX component (Файл 'C:\WINDOWS\SYSTEM\VBDirect8.ocx' не был registerable как ActiveX компонент) У меня Win98, DirectX 7.1. Может быть дело в DirectX? Что значит такая ошибка? Ответ: Автор ответа: Alexander "not registerable" = "не способен к регистрации", т.е. не соответствует стандартам, принятым для регистрации AcriveX. Причины этого могут быть разные, но это имя действительно не отвечает на стандартные вопросы при регистрации... Вопрос: Как считать параметры переданные программе в командной строке. Типа argc[] or argv[] in С# Ответ: Автор ответа: Алексей Если я правильно понял: запускаешь пргу так: EXENAME.exe qwerty а в form_load'e пишешь dim qwerty as string qwerty=command в итоге qwerty="qwerty" Ответ: Автор ответа: Артем Кривокрисенко Функция Command возвращает параметры коммандной строки. Вопрос: Подскажите, как и какие команды надо отправлять окну Winamp'а зная его hdc и прочее что бы останавливать или продолжать воспроизведение, менять уровень звука и другое? Ответ: Автор ответа: Алексей Я думаю, нужно искать каждую кнопку и посылать ей что-то типа Click Ответ: Автор ответа: Артем Кривокрисенко Зная hdc, ты можешь только рисовать на этом окне. Управлять им можно, зная его hwnd. Вопрос: Люди помогите "первоклашке"! Что значит работать с портами, или посылать данные на порт? Есть ли про это документация <ссылка>? Можно ли управлять эл/питанием на порту? К примеру у меня есть подключёный к COM`у провод от старой мышки. А на конце провода какое-нибудь устройство... например эл/моторчик... Можно ли подавать напрягу то +/-, то -/+ ? Как? Ответ: Автор ответа: Alexander 1. Порт - это некоторое значение в адресном пространстве компьютера, выставляемое на какое-то мгновение, используя Out-команду процессора. Т.е. у команды Out мы должны задать значение адреса и значение (комбинацию нулей и единиц), которое должно быть выставлено по этому адресу. 2. Порт связан "проводами" с некоторым устройством, которое должно "услышать" свою команду за короткое время (доли секунды) и отреагировать на неё, т.е. хотя бы запомнить переданную ему комбинацию нулей и единиц. А далее оно может поступать по своему усмотрению. Желательно также, чтобы оно известило подобным образом своего "заказчика", что оно хотя бы "расслышало" приказ. Поэтому, кроме программы, используют ещё и специальные микросхемы, важнейшим из элементов которых является понятие "регистра", способного "защёлкнуть", т.е. запомнить по команде значение, чтобы действовать дальше. 3. Не всякая операционная система даст возможность напрямую "дострелить" до порта. В частности, Windows XP, Windows 2000, Windows NT и другие, которые вынуждены "бороться" за свое выживание. Возникает следующий термин "драйвер". 4. Com-порт - тоже регистр и его возможности электропитания крайне малы: т.е. на наушник может хватить, а на запуск реле и не хватит. Т.е. этот регистр надо запомнить в регистре приёмника, а потом, "отсоединившись" от компьютера запустить, например, троллейбус в дорогу. Вот и всё. Т.е. по-хорошему для начала надо освоить понятия "регистр", "драйвер". А они потянут за собой и магистрали, и кольца защиты, и семафоры, и микроконтроллеры, и интерфейсы и массу других непонятных вещей :-) Вопрос: Как сделать, чтобы все буквы в тексте заменялись на какие-то другие буквы? Например: буквы а,б,в - заменялись на п,м,и. Ответ: Автор ответа: Артем Кривокрисенко strText=replace(strText,"а", "п") Все буквы "а" заменятся на "п" Ответ: Автор ответа: Лёха В VB есть такая функция Replace (строка в которой ищем,что ищем,на что заменить). Например: text1.text=Replace (text1.text,"а","п") Ответ: Автор ответа: Alexander Если при наборе текста, то обработкой событий KeyPress элемента формы, а если в уже имеющемся тексте, то, например, комбинацией InStr и Mid. Вопрос: вот проблема такая, ни как не получается ярлычек создать, еслть ли у кого-нибудь искодики для создания этих самых ярличков? Ответ: Автор ответа: Алексей Private Declare Function OSfCreateShellLink Lib "vb6stkit.dll" Alias "fCreateShellLink" (ByVal lpstrFolderName As String, ByVal lpstrLinkName As String, ByVal lpstrLinkPath As String, ByVal lpstrLinkArguments As String, ByVal fPrivate As Long, ByVal sParent As String) As Long Private Sub Form_Load() OSfCreateShellLink "C:\Win\Рабочий стол" & vbNullChar, "Блокнот", "C:\Win\Notepad.exe", "", True, "" End Sub Вопрос: Не могу раяобраться, в чем дело? Запутался в "трех соснах". Обычный SQL-яапрос: "Select Sum(Volume) from Fuel" - отрабатывается отлично. "Select Sum(Volume) from Fuel Where Year(Date) = nYear" выдается ошибка, что не хватает каких-то параметров. Причем, если яаменить переменную nYear на конкретное число, скажем, 2002, то все в порядке. (Volume и Date - поля таблицы Fuel). Подскажите пожалуйста, в чем может быть причина? Ответ: Автор ответа: Сергей А что такое nYear - переменная? "Select Sum(Volume) from Fuel Where Year(Date) = " & nYear Ответ: Автор ответа: dMedia Надо писать так: "Select Sum(Volume) from Fuel Where Year(Date) =" & nYear Ответ: Автор ответа: Chernov Dmitry Дело вообще-то в том, что обработчик SQL-запросов ничего не знает о переменных VB. Это другая программа. Он знает только имена полей таблицы из базы данных. А поля nYear там нету. Соответственно он и ругается... Поэтому пиши следующим образом: "Select Sum(Volume) from Fuel Where Year(Date) = " & nYear Если хечется узнать об этом более подробно, ищи документацию по SQL. Ответ: Автор ответа: Корик На мой взгляд тут одно из двух: 1. Очень нежелательно использовать слово Date для названия поля в базе данных 2. Если я правильно понял, то ты эти выражения используешь как string, а nYear - переменная с определённым годом. Тогда попробуй написать так: "Select Sum(Volume) from Fuel Where Year(Date) =" & nYear Ответ: Автор ответа: Грегер Сергей "Select Sum(Volume) from Fuel" - отрабатывается отлично. "Select Sum(Volume) from Fuel Where Year(Date) = nYear" Дел в том, что запрос -это строка, а nYear - переменная. Правильно будет так: "Select Sum(Volume) from Fuel Where Year(Date) ='" & CDATE(nYear) & "'" Общее правило - значения внутри запроса должны быть в одинарных кавычках. Данный пример годится в случае если nYear будет менятся. CDATE(nYear)- преобразование типа DATE в STRING. Из опыта советую не писать длинный строковый запрос а лепить его из несколких строк: SQLstr="Select Sum(Volume) from Fuel Where Year(Date) ='" fullSQL=SQLstr & CDATE(nYear) & "'" Ответ: Автор ответа: Dima скорее всего должно быть так: "Select Sum(Volume) from Fuel (Where (Year(Date) = " & nYear & "))" Ответ: Автор ответа: Damir Kh "Select Sum(Volume) from Fuel Where Year(Date) = #" & nYear & "#" Можете заполнить эту форму, либо отослать вопрос СЮДА Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта. |
|||||||||||||||
Выпуск подготовили: |
Сурменок Павел |