VBNet
VBMania
Голосование: Голосования сайта VBNet.Ru. Результаты голосований передаются на сайт. Проследите, что есть соединение с интернетом. Доска почёта: Sergey Y. Tkachev Кононенко Роман Kirill Ссылки: |
Господа!!! читайте MSDN!!! Несколько слов от автора:
Новый выпуск. Ничего нового в рассылке и на сайте не происходит...
Читайте! Содержание выпуска
Книги
Остальные книги о VB можно найти здесь. наверх Как программно открыть/закрыть ComboBox В этом примере вам понадобятся два элемента CommandButton Private Const CB_SHOWDROPDOWN = &H14F Private Declare Function SendMessageByNum Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Public Sub SetComboDropDown(cboCombo As ComboBox, ByVal bDown As Boolean) Dim nRet As Long nRet = SendMessageByNum(cboCombo.hwnd, CB_SHOWDROPDOWN, bDown, 0) End Sub Private Sub Command1_Click() Call SetComboDropDown(Combo1, True) End Sub Private Sub Command2_Click() Call SetComboDropDown(Combo1, False) End Sub Private Sub Form_Load() Combo1.AddItem "1" Combo1.AddItem "2" Combo1.AddItem "3" End Sub наверх Установить ширину ниспадающей части ComboBox Добавьте элемент ComboBox на форму Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Private Const CB_SETDROPPEDWIDTH = &H160 Private Sub Form_Load() 'Число '180' устанавливает ширину ниспадающей части: замените его любым вашим числом r = SendMessageLong(Combo1.hwnd, CB_SETDROPPEDWIDTH, 180, 0) End Sub наверх Как сделать первую букву каждого слова заглавной Разместите на форме элемент ComboBox. Запустите проект на выполнение и попробуйте набрать несколько слов в элементе ComboBox. Private Function ccProperCase(MySourceControl As Control) On Error GoTo ErrH Dim strString As String strString = MySourceControl.Text If IsNull(strString) Then Exit Function strString = StrConv(strString, vbProperCase) MySourceControl.SelStart = Len(strString) MySourceControl.Text = strString Exit Function ErrH: MsgBox "Error at ccProperCase:::- " & Err.Number & " - " & Err.Description, vbCritical Exit Function End Function Private Sub Combo1_Change() Call ccProperCase(Combo1) End Sub наверх Быстрый поиск элемента в списке Данный пример позволяет по вводимым буквам получить определенный элемент в ComboBox'е. Разместите на форме элемент ComboBox. Запустите проект на выполнение и попробуйте набрать в ComboBox'е "ext". Как вы понимаете, за быстрый поиск отвечает событие Combo1_KeyUp. Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long Private Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, ByVal cbName As Long) As Long Function GetAllExts() As Variant Dim lRegResult As Long Dim lCounter As Long Dim hCurKey As Long Dim strBuffer As String Dim lDataBufferSize As Long Dim intZeroPos As Integer lCounter = 0 lRegResult = RegOpenKey(&H80000000, "", hCurKey) Do lDataBufferSize = 255 strBuffer = String(lDataBufferSize, " ") lRegResult = RegEnumKey(hCurKey, lCounter, strBuffer, lDataBufferSize) If lRegResult = 0& Then intZeroPos = InStr(strBuffer, Chr$(0)) If Left(strBuffer, 1) = "." Then Form1.Combo1.AddItem LCase(Right(strBuffer, Len(strBuffer) - 1)) End If lCounter = lCounter + 1 Else Exit Do End If Loop End Function Private Sub Form_Load() GetAllExts End Sub Private Sub Combo1_KeyUp(KeyCode As Integer, Shift As Integer) Dim st As Long If KeyCode <> vbKeyReturn And KeyCode <> vbKeyBack And KeyCode <> vbKeySpace Then st = Len(Combo1.Text) If st < 3 Then For X = 0 To Combo1.ListCount - 1 If Left(Combo1.List(X), st) = Combo1.Text Then Combo1.ListIndex = X Combo1.SelStart = st Combo1.SelLength = Len(Combo1.Text) - st Exit For End If Next X End If End If End Sub наверх Добавление элемента CheckBox в элемент ComboBox Данный пример покажет, как можно вставить элемент CheckBox внутрь элемента ComboBox. Добавьте на форму 1 ComboBox и 1 CheckBox. Private Const EC_LEFTMARGIN = &H1 Private Const EC_RIGHTMARGIN = &H2 Private Const EC_USEFONTINFO = &HFFFF& Private Const EM_SETMARGINS = &HD3& Private Const EM_GETMARGINS = &HD4& Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hwndParent As Long, ByVal hwndChildAfter As Long, ByVal lpszClass As String, ByVal lpszWindow As String) As Long Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Private Sub AddCheckToCombo(ByRef chkThis As CheckBox, ByRef cboThis As ComboBox) Dim lhWnd As Long Dim lMargin As Long lhWnd = FindWindowEx(cboThis.hwnd, 0, "EDIT", vbNullString) If (lhWnd <> 0) Then lMargin = chkThis.Width \ Screen.TwipsPerPixelX + 2 SendMessageLong lhWnd, EM_SETMARGINS, EC_LEFTMARGIN, lMargin chkThis.BackColor = cboThis.BackColor chkThis.Move cboThis.Left + 3 * Screen.TwipsPerPixelX, cboThis.Top + 2 * Screen.TwipsPerPixelY, chkThis.Width, cboThis.Height - 4 * Screen.TwipsPerPixelY chkThis.ZOrder End If End Sub Private Sub Form_Load() AddCheckToCombo Check1, Combo1 Dim i As Long For i = 1 To 20 Combo1.AddItem "Test" & i Next i End Sub наверх Создайте свой 3D-Button Добавьте элемент PictureBox на форму Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Const BDR_RAISEDOUTER = &H1 Const BDR_SUNKENOUTER = &H2 Const BDR_RAISEDINNER = &H4 Const BDR_SUNKENINNER = &H8 Const BDR_OUTER = &H3 Const BDR_INNER = &HC Const BDR_RAISED = &H5 Const BDR_SUNKEN = &HA Const EDGE_RAISED = (BDR_RAISEDOUTER Or BDR_RAISEDINNER) Const EDGE_SUNKEN = (BDR_SUNKENOUTER Or BDR_SUNKENINNER) Const EDGE_ETCHED = (BDR_SUNKENOUTER Or BDR_RAISEDINNER) Const EDGE_BUMP = (BDR_RAISEDOUTER Or BDR_SUNKENINNER) Const BF_LEFT = &H1 Const BF_TOP = &H2 Const BF_RIGHT = &H4 Const BF_BOTTOM = &H8 Const BF_TOPLEFT = (BF_TOP Or BF_LEFT) Const BF_TOPRIGHT = (BF_TOP Or BF_RIGHT) Const BF_BOTTOMLEFT = (BF_BOTTOM Or BF_LEFT) Const BF_BOTTOMRIGHT = (BF_BOTTOM Or BF_RIGHT) Const BF_RECT = (BF_LEFT Or BF_TOP Or BF_RIGHT Or BF_BOTTOM) Const BF_DIAGONAL = &H10 Const BF_DIAGONAL_ENDTOPRIGHT = (BF_DIAGONAL Or BF_TOP Or BF_RIGHT) Const BF_DIAGONAL_ENDTOPLEFT = (BF_DIAGONAL Or BF_TOP Or BF_LEFT) Const BF_DIAGONAL_ENDBOTTOMLEFT = (BF_DIAGONAL Or BF_BOTTOM Or BF_LEFT) Const BF_DIAGONAL_ENDBOTTOMRIGHT = (BF_DIAGONAL Or BF_BOTTOM Or BF_RIGHT) Const BF_MIDDLE = &H800 ' Fill in the middle Const BF_SOFT = &H1000 ' For softer buttons Const BF_ADJUST = &H2000 ' Calculate the space left over Const BF_FLAT = &H4000 ' For flat rather than 3D borders Const BF_MONO = &H8000 ' For monochrome borders Private Declare Function DrawEdge Lib "user32" (ByVal hdc As Long, qrc As RECT, ByVal edge As Long, ByVal grfFlags As Long) As Boolean Private Sub Form_Load() ' Always set the ScaleMode to pixels when using API drawing functions. ScaleMode = vbPixels With Picture1 ' The next line is not required if you put your drawing code in the Paint event. .AutoRedraw = True ' Set the Backcolor, set the Borderstyle to none, and size the picture box to a more realistic button size. .BackColor = vb3DFace .BorderStyle = 0 .Move 60, 10, 90, 30 ' Make sure the picture box uses the pixel ScaleMode, and set the tag of the control to a caption for later use with DrawControl. .ScaleMode = vbPixels .Tag = "3D Button" End With ' Draw the initial button. DrawControl Picture1, Picture1.Tag, EDGE_RAISED End Sub ' When the picture box gets a click event, an etched box is drawn on the upper left corner of the form. Private Sub Picture1_Click() MsgBox "You Pressed the Button" End Sub ' When the user presses the mouse down on the picture box a sunken edge is drawn to simulate a depresessed button. Private Sub Picture1_MouseDown(Button%, Shift%, X!, Y!) DrawControl Picture1, Picture1.Tag, EDGE_SUNKEN End Sub ' When the user releases the mouse over the picture box a standard button is drawn. Private Sub Picture1_MouseUp(Button%, Shift%, X!, Y!) DrawControl Picture1, Picture1.Tag, EDGE_RAISED End Sub ' The DrawControl helper function is designed to make it easier to draw a button on a picture box. Private Sub DrawControl(picControl As PictureBox, strCaption As String, Optional vntEdge) Dim r As RECT ' Holds the location of the DrawEdge rectangle. Dim intOffset% ' Used to shift the caption when the button is pressed. ' If the user doesn't provide a Edge flag, then use a default value. vntEdge = IIf(IsMissing(vntEdge), EDGE_RAISED, vntEdge) ' Clear the picture control and determine where to draw the new rectangle and caption. With picControl .Cls r.Left = .ScaleLeft r.Top = .ScaleTop r.Right = .ScaleWidth r.Bottom = .ScaleHeight If vntEdge = EDGE_SUNKEN Then intOffset = 2 .CurrentX = (.ScaleWidth - .TextWidth(strCaption) + intOffset) / 2 .CurrentY = (.ScaleHeight - .TextHeight(strCaption) + intOffset) / 2 End With ' Draw the caption, then draw the rectangle. Picture1.Print strCaption DrawEdge picControl.hdc, r, CLng(vntEdge), BF_RECT ' If AutoRedraw is True, then any drawing done by an API call cannot be seen until until the picture box gets refreshed. If picControl.AutoRedraw Then picControl.Refresh End Sub наверх Мои программы BalloonMessage for MS Agent BalloonMessage for Microsoft Agent реализует диалог программы с
пользователем, используя при этом технологию Microsoft Agent. OCX реализует три
типа диалоговых окон: InputBox, MsgBox и MsgLabels. Автора: Шатрыкин Иван и Павел Сурменок. наверх Вопрос/Ответ Здесь Вы можете задать вопрос, или ответить на уже имеющиеся вопросы. Вопросы:Автор вопроса: Victor Ответ ожидается по этому адресу Что нужно сделать, чтобы гиперссылка отображалась в текстовом поле также как в Wordе или в IE. Автор вопроса: Святослав Ответ ожидается по этому адресу Как в VB6 запретить запуск экранной заставки на время работы своей программы? Автор вопроса: Mystf0rse Ответ ожидается по этому адресу есть файл *.mdb как написать прогу чтобы указывая путь к файлу, она из него вытягивала все е-мейлы, ну к примеру все слова содержащие @ Автор вопроса: Винокуров К Ответ ожидается по этому адресу Например я поставил на форму контрол "InternetTransferControl" А что делать дальше? Как им пользоваться? (Этот вопрос относится ко всем контролам) Дайте пожалуйста маленький лик.без. новичку. Автор вопроса: DDA Ответ ожидается по этому адресу Народ! Может кто знает, как делать асемблерные вставки в VB???? (на подобии Delphi или C++ ...) - ведь должно ж быть. Автор вопроса: Nechaev Sergey Ответ ожидается по этому адресу Как можно прицепить к TextBox'у свое контекстное меню, чтобы при нажатии правой кнопки мыши выскакивала моя менюшка а не стандартная. Если в событие MouseDown (up) прописать ShowPopupMenu все равно выскакивает стандартное от текстового поля. Как его заблокировать. Писать свой контрол с нуля или подключать уже готовый не хотелось бы, т.к. данный ход нужен только в одном месте на весь проект, а сторонний контрол ресурсов сожрет немерено. Автор вопроса: Anatol Ответ ожидается по этому адресу Как вывести на печать таблицу или отчет ия программы VB в формате А3? Автор вопроса: VMJ Ответ ожидается по этому адресу Кто сталкивался - как можно "заморозить" дочернюю форму в MDI. т.е. скажем все они перемещаются с помощью скролла MDI формы, а одна "прилепилась" в ее левой части и не реагирует ни на какие действия с полосой прокрутки... Автор вопроса: Костян Ответ ожидается по этому адресу есть ли такой компонент с помощью которого можно было открыть HTML страницу? Если есть то как с помощью него открыть страницу? Автор вопроса: Мунгалов Андрей Ответ ожидается по этому адресу Как заблокировать клавиатуру и мышь. Нужно чтоб работало даже если запущена игра или еще что. Автор вопроса: Dmitriy Alimov Ответ ожидается по этому адресу Подскажите как считать из *.txt строки, к примеру 10 всего 5 но в произвольном порядке Автор вопроса: Dr.Max Ответ ожидается по этому адресу Мне нужно прокрутить видео в полноэкранном режиме ,и чтобы работали все свойства формы(клавиатура,мышка). Автор вопроса: Dr.Max Ответ ожидается по этому адресу Есть файл Avi, ножно сунуть его в прогу ,чтобы не тоскать его отдельно. Кто-нибудь знает как ??? Мои эксперементы с ole обламилсь:((((((((( если ,конечно, ole это то ,что нужно. Автор вопроса: Саша Ответ ожидается по этому адресу На сервере файл размером 1Mb. А мне нужно только последнии 10 байт. как мне закачать их, некачая весь файл. Автор вопроса: Ленчевский Вячеслав Ответ ожидается по этому адресу есть ли в бейсике "пингоподобные" команды? (необходимо периодически опрашивать список адресов и выводить информацию о наличии соединения в сети) Автор вопроса: Саша Ответ ожидается по этому адресу Пишу Private Declare Function fCreateShellLink Lib "VB5STKIT.DLL" (ByVal lpstrFolderName As String, ByVal lpstrLinkName As String, ByVal lpstrLinkPath As String, ByVal lpstrLinkArgs As String) As Long Private Sub Form_Load() lngresult = fCreateShellLink("..\..\Desktop", "LINK", "C:\myfile.exe", "") End Sub Но нечего не появляется. 1.Почему ? 2. Как создать ярлык на рабочем столе ? Автор вопроса: shadow Ответ ожидается по этому адресу Это опять я :о). Подскажите плия какие апи(и как их декларировать) нужны чтобы просмотреть юяеров которые приконнектились к моему компу по локальной сети, к какому ресурсу они приконектились, какие файлы юяают, и как ия отключить? (я хочу сделать что-то типа черного списка) Ответы: Вопрос: Что такое Package & Deployment Wizard и нафиг это надо???? Ответ: Автор ответа: Мунгалов Андрей Это надо не "НА фиг", а для создания простых инсталяшек твоих великих проектов. Вопрос: Есть таблица Exel, состоящая из трех столбцов. Как на VBA написать макрос который умножает каждую ячейку первого столбца на соответствующую ячейку второго столбца, а результат заносит в соответствующую ячейку третьего столбца Ответ: Автор ответа: Zoubar Serguey По-моему, самый простой способ использовать формулы самого Excel. Но если необходимо обязательно использовать макрос, то можно написать что-нибудь вроде этого: Public Sub sbMultiply() Dim a As Range Dim i As Long For Each a In Range("Столбец3") i = i + 1 a.Value = Range("Столбец1").Cells(i).Value * Range("Столбец2").Cells(i).Value Next End Sub При этом предварительно необходимо присвоить имена Столбец1, Столбец2 и Столбец3 соответствующим диапазонам средствами Excel. Вопрос: Пожалуйста подскажите, как программным образом управлять полосой прокрутки в ListBoxe, скажем сдвинуть указатель на 25% вниз, при этом не касаясь содержимого самого ListBox-a и не снимая выделения, если выделено несколько записей? Ответ: Автор ответа: Zoubar Serguey Для управления полосой прокрутки в ListBox-e можно использовать свойство TopIndex. Например: List1.TopIndex = 10 При этом 10-й элемент списка станет верхним видимым элементом в списке и соответственно передвинется полоса прокрутки. Вопрос: Как подключить FileSystemObject? Какая библиотека за нее отвечает? Ответ: Автор ответа: Мунгалов Андрей Подключается это так идешь в проект-ссылки(Project - References) Там ищешь Microsoft ScriptingRunTime. сам файл SCRRUN.DLL лежит в системной папке Вопрос: Тупой вопрос Открываю Notepad пишу туда число 20 Закрываю. Смотрю размер файла - 2 байта Делаю тоже самое в ВБ Dim FileNum As Integer Dim txt As Byte FileNum = FreeFile txt = 20 Open "c:\file.txt" For Output As FileNum Write #FileNum, txt Close #FileNum Смотрю размер 4 байта Мне необходимо создать именно 2 байтовый Пробовал через Binary Access - добавляются левые символы Помогите примером Ответ: Автор ответа: Мунгалов Андрей Бейсик в конце строки добавляет 0D 0A (перевод каретки , перевод строки) Попробуй писать в двоичном формате но не 20 а в шестнадцатиричном 32 30 и получишь свои два байта. Вопрос: Есть-ли универсальные способы яаполнения ListView и TreeView ия объекта типа recordset. Это может быть как код, так и контролы, но код лучше. Ответ: Автор ответа: Мунгалов Андрей Да просто все перебираешь весь рекорсет в цикле Do While Not rs.EOF List1.AddItem (rs("Имя поля")) rs.MoveNext Loop Вопрос: Я сделал отчет с помощью Crystal Reports Pro присоединил к форме, но когда яаношу новые данные в отчете они не обновляются, как это сделать или подскажите как можно сделать отчет по другому если это вояможно. Испольяую баяу данных MS Access Ответ: Автор ответа: Max Свойство контрола Crystal Report - DiscardSavedData поставь в true. Вопрос: У меня VB60. Почему в его собственном редакторе не работает колесико у скролинговой мыши? Везде работает а в VB нет. Мышь обыкновенная Genius NetScroll. Драйвера стандартные Windows. Установлена Win98. Как можно решить? Или никак? А? Ответ: Автор ответа: Christian Software Center Попробуйте использовать не стандартные дрова Windows '98, а драйвер, который был куплен вместе с крыской. Обычно в нем поставляется много функций и настроек для мыши со "скролом". Например, с помощью Genius NetScroll+ v4.16 у меня работает скрол, только в VB5 (VB6 - аналогично). Единственное, что рожица в трее от драйвера может надоесть. Вопрос: А все таки как нарисовать треугольник по трем точкам. Конкретно мне надо: чтобы на экране нарисовался закрашенный треугольник. Если я буду рисовать его по линиям, то это займет много времени. Ответ: Автор ответа: Renat Rahimov Private Type tochka x As Long y As Long End Type Dim a As tochka, b As tochka, c As tochka Private Sub Form_Load() Show a.x = 100: a.y = 100: b.x = 50: b.y = 150: c.x = 220: c.y = 200 For sy = a.y To c.y X1 = a.x + (sy - a.y) * (c.x - a.x) / (c.y - a.y) If sy < b.y Then X2 = a.x + (sy - a.y) * (b.x - a.x) / (b.y - a.y) Else If c.y = b.y Then X2 = b.x Else X2 = b.x + (sy - b.y) * (c.x - b.x) / (c.y - b.y) End If End If Line (X1, sy)-(X2, sy) Next End Sub ' Чтобы не возникли ошибки отсортируй вершины так, ' чтобы вершина A была верхней, C - нижней Если не нравиться скорость,то воспользуйся: Public Declare Function Polygon Lib "gdi32" Alias "Polygon" (ByVal hdc As Long, lpPoint As POINTAPI, ByVal nCount As Long) As Long Вопрос: Как отобаяить в listbox имена файлов в укаяаной папки Ответ: Автор ответа: Christian Software Center Ставишь на форме: ListBox и FileListBox и DirListBox Пишем Sub-функцию: Private Sub ListBoxTeleport() Dim nFile As Integer ' Очишаем наш лист для новой загрузки List1.Clear ' В цикле считываем файлики со стандартного ФайлБокса и аддируем в Лист For nFile = 0 To File1.ListCount - 1 List1.AddItem File1.List(nFile%) Next nFile End Sub ' ' Здесь изменяем путь и вызываем сново функцию переноса данных ' Private Sub Dir1_Change File1.Path = Dir1.Path Call ListBoxTeleport End Sub Всё! Вопрос: Как можно прицепить к TextBox'у свое контекстное меню, чтобы при нажатии правой кнопки мыши выскакивала моя менюшка а не стандартная. А может можно как-нибудь добавить в стандартное меню свой пункт? (хотя сильно в этом сомневаюсь). Писать свой контрол с нуля или подключать уже готовый не хотелось бы, т.к. данный ход нужен только в одном месте на весь проект, а сторонний контрол ресурсов сожрет немерено. Ответ: Автор ответа: shadow Конечно можно добавить и в стандарную менуху своё но реч сейчас не об етом. 1. Создаёшь новую форму(или на уже созданой форме создаёшь меню) 2. Создаёшь меню. 3. В свойстве TextBox-а MouseDown: Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 2 Then PopupMenu MenuName End If End Sub вот собственно и всё :) Энто всё конешно классно :о), тока вот какая проблема: в твоём коде придецца два раза кнопу мыша жмать пока до менюшки достучишся. А вот если так: Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 2 Then Text1.Enabled = False Text1.Enabled = True PopupMenu MenuName End If End Sub Вот тада всё буит круто! Можете заполнить эту форму, либо отослать вопрос СЮДА Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта. |
|||||||||||||||
Выпуск подготовили: |
Сурменок Павел |