VBNet
VBMania
Голосование: Голосования сайта VBNet.Ru. Результаты голосований передаются на сайт. Проследите, что есть соединение с интернетом. Ссылки: |
Господа!!! читайте MSDN!!! Несколько слов от автора:
Очередной выпуск рассылки.
Читайте! Содержание выпуска
Книги
Остальные книги о VB можно найти здесь. наверх Включить/выключить перенос по словам Расположите на форме 2 элемента CommandButton. Const WM_USER = &H400 Const EM_SETTARGETDEVICE = (WM_USER + 72) 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 Command1_Click() SendMessageLong RichTextBox1.hwnd, EM_SETTARGETDEVICE, 0, 1 End Sub Private Sub Command2_Click() SendMessageLong RichTextBox1.hwnd, EM_SETTARGETDEVICE, 0, 0 End Sub наверх Как сохранить RTF-файл в виде простого текста Переменная txt содержит содержимое открытого rtf-файла в виде простого текста Dim txt As String: txt = RichTextBox1.Text Dim FN As Integer: FN = FreeFile Dim FName As String: FName = "C:\index.txt" Open FName For Output As #FN: Print #FN, txt: Close #FN наверх Как снять форматирование при вставке текста в элемент RichTextBox Предположительно, в буфере обмена у вас находится текст с форматированием, который вы хотите вставить как обычный текст. Используйте следующий код для решения такой проблемы: Dim CBC As String CBC = Clipboard.GetText Clipboard.Clear Clipboard.SetText CBC наверх Выделить цветом определенное слово во всем тексте Расположите на форме элемент RichTextBox и элемент CommandButton. Установите ссылку на любой файл в процедуру Form_Load(). Private Sub Command1_Click() Dim lWhere, lPos As Long Dim sTmp, sSearch As String lPos = 1 'Здесь вы можете указать слово для поиска и замены sSearch = "FAQ" 'поиск по всему тексту Do While lPos < Len(Me.RichTextBox1.Text) sTmp = Mid(Me.RichTextBox1.Text, lPos, Len(Me.RichTextBox1.Text)) lWhere = InStr(sTmp, sSearch) lPos = lPos + lWhere If lWhere Then 'если строка для поиска найдена Me.RichTextBox1.SelStart = lPos - 2 'установить начало выделения Me.RichTextBox1.SelLength = Len(sSearch) 'установить длину выделения Me.RichTextBox1.SelColor = RGB(255, 0, 0) 'изменить цвет выделения красным цветом Else Exit Do End If Loop End Sub Private Sub Form_Load() 'установите ссылку на любой файл в формате rtf или txt RichTextBox1.FileName = "C:\Мои документы\courier.txt" End Sub наверх Как вставить рисунок Данный пример покажет, как можно программно вставить графический файл в элемент RichTextBox. Наличие событий Form_Load и Form_QueryUnload обязательно, иначе ваш VB-проект просто-напросто "рухнет". Private Sub Command1_Click() a = RichTextBox1.SelStart RichTextBox1.OLEObjects.Add , , "D:\4\add_pictures_to_richtextbox\smile.bmp" RichTextBox1.SelStart = a + 1 RichTextBox1.SetFocus End Sub Private Sub Form_Load() RichTextBox1.OLEObjects.Clear End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) RichTextBox1.OLEObjects.Clear End Sub наверх Мои программы BalloonMessage for MS Agent BalloonMessage for Microsoft Agent реализует диалог программы с
пользователем, используя при этом технологию Microsoft Agent. OCX реализует три
типа диалоговых окон: InputBox, MsgBox и MsgLabels. Автора: Шатрыкин Иван и Павел Сурменок. наверх Вопрос/Ответ Здесь Вы можете задать вопрос, или ответить на уже имеющиеся вопросы. Вопросы:Автор вопроса: Maxim Ответ ожидается по этому адресу У меня творческий облом ,и от делать нечего решил написать просмотрщик графики. Просто "просмотрщик графики" я сделал быстро, но просто "просмотрщик графики" это не интересно и даже грустно:(( Поэтому я решил добавить возможность просмотра графики из и-нета ,но как вы уже поняли..... Если кто-нибуть знает как это возможно осуществить, напишите!!! Автор вопроса: Саша Ответ ожидается по этому адресу Как отправить какой либо файл на печать ? Автор вопроса: Pasha Ответ ожидается по этому адресу Помогите, какой нибудь информацией по поводу прокрутки колесиком мыши в элименте управления DBGrid и вообще в VB можно получить доступ к колесику Автор вопроса: Шаде Ответ ожидается по этому адресу Вот скачал ocx для создания ярлычков, а он не пашет :(( может у кого есть инфа как эти самые ярлычки создавать? Автор вопроса: lom Ответ ожидается по этому адресу Народ, а каково Ваше мнение на Visual Basic 7.0... как он Вам на первый вягляд(а может быть и не на первый)... Автор вопроса: Emil revencu Ответ ожидается по этому адресу Нужен формат файлов-ярлыков (*.lnk), то-есть байт-карта файла. Автор вопроса: s-in Ответ ожидается по этому адресу Как сделать программу сервисом в Windows XP? Чтобы программа когда запускалась, определяла, какая версия Windows установлена, XP или 98? Знаю,что сервис в Windows 98 делается так: Public Declare Function RegisterServiceProcess Lib "kernel32" (ByVal ProcessID As Long, ByVal ServiceFlags As Long) As Long Public Declare Function GetCurrentProcessId Lib "kernel32" () As Long RegisterServiceProcess GetCurrentProcessId, 1 А как в XP? Автор вопроса: Luza Ответ ожидается по этому адресу У меня несколько вопросов: 1. Как можно записать рисунок в переменную, чтобы после значение переменной снова присвоить PictureBox? h = Picture1.Picture Picture2.Picture = h - так не выходит, говорит, что требуется объект h = Picture1.hDC - это вообще лишь указатель на картинку в памяти, если я правильно понял. Или, если кто знает, как считать ее из памяти в переменную? BitBlt или через сохранение в файл не предлагать. 2. Как выключить комп из Win2k? Те API, что работали в Win9x в Win2k не работают. 3. Может кто знает как использовать *.dic - словари из Word'a(для проверки орфографии). Буду рад любой информации! Автор вопроса: Игорь Ответ ожидается по этому адресу Вот Задача или незадача! Необходимо создать отчет таком виде чтобы во время выполнения на него можно было брасать разные контролы по DragDrop и затем его распечатать. Пробывал с PictureBox, печатает только графику, может кто подскажет или даст ссылку. Автор вопроса: P@Ssword Ответ ожидается по этому адресу Как определить момент выключения компьютера? Надо отсеять перезагруяку и завершение сеанса. Автор вопроса: Bezeq Ответ ожидается по этому адресу Написал программу, с использованием БД аксесс. Устанавливаю на компе юзверя - не хочет работать, говорит не могу создавать объекты БД. Покопался, обнаружил что нужно поставить MDAC_TYP на компе юзверя... Дело в том, что не хочется на CD иметь два сетапа, один с моей прогой, второй MDAC_TYP. Как обойтись без него, т.е. как узнать какие DLL нужны, для того чтобы их включить в инсталляшку моей проги и не заставлять юзверя устанавливать два сетапа ? И еще один вопрос. Какие библиотеки нужны чтоб на компе юзверя заработал флеш (свиф) ? Автор вопроса: Dmitry Ответ ожидается по этому адресу Как в ВБ мона принять письмо с атачментом и распаковать атачмент нормально. Отсылать я умею, и принимать тоже, а вот как его дешифровать из этого UUE алгоритма ? Если у кого есть хоть какая-то инфа по данному делу, огромная просьба поделиться - век не забуду добрых людей! Автор вопроса: Роман Ответ ожидается по этому адресу Как в DataBoundGrid переместиться в конец/начало таблицы? Как изменять и записывать значения в DBGrid? Автор вопроса: OriGinal fox Ответ ожидается по этому адресу Как с помощью Vb очистить корзину? Ответы: Вопрос: Кто нибудь знает как запустить компьютер из сети. Не из спящего режима, а именно выключенный. Ответ: Автор ответа: Константин Если в мамку встроена сетевая плата, то в БИОСе должна быть соответствующая опция, типа включить компьютер по вызову на сетевую плату... или что-то в этом роде (детально не разбирался). Ответ: Автор ответа: Tank Никак ты его по сети не включишь, это технически не возможно! За это БИОС отвечает, а сетевая карта лишь потом инициализируется, да и вообще сейчас большинство сетевых карт только под виндами работают. Максимум что ты можешь сделать так это установить в БИОСе будильник на включение, тоды комп включится в установленное время Ответ: Автор ответа: Andrushin Sergey Если компьютер выключен, значит он не подключён к сети, а значит не включить, не выключить его нельзя! Ответ: Автор ответа: TiborF Не, если рядом нет резетки, то даже не пытайся. Вопрос: Можно ли привяяать координаты дочерней формы (свойства Top и Left) к координатам кнопки, по нажатию на котррую эта форма выяывается. Например, чтобы дочерняя форма появлялась строго под кнопкой неяависимо от положения самой кнопки на родительской форме? В приведенном ниже примере привяяка почему-то не работает: Form1.Left = MainForm.cmdButton.Left + 100 Form1.Top = MainForm.cmdButton.Top + 50 Ответ: Автор ответа: Chernov Dmitry Дело в том, что Access и Windows используют разные системы координат. Для того, чтобы привязать вызываемую форму к определенной точке (как на картинке) необходимо выполнить пересчет координат Добавляем в проект модуль Календарь ---------- Модуль Календарь ---------- Option Compare Database Option Explicit Public Type POINTAPI x As Long y As Long End Type Public Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Public Const SWP_FRAMECHANGED = H20 Public Const SWP_HIDEWINDOW = H80 Public Const SWP_NOACTIVATE = H10 Public Const SWP_NOCOPYBITS = H100 Public Const SWP_NOMOVE = H2 Public Const SWP_NOOWNERZORDER = H200 Public Const SWP_NOREDRAW = H8 Public Const SWP_NOREPOSITION = SWP_NOOWNERZORDER Public Const SWP_NOSIZE = H1 Public Const SWP_NOZORDER = H4 Public Const SWP_SHOWWINDOW = H40 Public Const LOGPIXELSX = 88 Public Const LOGPIXELSY = 90 Public Const SM_CXSCREEN = 0 Public Const SM_CYSCREEN = 1 Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long Public Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long Public Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long Public Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long Public Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long Public Declare Function ScreenToClient Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long Public Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long Private Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, lpInitData As Any) As Long Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long Public Function CallCalendar(Optional dDate As Variant, Optional lLeft As Long = 0, Optional lBottom As Long = 0, Optional lTop As Long = 0) As Date Dim frm As Form_frm_calendar ' _frm_calendar Dim lB As Long, lL As Long, lH As Long, lW As Long Dim lTwipX As Long, lTwipY As Long Dim ScreenX As Long, ScreenY As Long DoCmd.OpenForm "frm_calendar", acNormal, , , , acHidden Set frm = Forms!frm_calendar.Form lL = lLeft lB = lBottom lH = frm.WindowHeight lW = frm.WindowWidth lTwipY = GetYTwipsInPixel() ScreenX = GetSystemMetrics(SM_CXSCREEN) ScreenY = GetSystemMetrics(SM_CYSCREEN) lH = lH / GetYTwipsInPixel() lW = lW / GetXTwipsInPixel() If lB + lH > ScreenY Then lB = lTop - lH - 1 If lL + lW > ScreenX Then lL = ScreenX - lW - 1 SetWindowPos frm.hwnd, 0, lL, lB, 0, 0, SWP_NOSIZE Or SWP_NOZORDER If IsMissing(dDate) Then dDate = Now() If IsNull(dDate) Then dDate = Now() frm.MyDate = dDate frm.Visible = True frm.fActive = True Do DoEvents Loop While frm.fActive ' Ожидание закрытия окна CallCalendar = frm.MyDate frm.fUnload = True DoCmd.Close acForm, frm.Name Set frm = Nothing End Function ' Функция GetXTwipsInPixel возвращает кол-во Twips в 1-ом пикселе по горизонтали Public Function GetXTwipsInPixel() As Long Dim hdc As Long hdc = CreateDC("DISPLAY", ByVal 0, ByVal 0, ByVal 0) GetXTwipsInPixel = 1440 / GetDeviceCaps(hdc, LOGPIXELSX) Call DeleteDC(hdc) End Function ' Функция GetYTwipsInPixel возвращает кол-во Twips в 1-ом пикселе по вертикали Public Function GetYTwipsInPixel() As Long Dim hdc As Long hdc = CreateDC("DISPLAY", ByVal 0, ByVal 0, ByVal 0) GetYTwipsInPixel = 1440 / GetDeviceCaps(hdc, LOGPIXELSY) Call DeleteDC(hdc) End Function ---------------------------------- Создаем две формы. На одну бросаем поле [Дата1] и кнопку [КнопкаДата1]. На другой OCX Календарь. В первой форме к событию Click кнопки [КнопкаДата1] привязываем следующую процедуру ---------- Модуль формы ---------- Private Sub КнопкаДата1_Click() On Error GoTo Err_КнопкаДата1_Click Dim lTwipX As Long, lTwipY As Long Dim pt As POINTAPI Dim rcWnd As RECT Dim d As Date lTwipX = GetXTwipsInPixel() lTwipY = GetYTwipsInPixel() pt.x = 0: pt.y = 0 ClientToScreen Me.hwnd, pt With rcWnd .Top = pt.y + CLng((Me![Дата1].Top + Me.CurrentSectionTop) / lTwipY) .Bottom = pt.y + CLng((Me![Дата1].Top + Me![Дата1].Height + Me.CurrentSectionTop) / lTwipY) .Left = pt.x + CLng((Me![Дата1].Left + Me.CurrentSectionLeft) / lTwipX) End With If IsNull(Me![Дата1]) Then Me![Дата1] = CallCalendar(, rcWnd.Left, rcWnd.Bottom, rcWnd.Top) ElseIf Len(Me![Дата1]) Then d = DateValue(Me![Дата1]) Me![Дата1] = CallCalendar(d, rcWnd.Left, rcWnd.Bottom, rcWnd.Top) Else Me![Дата1] = CallCalendar(, rcWnd.Left, rcWnd.Bottom, rcWnd.Top) End If Exit_КнопкаДата1_Click: Exit Sub Err_КнопкаДата1_Click: MsgBox "<" Err.Number "> " Err.Description Resume Exit_КнопкаДата1_Click End Sub ---------------------------------- Вот и все... Собственно форма календарь ничего сложного не представляет. ---------- Модуль формы Календарь ---------- Option Compare Database Option Explicit Public fUnload As Boolean Public fActive As Boolean Private Sub Form_Load() fUnload = False End Sub Private Sub Form_Unload(Cancel As Integer) If Not fUnload Then fActive = False Me.Visible = False Cancel = -1 End If End Sub Private Sub ЭлементActiveX0_AfterUpdate() SetCaption End Sub Private Sub ЭлементActiveX0_Click() Form_Unload 0 End Sub Private Sub SetCaption() Me.Caption = Format$(DateSerial(ЭлементActiveX0.Year, ЭлементActiveX0.Month, ЭлементActiveX0.Day), "dd.mm.yyyy") End Sub Public Property Let MyDate(d As Date) ЭлементActiveX0.Year = Year(d) ЭлементActiveX0.Month = Month(d) ЭлементActiveX0.Day = Day(d) SetCaption End Property Public Property Get MyDate() As Date MyDate = DateSerial(ЭлементActiveX0.Year, ЭлементActiveX0.Month, ЭлементActiveX0.Day) End Property Ответ: Автор ответа: P@Ssword Положение элементов формы задаётся относительно левого верхнего угла формы, а положение формы - относительно левого верхнего угла экрана. Так что небольшое преобразование координат не помешает :-) Form1.Left = MainForm.Left + MainForm.cmdButton.Left + 100 Form1.Top = MainForm.Top + MainForm.cmdButton.Top + 50 Вопрос: Есть ComboBox со значениями, в зависимости от выбираемого значения появляетяс Lebel. При задании Private Sub Combo1_Change() Select Case Combo1.Value Case "СУГ" Form.Label2.Visible = True Case "Нефть" Form.Label2.Visible = False End Sub В результате Label2 - не исчезает Ответ: Автор ответа: Барсуков Евгений Все дело в том, что вы обрабатываете только событие Change, а нужно обработывать еще и событие Click. То есть код должен быть такой: Private Sub Combo1_Change() Select Case Combo1.Value Case "СУГ" Form.Label2.Visible = True Case "Нефть" Form.Label2.Visible = False End Sub Private Sub Combo1_Click() Combo1_Change End Sub Ответ: Автор ответа: Карамнов Саша - KAS \(c\)" По неизвестным мне причинам событие Change не действует, а свойство Value не существует и вообще команду Select надо заканчивать End Select, а вот так получается: Private Sub Combo1_Click() Select Case Combo1.Text Case "СУГ" Label1.Visible = True Case "Нефть" Label1.Visible = False End Select End Sub Ответ: Автор ответа: Анатолий Событие Change происходит тогда, когда меняется текст непосредственно в строке (удаляются или вставляются символы). Если же значение просто выбирается из выпадающего списка, то этого не происходит. Нужно использовать другие события - потеря фокуса, нажатие кнопки etc. В Access есть событие AfterUpdate(после обновления) - в нем такие вещи и отслеживаются. В VB я такого для ComboBox не нашел :-( . Но я в основном работаю с Access'ом, и чистый VB не сильно знаю. Может. это как-то по другому называется. И еще - у ComboBox, похоже, нет свойства Value, а есть Text. Ответ: Автор ответа: Mind Engine Гы! У ComboBox`a в VB нет свойства Value! Value только в VBA под Аccess и прочих офисных мамонтах! Надоть опрашивать Text! =) A также тконструкцию select case надо завершать 'end select' и событие для ComboBox другое! Внимательней, мадам, надо быть! ;) Для VB только так Private Sub Combo1_Click() Select Case Combo1.Text Case "СУГ" Label2.Visible = True Case "Нефть" Label2.Visible = False End Select End Sub Для VBA же так Private Sub Combo1_Change() Select Case Combo1.Value 'можно и Text! %) Case "СУГ" Label2.Visible = True Case "Нефть" Label2.Visible = False End Select End Sub Ответ: Автор ответа: Евгений А попробуйте так: Private Sub Form_Load() ComboBox1.AddItem "СУГ", 0 ComboBox1.AddItem "Нефть", 1 End Sub Private Sub ComboBox1_Change() Select Case ComboBox1.ListIndex Case 0: Form.Label2.Visible = True Case 1: Form.Label2.Visible = False End Select End Sub P.S. А так же можно для красоты использовать такой контрол, как Microsoft Form 2.0 ... там ComboBox можно сделать прозрачным! Ответ: Автор ответа: MaxOn Попробуй так: Private Sub Combo1_Change() Select Case Combo1.Text Case "nw" Form1.Label2.Visible = True Case "wn" Form1.Label2.Visible = False End Select End Sub Ответ: Автор ответа: P@Ssword Может, вместо Combo1.Value нужно Combo1.Text? Вопрос: Пишу программу на VBA в Excel, вешаю мою процедуру на DBClick, как сделать так, что бы после выполнения моей процедуры DBClick не отрабатывался. Ответ: Автор ответа: Mind Engine Глобальную логическую переменную определи и все! В теле DBClick`a проверку на это дело, как твоя процедура сработала, в конце ее енту переменную в 1 и усе! Moл сам не знал! ;) dim lvr as integer Private Sub Form_Load() lvr = 0 End Sub Private Sub Form_DblClick(Cancel As Integer) if lvr then exit sub End Sub Вопрос: Как получить в List адреса всех веб-страниц, которые расположены на текущем сервере? Т.е., например, мне надо получить полный список всех страниц, которые находятся на http://www.hostname.com/ и внести все полученные URL в ListBox. Если кто-то может помочь, напишите как. Буду благодарен, также, если приведете пример. Ответ: Автор ответа: P@Ssword К сожалению, протокол HTTP не предусматривает команды DIR, так что максимум, что можно узнать с сервера, - это страницы, на которые имеются ссылки. Так что принцип такой: скачиваем главную страницу, парсируем её на предмет поиска линков на другие страницы, с этими страницами делаем то же самое. Можете заполнить эту форму, либо отослать вопрос СЮДА Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта. |
|||||||||||||||
Выпуск подготовили: |
Сурменок Павел |