GlobalAlloc - Кто сказал что в VB нельзя работать шустро со строками? Вот живое доказательство, что можно ускорить в десятки раз скорость работы с помощью АПИ функций. P.S. Не знаю кому и зачем это может понадобиться, но хоть будет меньше возмущений о тормознутости VB!
Traffic - Пример иллюстрирует работу со статистикой соединения в 95/98/Me/2k/XP/2k3... ну и выше... вероятно ;) Измерение (в байтах) входящего/исходящего трафика, Получение скорости подключения, Вычисление текущей скорости закачки/выгшрузки, и прочее...
Road Monster v2.00 - В этой версии доступен один вид оружия, но у меня, к сожалению, не получилось решить проблему со столкновением и выводом текста(мерцает). Кому не лень, помогите. Следующая версия будет иметь 3 вида оружий, и еще что-нибудь...
21.06.2004 - "Молния MSDN", 14.06.2004
Важнейшие материалы, новые веб-ресурсы, продукты и технологии наших партнеров, веб-презентации, общение в режиме реального времени, мероприятия для разработчиков.
Как организовать поиск текста в окне компонента IE (SHDOCVW.DLL)?
Компонент используется в проге как браузер. Загружаю Web страницу, нужно на ней найти определенную строку текста.
Ответы:
Автор: Павел
Dim HTML As String = WebBrowser.document.body.innerHTML
Кстати, скорее всего регистр здесь будет критичен. То есть вот это:
Dim HTML As String = WebBrowser.document.body.innerhtml
может уже не сработать.
Вот, накорябал примерчик...
Private Sub Command1_Click()
MsgBox WebBrowser1.Document.body.innerHTML
End Sub
Private Sub Form_Load()
WebBrowser1.Navigate2 "http://localhost"
End Sub
Только учти, что получить содержимое документа можно только после его полной загрузки. Нельзя писать, например, так:
Потому что Navigate2 работает асинхронно, то есть не ожидает окончания загрузки, а сразу выполняет код дальше. Поэтому советую подписаться на событие DocumentComplete и в нём получать содержимое документа.
Встречал у дельфистов на форуме такую вещь: подключение к MySQL посредством libmySQL.dll. Библиотека писана на С. Хотелось знать её функции, как что делаю, переменные. Может кто программировал работу VB с MySQL.
Ответы:
Вопрос:
Как узнать, какой из Columbs'ов в ListView нажат, или как упорядочивать значения в нажатом столбце?
Код сортировки данных в listview по возрастанию/убыванию
Private Sub Form_Load()
Dim aa As ListItem
Set aa = ListView1.ListItems.Add(1, "a1x", "xbsdads")
aa.ListSubItems.Add 1, "s1x", "2xbsdads"
aa.ListSubItems.Add 2, "s12x", "xbsdadsw"
Set aa = ListView1.ListItems.Add(2, "a", "asdads")
aa.ListSubItems.Add 1, "s", "1asdads"
aa.ListSubItems.Add 2, "s1", "asdadsw"
Set aa = ListView1.ListItems.Add(3, "a1", "bsdads")
aa.ListSubItems.Add 1, "s1", "3bsdads"
aa.ListSubItems.Add 2, "s12", "bsdadsw"
ListView1.Sorted = True
End Sub
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
If ListView1.SortKey = ColumnHeader.Index - 1 Then
If ListView1.SortOrder = lvwDescending Then ListView1.SortOrder = lvwAscending Else ListView1.SortOrder = lvwDescending
Else
ListView1.SortOrder = lvwAscending
End If
ListView1.SortKey = ColumnHeader.Index - 1
End Sub
Вопрос:
Я работаю над интерфейсом БД, содержащей около полумиллиона записей и содержащей 2 таблицы (*.dbf).
Выборка по некоторым критериям занимает достаточное время. Хотелось бы чтобы на время выборки включался ProgressBar, который или реально отслеживал бы выборку, или, хотя-бы, эмулировал в цикле заполнение и сброс ProgressBar, что-бы пользователь знал, что программа не висит. Я видел такое в некоторых программах.
Вот пример кода:
SQL1 = "SELECT . . . FROM . . . INNER JOIN STREETS ON . . . WHERE " & crit
' Где crit - критерий поиска
Set rec = db.OpenRecordset(SQL1)
Form1.Show 'Вызов формы с предупреждением "Ждите, идет поиск"
Form3.Show vbModal 'Вызов формы 3 показа результата поиска
Unload Form1
Form1.Show 'Вызов формы с предупреждением "Ждите, идет поиск"
doevents
SQL1 = "SELECT . . . FROM . . . INNER JOIN STREETS ON . . . WHERE " & crit
' Где crit - критерий поиска
Set rec = db.OpenRecordset(SQL1)
Form3.Show vbModal 'Вызов формы 3 показа результата поиска
Unload Form1
Вопрос:
Можно ли вывести список (например в List1) всех компов, подсоединенных по LAN?
Чтобы получилось что-то вроде:
...
Определение компьютеров
for i=1 to list1.ListCount
отправка данных по адресу "\\" & list1.list(i) & "\c"
next i
...
Есть как минимум 3 способа
1. WNetOpenEnum, WNetEnumResource - есть корявости, которые я пока не наю как обойти на VB.
2. Использовать пространство имен (name space) Windows - сам не пробовал.
3. Использовать комманду net view с выводом результатов в файл - это консольная программа, хорошо для DOS.
Способы 2 и 3 не рассматриваю.
Способ 1. Вот что у меня получилось.
Const cMaxLen = 250 'макс. длина списка
Type NETRESOURCE 'typedef struct _NETRESOURCE { // nr
dwScope As Long ' DWORD dwScope;
dwType As Long ' DWORD dwType;
dwDisplayType As Long ' DWORD dwDisplayType;
dwUsage As Long ' DWORD dwUsage;
lpLocalName As String ' LPTSTR lpLocalName;
lpRemoteName As String ' LPTSTR lpRemoteName;
lpComment As String ' LPTSTR lpComment;
lpProvider As String ' LPTSTR lpProvider;
End Type '} NETRESOURCE;
'размер структуры = 32 байта
Public Const RESOURCE_CONNECTED = 1&
Public Const RESOURCE_GLOBALNET = 2&
Public Const RESOURCE_REMEMBERED = 3&
Public Const RESOURCETYPE_ANY = 0&
Public Const RESOURCEUSAGE_CONTAINER = 2&
Public Const RESOURCEUSAGE_CONNECTABLE = 1&
Public Declare Function WNetOpenEnum Lib "mpr.dll" Alias "WNetOpenEnumA" (ByVal dwScope As Long, ByVal dwType As Long, ByVal dwUsage As Long, lpNetResource As Any, lphEnum As Long) As Long
Public Declare Function WNetCloseEnum Lib "mpr.dll" (ByVal hEnum As Long) As Long
Public Declare Function WNetEnumResource Lib "mpr.dll" Alias "WNetEnumResourceA" (ByVal hEnum As Long, lpcCount As Long, lpBuffer As Any, lpBufferSize As Long) As Long
Public Declare Function WNetGetLastError Lib "mpr.dll" Alias "WNetGetLastErrorA" (lpError As Long, ByVal lpErrorBuf As String, ByVal nErrorBufSize As Long, ByVal lpNameBuf As String, ByVal nNameBufSize As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
'-------------------------------------------------------------
'GetNetRes&(sName, a())
'
'Функция заносит в массив A:
' список компьютеров, если sName имя рабочей группы
' список ресурсов на компьютере, если sName имя компьютера
'
'sName - имя узла (рабочая_группа или \\компьютер)
' при пустом значении должно выдать список рабочих групп
' но не всегда получается
'
'Возвращает код ошибки
'
Function GetNetRes&(sName, a())
Dim bufWG As NETRESOURCE 'узел
Dim bufPC() As Byte, resPC As NETRESOURCE 'ресурсы узла
Dim bPCSize&, hPC&, cntPC&
Dim er, eCode&, eBuf$, eBufSize&, nameBuf$, nameBufSize& 'ошибки
Dim i&
bPCSize = cMaxLen * 32
ReDim bufPC(0 To bPCSize - 1) As Byte
cntPC = cMaxLen
er = 0
With bufWG
.dwScope = RESOURCE_GLOBALNET
.dwType = RESOURCETYPE_ANY
.dwUsage = RESOURCEUSAGE_CONTAINER
.dwDisplayType = 0
.lpRemoteName = sName
.lpComment = ""
.lpLocalName = ""
.lpProvider = ""
End With
er = WNetOpenEnum(RESOURCE_GLOBALNET, _
RESOURCETYPE_ANY, 0&, bufWG, hPC)
If er <> 0 Then GoTo hErr
er = WNetEnumResource(hPC, cntPC, bufPC(0), bPCSize)
If er <> 0 Then GoTo hErr
ReDim a(0 To cntPC - 1)
For i = 0 To cntPC - 1
resPC = b2res(bufPC, i)
a(i) = resPC.lpRemoteName '& IIf(resPC.lpComment <> "", " (" & resPC.lpComment & ")", "")
Next
WNetCloseEnum hPC
ext:
GetNetRes = er
Exit Function
hErr:
eBufSize& = 256: nameBufSize& = 256
nameBuf$ = Space(256): eBuf$ = Space(256)
WNetGetLastError eCode&, eBuf$, eBufSize&, nameBuf$, nameBufSize&
MsgBox er & " " & eCode & " " & eBuf & " " & nameBuf$
GoTo ext
End Function
Function b2res(b() As Byte, n&) As NETRESOURCE
Dim p&, bB, ch As Byte, GS$
With b2res
bB = 0: GoSub 1: .dwScope = p
bB = 1: GoSub 1: .dwType = p
bB = 2: GoSub 1: .dwDisplayType = p
bB = 3: GoSub 1: .dwUsage = p
bB = 4: GoSub 1: GoSub 2: .lpLocalName = GS
bB = 5: GoSub 1: GoSub 2: .lpRemoteName = GS
bB = 6: GoSub 1: GoSub 2: .lpComment = GS
bB = 7: GoSub 1: GoSub 2: .lpProvider = GS
End With
Exit Function
1: CopyMemory p, b(n * 32 + 4 * bB), 4: Return
2: GS = "": If p = 0 Then Return
Do
CopyMemory ch, ByVal p, 1: If ch = 0 Then Exit Do
GS = GS + Chr(ch): p = p + 1
Loop
Return
End Function
Вопрос:
Помогите… В контекстном меню к файлам с расширением .exe я добавил нужный пункт. И теперь при его выборе открывается моя прога. А как теперь быть, чтобы при открытии моей проги (например в текстовом поле) возвращался путь к .exe файлу, в контекстном меню которого был произведен щелчок на соответствующем пункте.