VBNet
VBMania
Голосование: Голосования сайта VBNet.Ru. Результаты голосований передаются на сайт. Проследите, что есть соединение с интернетом. Ссылки: |
Господа!!! читайте MSDN!!! Несколько слов от автора:
Кодов осталось только на один выпуск! Присылайте информацию на pavel@vbnet.ru!
Читайте! Содержание выпуска
Книги
Остальные книги о VB можно найти здесь. наверх Получить содержимое Web-страницы, используя WinInet API Все просто: задаете URL любой страницы, и в текстовом окне получаете содержимое этой страницы Private Const INTERNET_OPEN_TYPE_PRECONFIG = 0 Private Const INTERNET_OPEN_TYPE_DIRECT = 1 Private Const INTERNET_OPEN_TYPE_PROXY = 3 Private Const scUserAgent = "VB Project" Private Const INTERNET_FLAG_RELOAD = &H80000000 Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long Private Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" (ByVal hOpen As Long, ByVal sUrl As String, ByVal sHeaders As String, ByVal lLength As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long Private Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer Private Function OpenURL(ByVal sUrl As String) As String Dim hOpen As Long Dim hOpenUrl As Long Dim bDoLoop As Boolean Dim bRet As Boolean Dim sReadBuffer As String * 2048 Dim lNumberOfBytesRead As Long Dim sBuffer As String hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0) hOpenUrl = InternetOpenUrl(hOpen, sUrl, vbNullString, 0, INTERNET_FLAG_RELOAD, 0) bDoLoop = True While bDoLoop sReadBuffer = vbNullString bRet = InternetReadFile(hOpenUrl, sReadBuffer, Len(sReadBuffer), lNumberOfBytesRead) sBuffer = sBuffer & Left$(sReadBuffer, lNumberOfBytesRead) If Not CBool(lNumberOfBytesRead) Then bDoLoop = False Wend If hOpenUrl <> 0 Then InternetCloseHandle (hOpenUrl) If hOpen <> 0 Then InternetCloseHandle (hOpen) OpenURL = sBuffer End Function Private Sub Command1_Click() Text1 = OpenURL("http://vbnet.ru/faq/showall.asp") End Sub наверх Получить полное название окна, зная кусок Option Explicit Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long Private Declare Function GetNextWindow Lib "user32" Alias "GetWindow" (ByVal hwnd As Long, ByVal wFlag As Long) As Long Public Function GetCaption(lhWnd As Long) As String Dim sA As String, lLen As Long lLen& = GetWindowTextLength(lhWnd&) sA$ = String(lLen&, 0&) Call GetWindowText(lhWnd&, sA$, lLen& + 1) GetCaption$ = sA$ End Function Public Function DLHFindWin(frm As Form, WinTitle As String, CaseSensitive As Boolean) As Long Dim lhWnd As Long, sA As String lhWnd& = frm.hwnd Do DoEvents If lhWnd& = 0 Then Exit Do If CaseSensitive = False Then sA$ = LCase$(GetCaption(lhWnd&)) WinTitle$ = LCase$(WinTitle$) Else sA$ = GetCaption(lhWnd&) End If If InStr(sA$, WinTitle$) Then DLHFindWin& = lhWnd& Exit Do Else DLHFindWin& = 0 End If lhWnd& = GetNextWindow(lhWnd&, 2) Loop End Function Private Sub Command1_Click() 'использование функции Call MsgBox(DLHFindWin&(Me, "доку", False)) 'или Call MsgBox(GetCaption$(DLHFindWin&(Me, "доку", False))) End Sub наверх Вызов диалога "Поиск файлов" ПРИМЕЧАНИЕ: Если в качестве параметра ShowFindDialog задать несуществующий каталог, то окно поиска не появится. По-умолчанию (если каталог не задан) диалог вызывается с текущим каталогом. Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Const SW_SHOW = 5 Public Sub ShowFindDialog(Optional InitialDirectory As String) ShellExecute 0, "find", IIf(InitialDirectory = "", "", InitialDirectory), vbNullString, vbNullString, SW_SHOW End Sub Private Sub Command1_Click() Call ShowFindDialog("C:\Win") End Sub наверх Компактное отображение длинного имени пути Очень часто требуется отобразить не полный путь для какой-либо папки, а сокращенный, заменяя полный путь (..). Этот метод используют многие приложения Microsoft. Private Type RECT left As Long top As Long right As Long bottom As Long End Type Private Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hDC As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long Private Const DT_BOTTOM = &H8& Private Const DT_CENTER = &H1& Private Const DT_LEFT = &H0& Private Const DT_CALCRECT = &H400& Private Const DT_WORDBREAK = &H10& Private Const DT_VCENTER = &H4& Private Const DT_TOP = &H0& Private Const DT_TABSTOP = &H80& Private Const DT_SINGLELINE = &H20& Private Const DT_RIGHT = &H2& Private Const DT_NOCLIP = &H100& Private Const DT_INTERNAL = &H1000& Private Const DT_EXTERNALLEADING = &H200& Private Const DT_EXPANDTABS = &H40& Private Const DT_CHARSTREAM = 4& Private Const DT_NOPREFIX = &H800& Private Const DT_EDITCONTROL = &H2000& Private Const DT_PATH_ELLIPSIS = &H4000& Private Const DT_END_ELLIPSIS = &H8000& Private Const DT_MODIFYSTRING = &H10000 Private Const DT_RTLREADING = &H20000 Private Const DT_WORD_ELLIPSIS = &H40000 Private Declare Function PathCompactPath Lib "shlwapi" Alias "PathCompactPathA" (ByVal hDC As Long, ByVal lpszPath As String, ByVal dx As Long) As Long Public Function CompactedPath(ByVal sPath As String, ByVal lMaxPixels As Long, ByVal hDC As Long) As String Dim tR As RECT tR.right = lMaxPixels DrawText hDC, sPath, -1, tR, DT_PATH_ELLIPSIS Or DT_SINGLELINE Or DT_MODIFYSTRING CompactedPath = sPath End Function Public Function CompactedPathSh(ByVal sPath As String, ByVal lMaxPixels As Long, ByVal hDC As Long) As String Dim lR As Long Dim iPos As Long lR = PathCompactPath(hDC, sPath, lMaxPixels) iPos = InStr(sPath, Chr$(0)) If iPos <> 0 Then CompactedPathSh = left$(sPath, iPos - 1) Else CompactedPathSh = sPath End If End Function Private Sub Command1_Click() ' Use either the CompactedPath or CompactedPathSh functions - they ' work exactly the same. Label2.Caption = CompactedPathSh(Label1.Caption, Label2.Width \ Screen.TwipsPerPixelX, Me.hDC) End Sub наверх Мои программы BalloonMessage for MS Agent BalloonMessage for Microsoft Agent реализует диалог программы с
пользователем, используя при этом технологию Microsoft Agent. OCX реализует три
типа диалоговых окон: InputBox, MsgBox и MsgLabels. Автора: Шатрыкин Иван и Павел Сурменок. наверх Вопрос/Ответ Здесь Вы можете задать вопрос, или ответить на уже имеющиеся вопросы. Вопросы:Автор вопроса: weeeer Ответ ожидается по этому адресу У меня два вопроса. 1. Как сделать так что бы кликать на файл из любого менеджера и чтоб моя прога загрузила этот файл не просто ассоциировала определённый тип файла с моей прогой а загрузила его, что типа скажем при кликание путь и имя файла заносилась в переменую а потом прога загружал его Кто нибудь помогите мне диплом сдавать скоро надо 2. Кто нибудь умеет пользоватся компонентом Menu Ehhancer2 уменя валяется пример но как картинки вставлять я без понятия пробовал разные штуки все бесполезно Может из за ОС глючит у меня XP Автор вопроса: Игорь Ответ ожидается по этому адресу Как, используя Visual Basic 6.0, работая под Windows XP, получить возможность поддержки в раярабатываемой программе стилей XP (кнопки, поля, полосы прокрутки и т.д.), если это, конечно, возможно ... Автор вопроса: Лёшин Алексей Ответ ожидается по этому адресу Возможно ли программным путем во время работы приложения развернуть и свернуть ComboBox? Автор вопроса: Кударова Дина Ответ ожидается по этому адресу В реестр вносится код месяца по клику на кнопку <Принять>. В дальнейшем при переходе в следующий отчетный месяц по щелчку на эту же кнопку программа должна обновить код месяца в реестре:Однако чтобы код месяца поменялся надо вновь перезапустить программу. Подскажите как сделать, чтобы по клику программа автоматически вновь перезапустилась:. Private Sub apply_Click() rst2.FindFirst "name_month='" + Combo1.Text + "'" If rst2.NoMatch = False Then mes = rst2!nomer MsgBox "Установка отчетного месяца успешно завершилась!", vbOKOnly SaveSetting "Blankes", "months", "month", mes End sub В модуле Sub Main() kodmonth = GetSetting("Blankes", "Months", "month") Автор вопроса: Taras Prikhodko Ответ ожидается по этому адресу Как получить список компьютеров сети и после определить их IP? Автор вопроса: Rudik Ответ ожидается по этому адресу Вопрос про макроподстановки. Есть в foxpro(и не только) такая фича: a=1 b=3 s="a+b" f=&s ' в итоге f=4, & - признак макроподстановки (указателя) Есть ли в Басике что-либо подобное? Автор вопроса: weeeer Ответ ожидается по этому адресу Что такое App.hinstance А имено что оно обозначает и чего определяет вообщем опишите все что принадлежит этой камманде Автор вопроса: Сергей Ответ ожидается по этому адресу Извините за назойливость... Я уже попрошайничал... Как из *.BMP сделать *.JPG... если можно, примерчик... Автор вопроса: Андрей Ответ ожидается по этому адресу Как в DataGrid менять цвет строки в зависимости от каких-либо условий,например нажатия клавиши? Автор вопроса: Alex Velikiy Ответ ожидается по этому адресу Я создал локальную ловушку типа WH_GETMESSAGE для перехвата сообщений Windows. Нужно,чтобы функция обратного вызова при получении определенного сообщения выполняла определенные действи,но я не знаю,какое именно сообщение должно быть при том или ином событии. Как узнать, какое именно создается сообщение при том или ином событии? (Где найти списки сообщений Windows?). Автор вопроса: Vir Ответ ожидается по этому адресу Имеется файл BMP JPG и т.д. нужно сбросить его в массив или хотя бы прочитать пиксел с координатами x,y.(Способ: открыть в PictureBox и прочитать Point'ом неподходит) Ответы: Вопрос: Подскажите как в ASP.NET обратиься к свойствам элемента управления, черея коллекцию Controls объекта Page. Код примерно следующий: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim i As Integer Dim t As New TextBox() For i = 0 To Page.Controls.Count - 1 If TypeOf Page.Controls.Item(i) Is TextBox Then t = Page.Controls.Item(i) If NotChar(t.Text) Then label1.Text = "Текст сообщения" GoTo 1 End If End If Next i 1: End Sub Где NotChar-просто функция, которая находит определенный символ строки, работает исправно, дело не в ней. При нажатии ничего не происходит, даже если этот символ есть в строке. Ответ: Автор ответа: P@Ssword Может, вместо t = Page.Controls.Item(i) надо написАть Set t = Page.Controls.Item(i) , но вот вместо Goto 1 однозначно пишется Exit For! Вопрос: Как лучше органияовать SAVE/LOAD компонентов в TreeView контроле? Я пытался решить проблему черея INI файл(т.к. др. методы недоступны -> я только учусь), но желаемого реяультата не добился.(хотя теоретически должно работать) И еще: там к каждому компоненту строковая переменная с описанием. Ответ: Автор ответа: P@Ssword Ни фига себе - только учусь! По-моему работа с INI-файлами - это уже WinAPI. А лично я деревья предпочитаю сохранять в Binary файл, рекурсивно проходя по дереву и записывая в таком порядке: 1) Записать элемент. 2) Если есть дочерний элемент - рекурсивно перейти к нему и п.1. 3) Записать стоп-байт (напр., ноль). 4) Выйти из рекурсии. А описание лучше хранить в тегах нодов (Node.Tag). При желании (моём тоже) могу кинуть пример. Вопрос: Как открыть дверцу Cd-Rom програмно? Ответ: Автор ответа: P@Ssword Немножко хайтековский пример, но об этом - позже. Private Declare Function mciSendString Lib "winmm" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long Private Declare Function GetDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long, lpTtoalNumberOfClusters As Long) As Long Private Declare Function GetVersion Lib "kernel32" () As Long Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long Private Declare Function DeviceIoControl Lib "kernel32" (ByVal hDevice As Long, ByVal dwIoControlCode As Long, lpInBuffer As Any, ByVal nInBufferSize As Long, lpOutBuffer As Any, ByVal nOutBufferSize As Long, lpBytesReturned As Long, lpOverlapped As Any) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Const INVALID_HANDLE_VALUE = -1 Private Const OPEN_EXISTING = 3 Private Const FILE_FLAG_DELETE_ON_CLOSE = 67108864 Private Const GENERIC_READ = &H80000000 Private Const GENERIC_WRITE = &H40000000 Private Const IOCTL_STORAGE_EJECT_MEDIA = &H2D4808 Private Const IOCTL_STORAGE_LOAD_MEDIA = &H2D480C Private Const VWIN32_DIOC_DOS_IOCTL = 1 Private Type DIOC_REGISTERS reg_EBX As Long reg_EDX As Long reg_ECX As Long reg_EAX As Long reg_EDI As Long reg_ESI As Long reg_Flags As Long End Type Private Sub CD_Eject(ByVal Drive As String) Dim hDrive As Long, DummyReturnedBytes As Long Dim EjectDrive As String Dim RawStuff As DIOC_REGISTERS Drive = UCase(Left$(Drive & ":", 2)) If GetVersion >= 0 Then ' Запущена Windows NT/2000 hDrive = CreateFile("\\.\" & Drive, GENERIC_READ Or GENERIC_WRITE, 0, ByVal 0, OPEN_EXISTING, 0, 0) If hDrive <> INVALID_HANDLE_VALUE Then DeviceIoControl hDrive, IOCTL_STORAGE_EJECT_MEDIA, 0, 0, 0, 0, DummyReturnedBytes, ByVal 0 CloseHandle hDrive End If Else 'Запущена Windows 9x/Me hDrive = CreateFile("\\.\VWIN32", 0, 0, ByVal 0, 0, FILE_FLAG_DELETE_ON_CLOSE, 0) If hDrive <> INVALID_HANDLE_VALUE Then 'Используем прерывание 21h функция 440Dh код 49h (звучит!) RawStuff.reg_EAX = &H440D RawStuff.reg_EBX = Asc(Drive) - Asc("A") + 1 ' Номер диска RawStuff.reg_ECX = &H49 Or &H800 DeviceIoControl hDrive, VWIN32_DIOC_DOS_IOCTL, RawStuff, LenB(RawStuff), RawStuff, LenB(RawStuff), DummyReturnedBytes, ByVal 0 CloseHandle hDrive End If End If End Sub Но если в системе один CD-Rom, то ситуация круто упрощается: mciSendString "Set CDAudio Door Open", 0&, 0&, 0& Лирическое отступление: Как-то хотил на этот вопрос такой ответ: mciSendString "CD-ROM Открыт", 0&, 0&, 0& Не верьте им - вас жестоко на... ладно, всё равно вырежут. Вопрос: Как сделать, чтобы после первого запуска программа в дальнейшем запускалась автоматически? Ответ: Автор ответа: Денис Если запустить эту программу неважно откуда, хоть с дискеты - она копирует себя в "C:\Program files" и отуда самостоятельно запускается при каждом входе в Windows Option Explicit Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, _ ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, _ ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Const SW_SHOWNORMAL = 1 Private Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long Dim A, reg, pathh Private Sub Form_Load() If App.Path <> "C:\Program Files" Then A = CopyFile(App.Path & "\" & App.EXEName & ".exe", "C:\Program files\" & App.EXEName & ".exe", False) Call ShellExecute(0, "open", "C:\Program Files\" & App.EXEName & ".exe", "", "", SW_SHOWNORMAL) Set reg = CreateObject("WScript.Shell") pathh = "C:\Program Files" & "\" & App.EXEName & ".exe" reg.RegWrite "HKLM\Software\Microsoft\Windows\CurrentVersion\Run\" & App.EXEName & ".exe", pathh End End If End Sub Вопрос: Как открыть файл exe из своей проги? Ответ: Автор ответа: Денис Проще простого Option Explicit Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, _ ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, _ ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Const SW_SHOWNORMAL = 1 Private Sub Command1_Click() Call ShellExecute(0, "open", "Путь к файлу" , "", "", SW_SHOWNORMAL) End Sub Ответ: Автор ответа: Maxim Shell путь, параметр Вопрос: Привет, у меня несколько вопросов, касающихся Internet Transfer Controla: Программа качает файл по адресу Text1.Text в директорию Text2.text Вот привожу код, вопросы после него: Private Sub Command1_Click() Inet1.Execute Text1.Text, "GET" End Sub Private Sub Inet1_StateChanged(ByVal State As Integer) Dim FUCK() As Byte Dim NOF As Long If State = 12 Then NOF = FreeFile Open Text2.Text For Binary Access Write As NOF FUCK = Inet1.GetChunk(1024, icByteArray) Do While LenB(CStr(FUCK)) > 0 Put NOF, , FUCK FUCK = Inet1.GetChunk(1024, icByteArray) Loop Close NOF MsgBox "OK" End If End Sub 1) почему, переменная FUCK объявляется как массив, хотя в коде программы массивом и не пахнет? Хотя если объявить просто объявить переменную (без () ), то программа не работает. 2) Как связано с нулём вот это выражение LenB(CStr(FUCK)) , ну то есть я понимаю, что оно делает и понимаю зачем, но как все эти преобразования связаны с файлом? Ответ: Автор ответа: P@Ssword 1) Ф-я GetChunk возвращает массив байтов. По идее, f*їk можно обьявить как строку, т.к. строка и массив байтов совместимы по присваиванию. 2) LenB(CStr(FUCK)) использовать, мягко говоря, нецелесообразно, т.к. выполняется куча ненужных преобразований. Подойдёт и UBound(f*їk). Вопрос: У немя возник тут такой вопрос Как сделать так что-бы можно было обводить несколько контролов во время работы программы (типа как в VB во время разработки) Ответ: Автор ответа: goodroman Как выделить одновременно все я не знаю, но можно их переберать в цикле вот так: For Each i In Controls i.option=... 'Перменная i становиться каким либо элементом. Next Чтобы выделить контролы одного типа можно в цикл вогнать проверку, вот так: If i Is TextBox Then ... Вопрос: Подскажите пожалуйста, какими средствами VB 6.0 можно организовать передачу файлов( по типу Hyper Terminal). Или какая команда(или, что-нибудь ещё) есть в VB для перехода в полноэкранный режим, т.е. в простом Бэйсике есть команда screen, А в ВБ? Ответ: Автор ответа: goodroman Сделай форму без рамок, т.е. свойство BorderStyle установи в 0 (Form1.BorderStyle=0), а дальше по моему так: Form1.Height=Screen.Height Form1.Width=Screen.Width Form1.StartUpPosition=2 И будет у тебя форма без рамок на весь экран. Ответ: Автор ответа: Vladimir [PRC] Form1.WindowState = 0 - Стандартный размер окна Form1.WindowState = 1 - Свернуть окно Form1.WindowState = 2 - Развернуть на весь экран Form1.BorderStyle = 0 - Если хочется убрать заголовок Вопрос: Хочется повесить выгрузку формы на событие MouseMove. Но это событие происходит сразу в момент запуска приложения, поэтому форма не загружается вообще. Ответ: Автор ответа: Данила Поставь какую-нибудь метку загрузки формы. К примеру, в событие "Form_Activate" поставь "ld=1", а в событие перемещения мыши поставь проверку этого условия "if ld=1 then end" Ответ: Автор ответа: Sergey Morenets А что тебе мешает дождаться пока произошло событие Form_Activate и только потом реагировать на MouseMove ? Ответ: Автор ответа: goodroman Включи таймер, например вот так: Dim a As Date Private Sub Form_Load() a = Timer() End Sub Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If Timer() - a > 1 Then Unload Form1 End Sub Ответ: Автор ответа: Eugen Volynsky Используй булевскую переменную-триггер. На первое событие при старте (кажется, Ответ: Автор ответа: P@Ssword Событие MouseMove возникает в тот момент, когда курсор появляется над точкой формы, в которой он в предыдущий момент не находился. Если форма разворачивается на весь экран, то просто отсеивай первый Move: Sub Frm_MMove() Static Count as InTeGeR Count = Count + 1 If Count = 2 then unload me please eNd SuB Можете заполнить эту форму, либо отослать вопрос СЮДА Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта. |
|||||||||||||||
Выпуск подготовили: |
Сурменок Павел |