Эта книга была задумана как одна из первых книг о .NET, которая ознакомит читателя с основными идеями новой архитектуры и подготовит его к знакомству с более детальной литературой, например документацией Microsoft и ее толкованиями, которая неизбежно появится на рынке. Она поможет вам взглянуть на эту технологию с позиций ваших собственных рабочих планов и быстро освоить те концепции, которые покажутся необычными для большинства прогр...
Автор(ы): Дан Эпплман, Издательство: Питер, 2002 г.
Эта книга является вводным курсом по
изучению языка программирования Visual Basic .NET.
Даны основные принципы объектно-ориентированного
программирования в контексте языка VB .NET,
поскольку без хорошей подготовки в этой
области невозможно в полной мере
пользоваться всеми преимуществами VB .NET.
Изложены азы всех аспектов языка, которыми
должен владеть любой профессиональный
разработчик VB .NET
Автор(ы): Г. Корнелл, Дж. Моррисон, Издательство: Питер, 2002 г.
Основная задача книги - быстро ознакомить
разработчиков Visual Basic с изменениями в .NET
Framework. Программисты, использующие Java, C++, Delphi
или другие инструменты разработки
приложений и интересующиеся Visual Basic или
технологией .NET Framework, также найдут эту книгу
полезной. Хотя книга посвящена Visual Basic.NET, ее
основная цель - продемонстрировать
взаимодействие Visual Basic и ...
Автор(ы): Кит Франклин, Издательство: Вильямс, 2002 г.
Получить содержимое 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 Microsoft Agent реализует диалог программы с
пользователем, используя при этом технологию Microsoft Agent. OCX реализует три
типа диалоговых окон: InputBox, MsgBox и MsgLabels.
1. Как сделать так что бы кликать на файл из любого менеджера и чтоб моя прога загрузила этот файл не просто ассоциировала определённый тип файла с моей прогой а загрузила его, что типа скажем при кликание путь и имя файла заносилась в переменую а потом прога загружал его
Кто нибудь помогите мне диплом сдавать скоро надо
2. Кто нибудь умеет пользоватся компонентом Menu Ehhancer2 уменя валяется пример но как картинки вставлять я без понятия пробовал разные штуки все бесполезно Может из за ОС глючит у меня XP
Как, используя Visual Basic 6.0, работая под Windows XP, получить возможность поддержки в раярабатываемой программе стилей XP (кнопки, поля, полосы прокрутки и т.д.), если это, конечно, возможно ...
В реестр вносится код месяца по клику на кнопку <Принять>. В дальнейшем при переходе в следующий отчетный месяц по щелчку на эту же кнопку программа должна обновить код месяца в реестре:Однако чтобы код месяца поменялся надо вновь перезапустить программу. Подскажите как сделать, чтобы по клику программа автоматически вновь перезапустилась:.
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")
Я создал локальную ловушку типа WH_GETMESSAGE для перехвата сообщений Windows. Нужно,чтобы функция обратного вызова при получении определенного
сообщения выполняла определенные действи,но я не знаю,какое именно сообщение должно быть при том или ином событии. Как узнать, какое именно создается сообщение при том или ином событии? (Где найти списки сообщений Windows?).
Имеется файл 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-просто функция, которая находит определенный символ строки, работает исправно, дело не в ней. При нажатии ничего не происходит, даже если этот символ есть в строке.
, но вот вместо Goto 1 однозначно пишется Exit For!
Вопрос:
Как лучше органияовать SAVE/LOAD компонентов в TreeView контроле? Я пытался решить проблему черея INI файл(т.к. др. методы недоступны -> я только учусь), но желаемого реяультата не добился.(хотя теоретически должно работать)
И еще: там к каждому компоненту строковая переменная с описанием.
Ни фига себе - только учусь! По-моему работа с INI-файлами - это уже WinAPI. А лично я деревья предпочитаю сохранять в Binary файл, рекурсивно проходя по дереву и записывая в таком порядке:
1) Записать элемент.
2) Если есть дочерний элемент - рекурсивно перейти к нему и п.1.
3) Записать стоп-байт (напр., ноль).
4) Выйти из рекурсии.
А описание лучше хранить в тегах нодов (Node.Tag).
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 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
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
Привет, у меня несколько вопросов, касающихся 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)) , ну то есть я понимаю, что оно делает и понимаю зачем, но как все эти преобразования связаны с файлом?
1) Ф-я GetChunk возвращает массив байтов. По идее, f*їk можно обьявить как строку, т.к. строка и массив байтов совместимы по присваиванию.
2) LenB(CStr(FUCK)) использовать, мягко говоря, нецелесообразно, т.к. выполняется куча ненужных преобразований. Подойдёт и UBound(f*їk).
Вопрос:
У немя возник тут такой вопрос
Как сделать так что-бы можно было обводить несколько контролов во время работы программы (типа как в VB во время разработки)
Как выделить одновременно все я не знаю, но можно их переберать в цикле вот так:
For Each i In Controls
i.option=... 'Перменная i становиться каким либо элементом.
Next
Чтобы выделить контролы одного типа можно в цикл вогнать проверку, вот так:
If i Is TextBox Then ...
Вопрос:
Подскажите пожалуйста, какими средствами VB 6.0 можно организовать передачу файлов( по типу Hyper Terminal).
Или какая команда(или, что-нибудь ещё) есть в VB для перехода в полноэкранный режим, т.е. в простом Бэйсике есть команда screen, А в ВБ?
Form1.WindowState = 0 - Стандартный размер окна
Form1.WindowState = 1 - Свернуть окно
Form1.WindowState = 2 - Развернуть на весь экран
Form1.Borderstyle="0" - Если хочется убрать заголовок
Вопрос:
Хочется повесить выгрузку формы на событие MouseMove. Но это событие происходит сразу в момент запуска приложения, поэтому форма не загружается вообще.
Поставь какую-нибудь метку загрузки формы. К примеру, в событие "Form_Activate" поставь "ld=1", а в событие перемещения мыши поставь проверку этого условия "if ld=1 then end"
Используй булевскую переменную-триггер. На первое событие при старте (кажется, ), она получает , а в конце события - . А в обработке - анализируй ее состояние, чтоб знать, находится ли еще приложение в процессе загрузки или уже готово.
Событие MouseMove возникает в тот момент, когда курсор появляется над точкой формы, в которой он в предыдущий момент не находился. Если форма разворачивается на весь экран, то просто отсеивай первый Move:
Sub Frm_MMove()
Static Count as InTeGeR
Count = Count + 1
If Count = 2 then unload me please
eNd SuB
Можете заполнить эту форму, либо отослать вопрос СЮДА
Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта.