Visual Basic: новости сайтов, советы, примеры кодов.
Выпуск 135.


VBNet VBMania
Голосование:

Голосования сайта VBNet.Ru. Результаты голосований передаются на сайт. Проследите, что есть соединение с интернетом.



Рассылки Subscribe.Ru
VB.NET-World
Новости сайта IgorykSoft и советы по программированию
DanSoft о Visual Basic
Visual Basic.NET Уроки.

Ссылки:

  • Улицы VB
  • Использование VB
  • Азбука VB
  • VB на русском
  • Улицы VB
  • Кирпичики VB
  • CообЧа VB
  • Snoozex Design
  • IgorykSoft
  • DanSoft
  • Господа!!! читайте MSDN!!!

    Несколько слов от автора:

       Обязательно загляните в раздел "MSAgent CD"!
    Читайте!


    Содержание выпуска




    Книги

    Переход на VB .NET. Стратегии, концепции, код (цена ~ 158 руб.)

    Эта книга была задумана как одна из первых книг о .NET, которая ознакомит читателя с основными идеями новой архитектуры и подготовит его к знакомству с более детальной литературой, например документацией Microsoft и ее толкованиями, которая неизбежно появится на рынке. Она поможет вам взглянуть на эту технологию с позиций ваших собственных рабочих планов и быстро освоить те концепции, которые покажутся необычными для большинства прогр...

    Автор(ы): Дан Эпплман, Издательство: Питер, 2002 г.


    Программирование на VB.NET. Учебный курс (цена ~ 119 руб.)

    Эта книга является вводным курсом по изучению языка программирования Visual Basic .NET. Даны основные принципы объектно-ориентированного программирования в контексте языка VB .NET, поскольку без хорошей подготовки в этой области невозможно в полной мере пользоваться всеми преимуществами VB .NET.
    Изложены азы всех аспектов языка, которыми должен владеть любой профессиональный разработчик VB .NET

    Автор(ы): Г. Корнелл, Дж. Моррисон, Издательство: Питер, 2002 г.


    VB.NET для разработчиков (цена ~ 125 руб.)

    Основная задача книги - быстро ознакомить разработчиков Visual Basic с изменениями в .NET Framework. Программисты, использующие Java, C++, Delphi или другие инструменты разработки приложений и интересующиеся Visual Basic или технологией .NET Framework, также найдут эту книгу полезной. Хотя книга посвящена Visual Basic.NET, ее основная цель - продемонстрировать взаимодействие Visual Basic и ...

    Автор(ы): Кит Франклин, Издательство: Вильямс, 2002 г.




    Остальные книги о VB можно найти здесь.

    наверх


    MSAgent CD

       VBNet.Ru представляет новый компакт-диск!
       Этот CD полностью посвящён технологии Microsoft Agent.
       На диске Вы сможете найти:

    • Статьи - Статьи о применении технологии MS Agent в Visual Basic.
    • Софт - Программное обеспечение, дополняющее MS Agent. Здесь Вы найдёте ядро MS Agent, движки воспроизведения и распознавания речи, программу создания персонажей, программу для просмотра действий персонажей, Speech API, русификатор MS Agent и т.д.
    • Персонажи - Более 100 персонажей для MS Agent!
    • Примеры - Несколько примеров использования технологии MS Agent в Visual Basic и .NET.
    • Справочники - Справочники о MS Agent - справочник от "Русского Проекта" на русском языке, а также полная документация от Microsoft.
    • Сайт VBNet.Ru - Также на диске находится полная свежая копия этого сайта (VBNet.Ru).
    • BalloonMessage for Microsoft Agent - Ну и небольшой подарок... Компонент BalloonMessage for Microsoft Agent с бесплатной лицензией!

       Полное содержание диска можно скачать здесь.
       Обращаю Ваше внимание на то, что в магазин CD сайта VBNet.Ru действует система скидок. Если Вы уже приобрели у нас один компакт-диск, то на последующие заказы действует скидка 5%. Если же Вы купили 3 или более CD, то скидка - 10%.
       Компакт-диск распространяется по почте наложенным платежом.
       Чтобы заказать диск, зайдите сюда: http://vbnet.ru/vbshop/order.asp?id=3.

    наверх


    Добавить горизонтальную прокрутку в ListBox

    Добавьте ListBox на форму, а также элемент CommandButton. Добавьте 1 длинную string-переменную в ListBox.

    Самым полным примером я считаю вариант 3, поскольку заранее вы не можете знать, какой у вас элемент в ListBox'е самый длинный. А Вариант 3 методом перебора всех элементов ListBox'а определяет самый длинный элемент (по числу символов)

    'Пример 1

    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
    Const LB_SETHORIZONTALEXTENT = &H194

    Private Sub Form_Load()
    Static x As Long
    List1.AddItem "Добавление длинной строки для проверки примера"
    'Замените все значения 'List1.List(0)'самым длинным элементом ListBox'а
    If x < TextWidth(List1.List(0) & " ") Then
    x = TextWidth(List1.List(0) & " ")
    If ScaleMode = vbTwips Then x = x / Screen.TwipsPerPixelX
    SendMessageByNum List1.hwnd, LB_SETHORIZONTALEXTENT, x, 0
    End If
    End Sub

    'Пример 2

    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
    Const LB_SETHORIZONTALEXTENT = &H194

    Private Sub Command1_Click()
    Dim s As String
    Static x As Long
    s = InputBox("Please enter any text", "List scroll", "this is a simple scrollbar sample for demonstration purposes")
    List1.AddItem s
    If x < TextWidth(s & " ") Then
    x = TextWidth(s & " ")
    If ScaleMode = vbTwips Then x = x / Screen.TwipsPerPixelX
    SendMessageByNum List1.hwnd, LB_SETHORIZONTALEXTENT, x, 0
    End If
    End Sub

    'Пример 3

    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
    Const LB_SETHORIZONTALEXTENT = &H194

    Private Sub Command1_Click()
    Static x As Long
    For Item = List1.ListCount - 1 To 0 Step -1
    If x < TextWidth(List1.List(Item) & " ") Then
    x = TextWidth(List1.List(Item) & " ")
    End If
    Next
    If ScaleMode = vbTwips Then x = x / Screen.TwipsPerPixelX
    SendMessageByNum List1.hwnd, LB_SETHORIZONTALEXTENT, x, 0
    End Sub

    Private Sub Form_Load()
    List1.AddItem "длинная переменная, которую надо"
    List1.AddItem "длинная переменная, которую надо увидеть или не увидеть или еще что-то"
    List1.AddItem "длинная переменная, которую надо увид"
    List1.AddItem "длинная переменная, которую надо увидеть или не увидеть или еще что-тоывеапапавп"
    End Sub

    наверх


    Автоскролинг текста

    Данный пример покажет, как можно организовать автоскролинг элемента RichTextBox.

    Для проверки выполнения кода вам надо добавить на форму элементы RichTextBox, Picture и CommandButton. Не забудьте указать правильную ссылку на файл mydoc.rtf

    Private Type SCROLLINFO
    cbSize As Long
    fMask As Long
    nMin As Long
    nMax As Long
    nPage As Long
    nPos As Long
    nTrackPos As Long
    End Type
    Private Declare Function GetScrollInfo Lib "user32" (ByVal hwnd As Long, ByVal n As Long, lpScrollInfo As SCROLLINFO) As Long
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

    Const SIF_RANGE = &H1
    Const SB_VERT = 1

    Dim lHeight As Long, OnePixel As Long
    Dim S As SCROLLINFO
    Private Sub Command1_Click()
    Do
    DoEvents
    ScrollUp 50
    Loop
    End Sub

    Private Sub Form_Load()
    rtb1(0).LoadFile App.Path & "\mydoc.rtf", rtfRTF
    Picture1.Move rtb1(0).Left, rtb1(0).Top, rtb1(0).Width, rtb1(0).Height
    Set rtb1(0).Container = Picture1
    OnePixel = Screen.TwipsPerPixelY
    S.cbSize = Len(S)
    S.fMask = SIF_RANGE
    Do
    Call GetScrollInfo(rtb1(0).hwnd, SB_VERT, S)
    If S.nMax = 0 Then Exit Do
    lHeight = S.nMax * OnePixel
    rtb1(0).Height = lHeight
    Loop
    If lHeight = 0 Then lHeight = rtb1(0).Height
    Text1 = lHeight / OnePixel
    rtb1(0).Move 0, 0
    Load rtb1(1)
    rtb1(1).Visible = False
    End Sub

    Private Sub ScrollUp(delay As Long)
    Sleep delay
    With rtb1(0)
    .Top = .Top - OnePixel
    If .Top + .Height = 0 Then
    .Move 0, 0
    rtb1(1).Visible = False
    End If
    If .Top + .Height <= Picture1.Height Then
    rtb1(1).Top = .Top + .Height
    rtb1(1).Visible = True
    End If
    End With
    End Sub

    Private Sub Form_Unload(Cancel As Integer)
    End
    End Sub

    наверх


    Основы элемента RichTextBox

    Элемент RichTextBox представляет собой усовершенствованное текстовое окно, с помощью которого вы можете создавать полноценные файлы в формате RTF, в которых вы можете как угодно форматировать внешний вид своего документа: расставлять переносы, выделять текст различными шрифтами, менять гарнитуру текста и т.д.

    Подключается данный контрол очень просто: через меню Project | Components. установите флажок на строчке Microsoft Rich Textbox Control 6.0 и у вас на панели Toolbox появится значок этого компонента. Затем вы размещаете данный контрол на вашей форме... и все.

    Выделить текст жирным шрифтом

    RichTextBox1.SelBold = True

    Выделить текст курсивом

    RichTextBox1.SelItalic = True

    Выделить текст подчеркнутым шрифтом

    RichTextBox1.SelUnderline = True

    Просмотр текста в виде простого текста

    MsgBox RichTextBox1.Text

    Просмотр текста в виде RTF

    MsgBox RichTextBox1.TextRTF

    Загрузить файл

    RichTextBox1.LoadFile App.Path & "\RTFText.rtf", rtfRTF

    или

    RichTextBox1.LoadFile App.Path & "\RTFText.rtf", rtfText

    Определение строки, на которой находится курсор

    На самом деле определение строки, на которой находится курсор, не вызывает никаких трудностей. У элемента RichTextBox существует метод GetLineFromChar, который и отвечает на вопрос этой страницы. Непонятно только, почему разработчики не предусмотрели определение позиции курсора на строке. Ответ на этот вопрос остается открытым. Пишите

    Private Sub Command1_Click()
    MsgBox RichTextBox1.GetLineFromChar(RichTextBox1.SelStart) + 1
    End Sub

    наверх


    Какое слово под курсором мыши

    Данный пример покажет вам, какое слово находится под курсором мыши в элементе RichTextBox.
    Добавьте на форму элемент RichTextBox и элемент Label

    Private Const EM_CHARFROMPOS& = &HD7
    Private Type POINTAPI
    X As Long
    Y As Long
    End Type
    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
    Public Function RichWordOver(rch As RichTextBox, X As Single, Y As Single) As String
    Dim pt As POINTAPI
    Dim pos As Integer
    Dim start_pos As Integer
    Dim end_pos As Integer
    Dim ch As String
    Dim txt As String
    Dim txtlen As Integer
    pt.X = X \ Screen.TwipsPerPixelX
    pt.Y = Y \ Screen.TwipsPerPixelY
    pos = SendMessage(rch.hWnd, EM_CHARFROMPOS, 0&, pt)
    If pos <= 0 Then Exit Function
    txt = rch.Text
    For start_pos = pos To 1 Step -1
    ch = Mid$(rch.Text, start_pos, 1)
    If Not ((ch >= "0" And ch <= "9") Or (ch >= "a" And ch <= "z") Or (ch >= "A" And ch <= "Z") Or ch = "_") Then Exit For
    Next start_pos
    start_pos = start_pos + 1
    txtlen = Len(txt)
    For end_pos = pos To txtlen
    ch = Mid$(txt, end_pos, 1)
    If Not ((ch >= "0" And ch <= "9") Or (ch >= "a" And ch <= "z") Or (ch >= "A" And ch <= "Z") Or ch = "_") Then Exit For
    Next end_pos
    end_pos = end_pos - 1

    If start_pos <= end_pos Then RichWordOver = Mid$(txt, start_pos, end_pos - start_pos + 1)
    End Function
    Private Sub Form_Load()
    Label1.Caption = ""
    RichTextBox1.Text = "Ready-To-Run Visual Basic Algorithms, Second Edition" & vbCrLf & vbCrLf & "Extend your applications with powerful algorithms written in Visual Basic. Sorting, searching, trees, hashing, advanced recursion, network algorithms, object-oriented programming, and much more. Visual Basic Algorithms updated and expanded for Visual Basic 5." & vbCrLf & vbCrLf & "http://www.vb-helper.com/vba.htm"
    End Sub
    Private Sub RichTextBox1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim txt As String
    txt = RichWordOver(RichTextBox1, X, Y)
    If Label1.Caption <> txt Then Label1.Caption = txt
    End Sub

    наверх


    Как включить прокрутку по горизонтали

    По умолчанию, когда вы помещаете RichTextBox на форму, VB устанавливает свойство RightMargin как 0. Это означает, что вводимый пользователем текст целиком располагается внутри текстового окна. Для вывода горизонтальной линейки прокрутки необходимо, чтобы значение свойства RightMargin было больше, чем ширина текстового окна. Иначе, даже если установить свойство ScrollBars как 1-rtfHorizontal, RichTextBox не выведет линейку прокрутки.

    Поместите на форму RichTextBox, имеющий ширину 4000. Затем установите свойство RightMargin как 4400, а свойство ScrollBars как 1-rtfHorizontal. Запустите проект на выполнение и начните вводить текст. Когда достигнете границы текстового окна, VB выведет горизонтальную линейку прокрутки.

    наверх


    Мои программы

    BalloonMessage for MS Agent

       BalloonMessage for Microsoft Agent реализует диалог программы с пользователем, используя при этом технологию Microsoft Agent. OCX реализует три типа диалоговых окон: InputBox, MsgBox и MsgLabels.

    Автора: Шатрыкин Иван и Павел Сурменок.

    наверх


    Вопрос/Ответ

    Здесь Вы можете задать вопрос, или ответить на уже имеющиеся вопросы.

    Вопросы:


    Автор вопроса: Костик

    Ответ ожидается по этому адресу

       Как можно выключить компьютер в WinXP и Win9x (нужно чтобы код был для WinXP и Win9x одним и темже)?


    Автор вопроса: Костик

    Ответ ожидается по этому адресу

       Можно ли сделать Рабочий стол = Enebled или сделать форму прозрачного цвета?
    Нужно чтобы до определённого события нельзя было польяоваться ни рабочим столом, ни панелью (там где кнопка Пуск)


    Автор вопроса: Paul

    Ответ ожидается по этому адресу

       Подскажите, есть ли программа для автоматического подсчета количества распечатанных листов на принтере. Я не спец в VB, но может быть есть люди, которые ее уже написали и успешно пользуются. Если не трудно, то пришлите мне ее или хотя бы адрес, где эту программу можно взять.


    Автор вопроса: Володя Шестерень

    Ответ ожидается по этому адресу

       Пишу прогу по типу простенького маршрутизатора: удаленная тачка-[1] с модемом ловит входящие звонки от DialUp-почтовок-[3] и перенаправляет по TCP данные на почтовку-[2] (Argus). Использую MSCOMM И WINSOCKET. Вообщем все работает но есть одна проблемка: при приеме WINSOCKET-ом [1] от [2] больших файлов - он почти сразу загоняет их к себе в буфер и т.к. модем-то помедленнее передает, то нарушается синхронность модемного протокола т.е. при появлении ошибок и запроса с [3]-й на Resend from byte... принятый ответ WINSOCKET-ом [1] от [2] попадает в конец буфера и покуда он дойдет на отправку в модем для [3] модемная связь [1] с [3] обрывается. Вопрос: можно ли уменьшить размер входного буфера WINSOCKET-а или как-то притормаживать закачку входного потока по TCP в его буфер или че другое попробовать. (На маршрутизаторах Cisco - размер буфера видать пару килобайт и все работает на ура, хотя конечно это разные вещи).


    Автор вопроса: Lexa

    Ответ ожидается по этому адресу

       Есть ли такой грид который мог бы отображать данные различными цветами в зависимости от условий,скажем если значение поля меньше 10 тогда чёрным, больше - красным?


    Автор вопроса: Valer

    Ответ ожидается по этому адресу

       Подскажите, плиз, как сделать прогу на VB, чтобы она запускалась только с CD (т.е.ссылалась на серийный номер CD-диска). Приведите пример кода, если не трудно.


    Автор вопроса: Шурик

    Ответ ожидается по этому адресу

       Подскажите как из программы открыть сидюк? И кто нибудь знает где можно достать инфу по работе с Swiftsoft Multimedia Tools OCX


    Автор вопроса: Роман

    Ответ ожидается по этому адресу

       Как осуществить перебор всех контролов только на одной вкладке SSTab?


    Автор вопроса: Олег

    Ответ ожидается по этому адресу

       Не подскажите ли вы как в тестбоксе (или рич текст боксе) изменить цвет
    (программным путём) конкретных символов, например, я ввожу в текст-бокс "Привет всем !!!". Нужно слово "привет" сделать зелёным, "всем" красным и "!!!" синим цветом. Или ещё например как в редакторе VB- все команды синим цветом, ремарки зелёным и т.д.


    Автор вопроса: Dmitri Islentyev

    Ответ ожидается по этому адресу

       Может кто подскажет как быть: пишу на vbscript(asp), задача - с помощью word.application сохранить указанный документ ворда как html? На vb все работает, а на asp валится с сообщением "Не удается открыть банк макросов", хотя никаких макросов там нет. Вот кусок кода, валится на 3 строке:

    Dim objWdDoc
    Set objWdDoc=Server.CreateObject("Word.Application")
    objWdDoc.Documents.Open "C:\work\word-work\bar.doc"


    Автор вопроса: Лёха

    Ответ ожидается по этому адресу

       Кто-нибудь может подсказать, как сделать прозрачный контрол, который бы реагировал на нажатие кнопок мыши. А может, кто знает, как отлавливать события мыши MouseUp MouseDown???


    Автор вопроса: LexSys

    Ответ ожидается по этому адресу

       1) Люди помогите, мне нужно сделать 1 графическую фишку:
    Есть Пикчер с картинкой (растянутый на весь экран), мне нучно, разбить его на много кубиков, и чтобы каждый кубик полетел в произвольную сторону, за границу экрана? (Может кто видал такую заставку)
    2) И еще дайте пример записи\чтения данных в ини файлы, но чтобы было без всяких ocx, dll`ок?


    Автор вопроса: Артем Коваль

    Ответ ожидается по этому адресу

       Скажите пожалуйста как перемещать строки в ListView'е, и как програмно выделять любую строку по индексу.


    Автор вопроса: Hidel

    Ответ ожидается по этому адресу

       Как програмно реализовать на VB принятый в LPT или COM порт сигнал, чтобы на экране что нибудь происходило?


    Автор вопроса: s-in

    Ответ ожидается по этому адресу

       Как получить пароли Outlook Express? У меня есть исходник на с++, но никак не могу перевести его на VB. Все что я понял, так это то, что используется не документируемая функция PStoreCreateInstancePtr, которая вызывается из файла pstorec.dll. В общем похож на алгоритм получения кешированых паролей.




    Ответы:


    Вопрос:

       У меня вопрос, как узнать список расшаренных ресурсов с определенного ip.

    Ответ:

    Автор ответа: Alex

    Ну, вот как всегда... на вопросы типа "как открыть меню" отвечает 10 человек, а на "нормальные" вопросы не отвечает никто. Непорядок!
    Кстати, в свое время я долго (приблизительно год) не мог получить вразумительного ответа на этот вопрос. Но... кто ищет тот всегда найдет.
    Нашел и ты.
    Для этого надо воспользоваться API функциями класса WNet
    Это:
    WNetOpenEnum - начинает процесс перечисления сетевых ресурсов с корневого уровня или уровня другого сетевого ресурса
    WNetEnumResource - перечисляет сетевые ресурсы
    WNetCloseEnum - закрывает манипулятор перечисления сетевых ресурсов
    Все это работает как поиск файлов с помощью FindeFirst и FindeNext, только чуть-чуть сложнее.
    Тебе также будут полезны функции:
    WNetGetConnection - получает информацию подключения для локального ресурса
    WNetGetUniversalName - получает полное сетевое имя файла или сетевого ресурса

    Недеюсь как пользоваться API ты разберешься сам, ну если что... мыль.


    Вопрос:

       Есть прога - локальный чат, который использует широковещательные пакеты. так вот, надо написать прогу, которая слушает порт (на котором сидит этот чат) и принимает не только "свои" пакеты с сообщениями, но и "чужие". Короче говоря, че-то типа сниффера! Как это можно организовать?

    Ответ:

    Автор ответа: Alex

    Берешь WinSock.
    Выбираешь UDP протокол, и говоришь какой порт слушать. Если "зашевелится" кто у тебя событие наступит и ты сможешь пакет этот прочитать.


    Вопрос:

       Как можно создать метку (Label) во время работы программы, и как можно ее удалить. Причем добавление и удаление по возможности неограниченного количества Labelов за один запуск программы и по возможности чтобы они были систематизированы.

    Ответ:

    Автор ответа: Alex

    Кладешь Label на форму. В свойстве index=0.

    Load Label1 'Создать новый Label со следующим индексом
    Unload Label1 'Выгрузить (удалить) Label из масива

    В процедуре события пишешь:

    Private Sub Label1_Click(Index As Integer)
         Label1(Index).Caption = "---"
    End Sub

    Надеюсь ясно.


    Вопрос:

       Не мог бы мне кто-нибудь подсказать, как работать с числами в двоичной, 16-ричной, 8-ричной системами счисления. Может быть, в бэйсике есть какие-нибудь операции и функции для работы с ними?

    Ответ:

    Автор ответа: Alex

    Функции:

    HEX(255) - вернет "FF" - шестнадцатиричное представление десятичного
    OCT(8) - вернет "10" - восьмеричное представление десятичного числа
    BIN - к сожалению из VB ее убрали, а QBasic и QBX и VBDos она помниться мне была. Ну, ничего, напиши сам свою.

    И это еще не все...

    VAL("&HFF") - вернет 255 (число, а не строку)
    VAL("&O10") - вернет 8

    И в своей программе ты можешь наровне с десятичными писать шестнадцатиричные и восьмиричные числа:

    A = &HFF или A = &O10


    Вопрос:

       Как привязать программу к ЭВМ. Только пожалуйста не надо писать всякую бурду про дату биоса т.к она одинакова на половине мам и в 2к эта фигня не работает SOS!!!!!!!

    Ответ:

    Автор ответа: shadow

    А чево ты сам-то к дате биоса привязался? Есьть ведь еще дофигища параметров - номер винта, мамки, видюхи - а если все эти номера еще и сложить(умножить, разделить и т.д.) - тогда вообще уникальное число получится.



    Ответ:

    Автор ответа: Alex

    В свое время я тоже сталкивался с этой проблемой, и единственный выход, который я нашел для себя это собрать как можно больше уникальной информации о конкретной машине. Это:

    1) Серийный номер HDD - он уникален. Используй API GetVolumeInformation
    2) При установке винда в реестре пишет уникальный идентефикатор машины т.е. machine_id.
    Точно не помню как он называется и где именно находится, попробуй поискать его в разделе:
    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion
    (неохото лезть искать, но если оч. надо, то поискать можно)
    3) Серийный номер CPU. (надо рыть исходники)

    С первыми двумя у меня проблем не возникло, а третий работал не на всех процах. Надеюсь понятно. В принципе тебе может хватить и первого.


    Вопрос:

       Нужна помощь в написании программы программа должна открывать .html, .mdb файлы и искать e-mail'ы, программа нужна, чтобы вести базу данных пользователей. Базы есть но в html и mdb в ручную переволит очень долго,люди если кто нибудь может помочь хелпните.

    Ответ:

    Автор ответа: shadow

    Видимо предполагается что будет происходить поиск по слылкам на емайл, т.к. в тексте HTML @(сабака) может встречаться и без привязки к емылу (например в анекдотах для замены мата: х@й). Тогда нет ничего проще: открываеш HTML как текстовый файл на чтение и отсеиваещ по тегам:
    например есть HTML

    MyString="<куча текста>
    biaka@buka.ru
    <куча текста>"

    считываеш весь текст в MyString(или построчно если большой) и проверяеш (в случае считывания всего текста, проверенный кусок надо отсекать

    MyString=Right(MyString, Len(MyString)-A) )
         Dim A As Integer
         Dim Emyl As String
         Dim Begin As String
         Dim MyString As String
         MyString = Text1.Text
         Begin = "      A = InStr(1, MyString, Begin, 1) + Len(Begin)
         Emyl = Mid(MyString, A, InStr(A, MyString, Chr$(34) + ">", 1) - A)
         Text1.Text = Emyl

    Пример рабочий


    Вопрос:

       У меня один маленький вопрос по объекту ADODB.Recordset. Чем отличаются значения свойства CursorLocation - adUseClient и adUseServer? И почему, если это свойство установлено в adUserServer, то свойство RecordCount воявращает -1 и при попытке связать Recordset с DataGrid вояникает ошибка.

    Ответ:

    Автор ответа:
    Sergey

    Вопрос слишком глобальный, чтобы на него ответить одним предожением. Значения этого св-ва зависят от того какой источник данных и какой провайдер используется ADO для доступа к данным.
    Если брать MSSQL, то действительно при CursorLocation = adUseServer RecordCount всегда -1 потому что ADO не знает сколько записей в рекордсете и которые нужно вытягивать через Eof/MoveNext. Клиентские курсоры быстрее потому что данные располагаются на клиенте, но серверные используют меньше ресурсов.


    Вопрос:

       У меня 2 принтера, HP и VentaFax. Из моей проги мне нужно то напечатать заявку, то послать ее по факсу. Эту проблему пока я решаю вызовом окна Windows "Принтеры" и переключением принтера по умолчанию. А вот программно, выбрав сообветствующий переключатель на форме не удается. Если кто решил эту проблему, помогите п-та.

    Ответ:

    Автор ответа: Артем Кривокрисенко

    Думаю, так:

    Printers(n).print .....

    где n - номер принтера


    Вопрос:

       Как, если можно, сделать в VB ассемблерные вставки?

    Ответ:

    Автор ответа: Артем Кривокрисенко

    Option Explicit

    'restarting your machine by assembly
    'works only on win 9x os (not sure of win me)

    Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal ptrMC As Long, ByVal P1 As Long, ByVal P2 As Long, ByVal P3 As Long, ByVal P4 As Long) As Long
    Private MCode(0 To 8) As Byte 'the byte array to hold the machine code
    Private pointerMC As Long 'pointer to the first byte

    Private Sub Command1_Click()
    Dim dl As Long
    Dim response
    response = MsgBox("If you are using Win9x, this will restart your machine now. Save your works before clicking 'yes'. Are you sure to do it?", vbQuestion + vbYesNo + vbDefaultButton2)
    If response = vbNo Then Exit Sub
    dl = CallWindowProc(pointerMC, 0&, 0&, 0&, 0&)
    End Sub

    Private Sub Form_Load()

    'the assembly codes are these:
    ' in al,92h
    ' or al,1
    ' out 92h,al
    ' ret 16

    'the hex values of these codes from the generated binary file
    'by NASM are put into the byte array

    MCode(0) = &HE4
    MCode(1) = &H92
    MCode(2) = &HC
    MCode(3) = &H1
    MCode(4) = &HE6
    MCode(5) = &H92
    MCode(6) = &HC2
    MCode(7) = &H10
    MCode(8) = &H0

    'pointing to the first byte of machine code
    pointerMC = VarPtr(MCode(0))

    End Sub

    Если верить автору кода, этот код должен перезагрузить машину. У меня ни под XP, ни под 98-й ничего не происходит.



    Ответ:

    Автор ответа: P@Ssword

    Можно написать на Ассемблере Dynamic Link Library и использовать её функции в коде VB. Больше никак.



    Ответ:

    Автор ответа: Sergey

    Никак, да и для чего ? Ведь ты не сможешь все равно использовать в ассемблерном коде переменные/объекты VB.



    Ответ:

    Автор ответа: ]CBK[CRaSH

    Чего нету того нету.
    Но можно написать DLL на асме и юзать в вб


    Вопрос:

       Вот вопрос говарят он тежёлый. Есть обьект DanaGrid в его свойствах есть возможнасть сделать из колонки в ComboBox (как в Access) но я не знаю как. К примеру я делал так

    Private Sub Form_Load()
         Dim Indx As Integer
         DataGrid1.Columns(1).Button = True
    End Sub

    Private Sub DataGrid_ButtonClick(ByVal ColIndex As Integer)
    With DataGrid
         List1.Top = .RowTop(.Row) + .Top + .RowHeight + 10
         List1.Width = .Columns(1).Width + 50
         If Not .Columns(1).Text = "" Then
             For Indx = 0 To List1.ListCount - 1
                 List1.ListIndex = Indx
                 If List1.Text = .Columns(1).Text Then
                     List1.ListIndex = Indx
                     Exit For
                 End If
             Next Indx
         Else
             List1.ListIndex = 0
         End If
    End With
    List1.Visible = True
    List1.SetFocus
    End Sub

    Может есть на много удобный способ, не проста так сделали эту кнопку в DataGrid.

    Ответ:

    Автор ответа: Sergey

    Если тебе нужен чтобы ты мог ввести данные из списка (ComboBox) в какую-то из ячеек используй ComponentOne True DBGrid + TDBDropDown компоненты.


    Вопрос:

       У меня VB6 не хочет работать с базами Access2000, примеры из Access97 берет, а для 2000 пишет - нераспознанный формат данных, когда выбираю RecordSource. Помогите, что я делаю не так?

    Ответ:

    Автор ответа: Кварк

    Привет, тебе нужно инстальнуть новый MDAC 2.6 вроде... Я нашел в 5 сервис паке (говорят еще в 4 был) мне помогло.



    Ответ:

    Автор ответа: Лозовский Антон Борисович

    Попробуй поставить Servicepack 5.



    Ответ:

    Автор ответа: Алексей

    Нужно работать через dao360.dll (формат Access 2000).



    Ответ:

    Автор ответа: Корик

    VB6 работает с Access2000 только после установления Server Pack, который ты можешь найти на сайте микрософта.



    Ответ:

    Автор ответа: Sergey

    Я так понял, речь идет о библиотеке DAO? Если так то для того, чтобы она понимала Access 2000/XP необходима версия 3.60 и не ниже.


    Вопрос:

       Подскажите пожалуйста где можно бесплатно скачать самоучитель для начинающих или может быть есть какие-нибудь рассылеи уроков. Я живу за границей и поэтому имеются сложности с оплатой.

    Ответ:

    Автор ответа: Артем Кривокрисенко

    www.vb.kiev.ua - Прекрасный учебник Андрея Гончарова "Мышление в стиле
    Visual Basic". Must have!
    Есть такая конференция - SoobCha_VB. Там можно получить ответ практически на любой ответ любой сложности. Подписаться можно, отправив пустое письмо по адресу vb-on@soobcha.org



    Ответ:

    Автор ответа: Loki

    Зайди на www.subscribe.ru там ты можешь подписаться на рассылки. Там ты найдеш раздел програмирование!!!


    Вопрос:

       Почему у меня 2 проекта не принимают функции Right или Left, создаю новый проект - все нормально, а в этих он просто не принимает их, как-будто их не существует. Эти 2 проекта исп. Winsock, может из-за этого?
    Если пишу так Right$ - Ошибка: Type-declaration character does not match declared date tupe.
    Если пишу так Right - Ошибка: Ожидаемый массив

    Ответ:

    Автор ответа: Артем Кривокрисенко

    Не пойму, в чем проблема. Неплохо бы и привести кусочек кода.
    Попробуй сделать так:

    str= VBA.Right(.....)



    Ответ:

    Автор ответа: ]CBK[CRaSH

    Здесь может быть из-за того что у тебя в References подключин обьекс которого не существует



    Ответ:

    Автор ответа: TiborF

    В полне возможно что в твоих проектах уже объявлены одноимённые переменные или ф


    Вопрос:

       Подскажите, как сделать форму проярачной? С SetWindowLong что-то не получается

    Ответ:

    Автор ответа: P@Ssword

    Если с SetWinLong не получается, то первое, что надо сделать - установить Windows не ниже 2000.


    Вопрос:

       Делаю так (естественно все продекларировав):

    Dim hwnd As Long
    Dim pid As Long
    Dim pHandle As Long
    Dim str As String*20
    hwnd = FindWindow(vbNullString,"яаголовок окна игры")
    If(hwnd=0) Then Exit Sub
    GetWindowThreadProcessld hwnd,pid
    pHandle =OpenProcess(PROCESS_ALL_ACCESS,False,pid)
    If(pHandle=0)Then Exit Sub
    ReadProcessMemory pHandle, &H(adres),str,20,0&
    text1.text=str
    CloseHandle hProcess

    Всё это яамечательно, только мне надо считывать не строку, а число. Если поставить str в Long то воявращается ноль, все остальные типы дают ошибку - несовпадение типов. Скажите как считать число? или придется преобраяовывать строчку по Asc?

    Ответ:

    Автор ответа: P@Ssword

    Может, у тебя прописана передача строки ByVal, если да - то просто убери.


    Вопрос:

       Как в VB играть MIDI,WAV,MP3и другие файлы?

    Ответ:

    Автор ответа: Кварк

    Привет, а ты просто подцепи медиа оcx (из набора стандартных) он все могет



    Ответ:

    Автор ответа: lom

    Используй такой контрол, как WindowsMediaPlayer (Component-WindowsMediaPlayer)

    WindowsMediaPlayer.FileName = "Путь к твоемй файлу"

    а так же можешь использовать методы

    WindowsMediaPlayer.Play
    WindowsMediaPlayer.Stop
    WindowsMediaPlayer.Pause


    Вопрос:

       Скажите, существует ли такая API функция, которая считывает состояние трафика, при соединении с Инетом?

    Ответ:

    Автор ответа: Лозовский Антон Борисович

    Нету. Пиши заглушку через Винсок.


    Вопрос:

       Я создал прогу типа обучающего комплекса(Full ass) но самое главное что я хочу сделать это чтобы все базы были на серванте, а клиен юзал их по сети. НО фишка в том что WinSock едри его растуды связанный по протаколу TCP не разрешает конектится нескольким клиентам к одному порту. Я сделал процедуру автомотического добовления WinSocka и встретил баг. после дабавления около 40 sock`oв всех обрубало или начинало все глючить. Я начил использовать UDP и о чудо в забиндиный порт могут конектится дох..на народу и посылать инфу серванту, а вот наоборот сервер посылает инфу только тому кто первый ему пошлет что-нибудь.

    Ответ:

    Автор ответа: shadow

    У винсока есть такое свойство RemoteHost, и если RemoteHost не указан явно, то VB хватает тот хост который первым чевото сообщил. Видимо надо делать чтото вроде этого:

    Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Dim strData As String
    Dim Adres As Long
    Adres = Winsock1.RemoteHost
    If strData = "zapros" Then
         Winsock1.RemoteHost = Adres
         Winsock1.RemotePort = kakoi_to_tam
         Winsock1.SendData "infa"
    End If
    End Sub



    Ответ:

    Автор ответа: P@Ssword

    ... WinSock едри его растуды связанный по протаколу TCP не разрешает конектится нескольким клиентам к одному порту...

    Это кто ж сказал, что не позволяет? Ещё как позволяет!

    А про UDP. Ты тоже загружаешь кучу WinSock? Нет? А надо... Или каждый раз менять RemoteHost на следующего клиента.


    Вопрос:

       Как мне создать новый элемент а именно OptionButton в работающей программе на фрейме и определить ему свойства.

    Ответ:

    Автор ответа: Артем Кривокрисенко

    Могу прислать такой контрол. В стиле XP


    Вопрос:

       Подскажите как можно из Vb считать/отследить информацию по COM - порту. Скажем получить код со сканера штрих-кодов (как в супермаркете).

    Ответ:

    Автор ответа: Лозовский Антон Борисович

    Чтобы на VB работать с COM портом - используй Microfoft Comm Control (элемент управления такой).

    А чтоб получить еще и код со сканера штрих-кода этого мало: нужно знать его протокол обмена информацией с компьютером.


    Вопрос:

       Как отправить данные на определённый порт. Т.е. нужно изменить значение второго (...девятого) штырька на LPT. В Qbasic-е это выглядит так:

    OUT &H378, g 'g-число от 0 до 255

    а на VB неизвестно.
    Сколько вольт и ампер должно быть на штырьках, чтоб порт не сгорел.
    Есть ли у кого-нибудь что-нибудь в примерах по этой теме?

    Ответ:

    Автор ответа: Лозовский Антон Борисович

    Лучше не экспериментируй с вольтами и амперами - или порт попалишь, или принтер угробишь.




    Можете заполнить эту форму, либо отослать вопрос СЮДА

    Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта.
    Текст сообщения:
    Ваше имя
    E-mail для ответа

    наверх


    Выпуск подготовили:

    Сурменок Павел