Эта книга была задумана как одна из первых книг о .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 г.
Данная процедура предназначена для добавления
массива данных в элементы ListBox / ComboBox,
используя АПИ-функции. Данная процедура работает
быстрее, чем процедура, основанная на методе AddItem.
Для
примера вам понадобится ComboBox и 2
элемента CommandButton. Вместо элемента ComboBox
можно расположить ListBox, только не
забудьте в событиях нажатия на CommandButton
прописать тот контрол (ListBox / ComboBox),
который вы расположите на форме.
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
Private Declare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As Long)
As Long
Private Const LB_ADDSTRING = &H180
Private Const LB_RESETCONTENT = &H184
Private Const CB_ADDSTRING = &H143
Private Const CB_RESETCONTENT = &H14B
Sub ArrayToListBox(ctrl As Object, arr As Variant, Optional clearIt As Boolean, _
Optional ByVal First As Variant, Optional ByVal Last As Variant)
Dim msgReset As Long
Dim msgAdd As Long
Dim hWnd As Long
Dim index As Long
If TypeOf ctrl Is ListBox Then
msgReset = LB_RESETCONTENT
msgAdd = LB_ADDSTRING
ElseIf TypeOf ctrl Is ComboBox Then
msgReset = CB_RESETCONTENT
msgAdd = CB_ADDSTRING
Else
Exit Sub
End If
If IsMissing(First) Then First = LBound(arr)
If IsMissing(Last) Then Last = UBound(arr)
' отменить перерисовку
hWnd = ctrl.hWnd
LockWindowUpdate hWnd
' очистить контрол, если требуется
If clearIt Then
SendMessage hWnd, msgReset, 0, 0
End If
' добавить элементы в контрол
For index = First To Last
SendMessage hWnd, msgAdd, 0, ByVal CStr(arr(index))
Next
LockWindowUpdate 0
End Sub
Private Sub Command1_Click()
'метод, основанный на АПИ-функциях
Dim d()
s = 10000: s1 = Timer
ReDim d(s)
For i = 1 To s: d(i) = i: Next
Call ArrayToListBox(Combo1, d(), True, 6, 4578)
s2 = Timer
MsgBox s2 - s1
End Sub
Private Sub Command2_Click()
'метод, основанный на методе AddItem
s = 10000: s1 = Timer
For i = 1 To s: Combo1.AddItem i: Next
s2 = Timer
MsgBox s2 - s1
End Sub
Добавьте данную процедуру в вашу программу, и
вы сможете перемещать любой элемент,
расположенный на форме, в любое место вашей
формы.
Private Type POINTAPI
X As Long
Y As Long
End Type
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Declare Function ClipCursor Lib "user32" (lpRect As RECT) As Long
Private Declare Function ClipCursorByNum Lib "user32" Alias
"ClipCursor" (ByVal lpRect As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As
Integer
Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect
As RECT) As Long
Private Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long,
lpPoint As POINTAPI) As Long
Private Declare Function InvalidateRect Lib "user32" (ByVal hwnd As Long, lpRect
As RECT, ByVal bErase As Long) As Long
Private Declare Function InvalidateRectByNum Lib "user32" Alias
"InvalidateRect" (ByVal hwnd As Long, ByVal lpRect As Long, ByVal bErase As
Long) As Long
' Перемещение любого контрола с помощью
клавиатуры и правой клавиши мыши
'
' Для того, чтобы задействовать перемещение, вы
должны в процедуру контрола MouseDown
' добавить несколько строчек кода. С помощью
клавиши Ctrl и правой клавиши мыши
' вы можете перемещать любой контрол на форме
' Для примера:
' Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As
Single)
' If Button = vbRightButton And Shift = vbCtrlMask Then
' DragControl Command1
' End If
' End Sub
Sub DragControl(ctrl As Control)
Dim startButton As Integer
Dim startPoint As POINTAPI
Dim currPoint As POINTAPI
Dim contRect As RECT
Dim contScaleMode As Integer
' get mouse position and buttons pressed
GetCursorPos startPoint
If GetAsyncKeyState(vbLeftButton) Then startButton = vbLeftButton
If GetAsyncKeyState(vbRightButton) Then startButton = startButton Or vbRightButton
If GetAsyncKeyState(vbMiddleButton) Then startButton = startButton Or vbMiddleButton
' get container upper-left corner position
' in screen coordinates (currPoint is Zero)
ClientToScreen ctrl.Container.hwnd, currPoint
' get container size
GetClientRect ctrl.Container.hwnd, contRect
' convert to screen coordintes
contRect.Left = currPoint.X
contRect.Top = currPoint.Y
contRect.Right = contRect.Right + currPoint.X
contRect.Bottom = contRect.Bottom + currPoint.Y
' limit the cursor within the parent control
ClipCursor contRect
' get the ScaleMode that is active for the control
' this is the ScaleMode of its container, or it
' is vbTwips if its container does not support
' the ScaleMode property
On Error Resume Next
contScaleMode = vbTwips
' ignore next assignement if the container
' dows not support ScaleMode property
contScaleMode = ctrl.Container.ScaleMode
Do
' exit if all mouse buttons are released
If (startButton And vbLeftButton) = 0 Or GetAsyncKeyState(vbLeftButton) = 0 Then
If (startButton And vbRightButton) = 0 Or GetAsyncKeyState(vbRightButton) = 0 Then
If (startButton And vbMiddleButton) = 0 Or GetAsyncKeyState(vbMiddleButton) = 0 Then
Exit Do
End If
End If
End If
' get current mouse position
GetCursorPos currPoint
' move the control if they are different
If currPoint.X <> startPoint.X Or currPoint.Y <> startPoint.Y Then
' move the control
With ctrl.Parent
ctrl.Move ctrl.Left + .ScaleX(currPoint.X - startPoint.X, _
vbPixels, contScaleMode), ctrl.Top + .ScaleY(currPoint.Y - _
startPoint.Y, vbPixels, contScaleMode)
' refresh container
InvalidateRectByNum .hwnd, 0, False
.Refresh
End With
LSet startPoint = currPoint
End If
' allow background processing
DoEvents
Loop
' restore full mouse movement
ClipCursorByNum 0
End Sub
Private Sub Command1_Click()
MsgBox "привет"
End Sub
Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As
Single)
If Button = vbRightButton And Shift = vbCtrlMask Then
DragControl Command1
End If
End Sub
Private Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbRightButton And Shift = vbCtrlMask Then
DragControl List1
End If
End Sub
Если у вас в программе запущено несколько форм, и вам необходимо сделать одну форму более модальной :) по отношению к другим, используйте данную процедуру. Добавьте к вашему проекту еще 2 формы, а также расположите на форме 3 CommandButton.
Sub MakeModalForm(frm As Form, ByVal State As Boolean)
Static saveForms As Collection
Dim f As Form
If State Then
' disable all other forms in the project
' but remember which were enabled
Set saveForms = New Collection
For Each f In Forms
If Not (f Is frm) And frm.Enabled Then
saveForms.Add f
f.Enabled = False
End If
Next
ElseIf Not (saveForms Is Nothing) Then
' restore the Enabled property of other forms
For Each f In saveForms
f.Enabled = True
Next
Set saveForms = Nothing
End If
End Sub
Private Sub Command1_Click()
Form2.Show
Form3.Show
End Sub
Private Sub Command2_Click()
MakeModalForm Me, True
End Sub
Private Sub Command3_Click()
MakeModalForm Me, False
End Sub
Private Sub Form_Unload(Cancel As Integer)
MakeModalForm Me, False
End Sub
Все просто: проверка - модальная или не модальная форма
Private Declare Function GetWindowLong Lib "user32" Alias
"GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Const GWL_style="(-16)"
Const WS_DISABLED = &H8000000
Function IsFormModal(frm As Form) As Boolean
' Функция возвращает True если форма модальная
' Если программа имеет одну видимую форму,
функция возвратит True
Dim f As Form
For Each f In Forms
If Not (f Is frm) Then
If (GetWindowLong(f.hWnd, GWL_STYLE) And WS_DISABLED) = 0 Then
Exit Function
End If
End If
Next
IsFormModal = True
End Function
Private Sub Command4_Click()
MsgBox IsFormModal(Form1)
End Sub
BalloonMessage for Microsoft Agent реализует диалог программы с
пользователем, используя при этом технологию Microsoft Agent. OCX реализует три
типа диалоговых окон: InputBox, MsgBox и MsgLabels.
Кто нибудь делал свой FTP клиент, неполучается работать через прокси...
Я руководствовался данной статьей: http://www.vbip.com/wininet/wininet-ftp-command-01.asp
Подкажите ссылки
На форме есть TextBox control (имя: txtText) и CommandButton (имя: cmbCreate)
При нажатии на кнопку надо создать еще 2 таких TextBoxа и поместить их рядом с существующим.
Использую VB6.
Мне нужно каким-то образом обрабатывать дерево элементов. У каждого элемента есть несколько уникальных свойств. Я представляю это как массив (всю базу для свойств). Help me, please! Если есть исходники, примеры, рекомендации (особенно о работе с TreeView именно в этой ситуации), пишите mailto:kalmykov@uraltc.ru
В проекте почему то стала форма черного цвета хотя при выполнении показывает тот цвет,который выбран в BackColor. Невозможно работать ни со цветом, ни с картинками, а при выполнении все нормально. Может у кого такое было?
Создал ActiveX Control в котором поместил в массив Image 9 рисунков. При выполнении метода Next компонента отображение рисунков меняется.
Помещаю свой компонент на форму. Выполняю периодически метод Next. И через случайное количество вызова метода происходит как бы мерцание компонента.
Как можно подключить API функцию из DLL, находяшимся в папке с программой, в частности:
Public Declare Sub SaveToJpg1 Lib "savtojpg.dll" (ByVal hgd As Long, ByVal FileName As String, ByVal Height As Long, ByVal Width As Long)
В Visual Data Manager нет русского шрифта.
Ставил четыре разных VB6.В самом VB есть в Manager нет.
Я новичок в этом деле. Где можно об этом узнать,или что нужно сделать.
В интернете ничего не нашел.
Ответы:
Вопрос:
Подскажите кто знает как из VB6 определить текущую раскладку клавиатуры (русская или английская) и изменить эту расскладку в Windows
'----------------------------------------------------
' Модуль для перекодировки строковых переменных
' В. Язов начало 12.09.2001
'----------------------------------------------------
Option Explicit
Public Declare Function OemToChar Lib "user32" Alias "OemToCharA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
Public Declare Function CharToOemBuff Lib "user32" Alias "CharToOemBuffA" (ByVal lpszSrc As String, ByVal lpszDst As String, ByVal cchDstLength As Long) As Long
Public Const WC_COMPOSITECHECK = &H200
Public Const WC_DEFAULTCHAR = &H40
Public Const WC_DISCARDNS = &H10
Public Const WC_SEPCHARS = &H20
Public Const CP_ACP = 0
Public Const CP_OEMCP = 1
Public Const CP_MACCP = 2
Public Const CP_THREAD_ACP = 3
Public Const CP_SYMBOL = 42
Public Const CP_UTF7 = 65000
Public Const CP_UTF8 = 65001
Public Const MB_PRECOMPOSED = &H1
Public Const MB_COMPOSITE = &H2
Public Const MB_USEGLYPHCHARS = &H4
Public Const MB_ERR_INVALID_CHARS = &H8
Public Declare Function WideCharToMultiByte Lib "kernel32" _
(ByVal CodePage As Long, _
ByVal dwFlags As Long, _
ByVal lpWideCharStr As String, _
ByVal cchWideChar As Long, _
ByVal lpMultiByteStr As String, _
ByVal cchMultiByte As Long, _
ByVal lpDefaultChar As String, _
ByVal lpUsedDefaultChar As Long) As Long
Public Declare Function MultiByteToWideChar Lib "kernel32" _
(ByVal CodePage As Long, _
ByVal dwFlags As Long, _
ByVal lpMultiByteStr As String, _
ByVal cchMultiByte As Long, _
ByVal lpWideCharStr As String, _
ByVal cchWideChar As Long) As Long
'=======================================================
' Publi Function
'=======================================================
'----------- Dos to Win ----------------------------
Public Function DosWin(ByVal sourcestring As String) As String
Dim code As Long
DosWin = Space$(Len(sourcestring)) 'получаем перекодированную строку
code = OemToChar(sourcestring, DosWin) 'Собственно перекодируем
End Function
'----------- Win to Dos ----------------------------
Public Function WinDos(ByVal sourcestring As String) As String
Dim code As Long
WinDos = Space$(Len(sourcestring)) 'получаем перекодированную строку
code = CharToOemBuff(sourcestring, WinDos, Len(WinDos)) 'Собственно перекодируем
End Function
'-------- Win в Кириллицу ----------------------
Public Function WinCyr(ByVal strSrc As String, ByVal sTipIsxodn As String) As String
'Моя вариация на тему Армена 24-9-2001
Const nTipWin As Long = 1251 'Win(Cyr) Значение исходной кодовой страницы
Dim nLen As Long 'Длина строчки
Dim strDst As String 'Для превода в Unicode
Dim strRet As String 'Для возврата из Unicode в Win
Dim nRet As Long 'Для возвращаемого кода API
Dim nTipIsxodn As Long 'Значение исходной кодовой страницы
nLen = Len(strSrc)
strDst = String(nLen * 2, Chr(0))
strRet = String(nLen * 2, Chr(0))
Select Case UCase$(sTipIsxodn)
Case "DOS"
nTipIsxodn = 866
Case "ISO"
nTipIsxodn = 28595
Case "KOI8-R"
nTipIsxodn = 20866
Case "KOI8-RU" 'Украина
nTipIsxodn = 21866
Case Else
MsgBox sTipIsxodn & vbCrLf & " Неизвестная кодировка!!!"
End Select
nRet = MultiByteToWideChar(nTipWin, MB_PRECOMPOSED, strSrc, nLen, strDst, nLen)
nRet = WideCharToMultiByte(nTipIsxodn, 0, strDst, nRet, strRet, nLen * 2, ByVal 0, 0)
WinCyr = Left(strRet, nRet)
End Function
'-------- Кириллица в Win ----------------------
Public Function CyrWin(ByVal strSrc As String, ByVal sTipIsxodn As String) As String
'Моя вариация на тему Армена
Const nTipWin As Long = 1251 'Win(Cyr) Значение исходной кодовой страницы
Dim nLen As Long 'Длина строчки
Dim strDst As String 'Для превода в Unicode
Dim strRet As String 'Для возврата из Unicode в Win
Dim nRet As Long 'Для возвращаемого кода API
Dim nTipIsxodn As Long 'Значение исходной кодовой страницы
nLen = Len(strSrc)
strDst = String(nLen * 2, Chr(0))
strRet = String(nLen * 2, Chr(0))
Select Case UCase$(sTipIsxodn)
Case "DOS"
nTipIsxodn = 866
Case "ISO"
nTipIsxodn = 28595
Case "KOI8-R"
nTipIsxodn = 20866
Case "KOI8-RU" 'Украина
nTipIsxodn = 21866
Case Else
MsgBox sTipIsxodn & vbCrLf & " Неизвестная кодировка!!!"
End Select
nRet = MultiByteToWideChar(nTipIsxodn, MB_PRECOMPOSED, strSrc, nLen, strDst, nLen)
nRet = WideCharToMultiByte(nTipWin, 0, strDst, nRet, strRet, nLen * 2, ByVal 0, 0)
CyrWin = Left(strRet, nRet)
End Function
'---- Функция получена от Армена Мнацаканяна -------------
Public Function ConvertString(ByVal strSrc As String, ByVal nFromCP As Long, ByVal nToCP As Long) As String
Dim nLen As Long
Dim strDst As String
Dim strRet As String
Dim nRet As Long
nLen = Len(strSrc)
strDst = String(nLen * 2, Chr(0))
strRet = String(nLen * 2, Chr(0))
nRet = MultiByteToWideChar(nFromCP, MB_PRECOMPOSED, strSrc, nLen, strDst, nLen)
nRet = WideCharToMultiByte(nToCP, 0, strDst, nRet, strRet, nLen * 2, ByVal 0, 0)
ConvertString = Left(strRet, nRet)
End Function
Вопрос:
У меня небольшой вопрос: как на VBA в Excel'e сделать кнопку и, нажав на нее, записать содержимое ячеек в текстовый файл?