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


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!!!

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

       Новый выпуск рассылки! Присылайте коды в рассылку! Если каждый из вас пришлёт по одному коду, то этого хватит, чтобы выпускать рассылку каждый день в течение двух лет!
    Читайте!


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




    Книги

    Переход на 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 можно найти здесь.

    наверх


    Проверка орфографии

    Хотелось ли вам добавить возможность проверки орфографии вашего TextBox'а? Такое возможно, если на вашем компьютере установлен MsWord.

    Private Sub Command1_Click()
    Text1 = SpellCheck(Text1)
    End Sub

    Public Function SpellCheck(ByVal IncorrectText$) As String
    Dim Word As Object, retText$
    On Error Resume Next
    'Создать объект и загрузить Word
    Set Word = CreateObject("Word.Basic")
    'Показать Word и вставить в него ваш текст
    Word.AppShow
    Word.FileNew
    Word.Insert IncorrectText
    'Запустить проверку орфографии
    Word.ToolsSpelling
    Word.EditSelectAll
    'Выделить текст и загрузить его обратно в TextBox
    retText = Word.Selection$()
    SpellCheck = Left$(retText, Len(retText) - 1)
    'Закрыть файл в Word и вернуться в Visual Basic.
    Word.FileClose 2
    Show
    'Освободить память от объекта word
    Set Word = Nothing
    End Function

    наверх


    Как узнать данные, скрытые за звездочками

    Существует большое количество программ,которые могут вытащить данные, скрытые за звездочками. Вот и я нашел вариант такой программы. Вам достаточно разместить на форме элемент Timer, запустить программу, найти любое текстовое окно, в ктором данные спрятаны за зведочками и два раза щелкнуть мышью на этой на этом текстовом окне.

    Хотя и не факт, что вы увидите спратанные за звездочками данные! :))

    Но я на своем компьютере в некоторых программах смог увидеть несколько запароленных данных. Какие программы? А не скажу...

    И в завершение, позвольте напомнить вам, как все-таки можно более или менее спрятать данные за звездочками.

    Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
    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 GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    Private Type POINTAPI
    x As Long
    y As Long
    End Type
    Private Const EM_SETPASSWORDCHAR = &HCC

    Private Sub Form_Load()
    Timer1.Interval = 100
    End Sub

    Private Sub Timer1_Timer()
    Dim pi As POINTAPI
    GetCursorPos pi
    Dim wh As Long
    wh = WindowFromPoint(pi.x, pi.y)
    Me.Caption = "Текущий handle : " & wh
    SendMessage wh, EM_SETPASSWORDCHAR, 0, 0
    End Sub

    наверх


    Как спрятать данные за звездочками более безопаснее

    Если вы смотрели пример под номером 299 (вот здесь), то вы могли вытащить скрытые за звездочками данные. Но вот данный пример сможет более качественно скрыть информацию в текстовом поле.

    Предположим, вы хотите добавить в вашу программу доступ по паролю. У вас есть текстовое поле, в которов вы набираете пароль, скрывающийся за звездочками. Но существует много программ, которые с легкостью показывают текст, скрытый за звездочками. Небольшой совет:

    в разделе формы General Declarations объявите переменную, которая будет содержать код:

    Dim pswd As String

    в свойствах текстового поля установите в PasswordChar звёздочку "*". Теперь кликните по текстовому полю два раза и выберите событие Text1_KeyPress, впишите:

    Private Sub Text1_KeyPress(KeyAscii As Integer)
    pswd = pswd + Chr(KeyAscii)
    KeyAscii = Asc("*")
    End Sub

    Теперь нажатия будут отлавливаться, а передоваться будут текстовому полю только звёздочки! И программа-взломщик пароль уже не достанет!!!

    наверх


    Получение содержимого n-ой строки в Multiline TextBox

    Расположите на форме элемент CommandButton и элемент TextBox. Установите свойство Multiline элемента TextBox как True.

    Синтаксис вызова функции прост: GetLine(НазваниеОкна.hWnd, НомерСтроки). Данный пример (при нажатии на кнопку) покажет содержимое 2-й строки элемента TextBox.

    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal msg As Long, ByVal wp As Long, lp As Any) As Long
    Const EM_LINEINDEX = &HBB
    Const EM_LINELENGTH = &HC1
    Const EM_GETLINE = &HC4
    Public Function GetLine(hWnd As Long, Line As Long) As String
    Dim sBuf As String, nLen As Long, nIndex As Long
    nIndex = SendMessage(hWnd, EM_LINEINDEX, Line - 1, ByVal 0&)
    If nIndex < 0 Or Line <= 0 Then Exit Function
    nLen = SendMessage(hWnd, EM_LINELENGTH, nIndex, ByVal 0&)
    sBuf = Space(nLen + 1)
    Mid$(sBuf, 1, 1) = Chr$(nLen And &HFF)
    Mid$(sBuf, 2, 1) = Chr$(nLen \ 256)
    SendMessage hWnd, EM_GETLINE, Line - 1, ByVal sBuf
    GetLine = Left$(sBuf, nLen)
    End Function
    Private Sub Form_Load()
    Text1.Text = "1111111" & vbCrLf & "22222" & vbCrLf & "3333" & vbCrLf & "4444"
    End Sub

    Private Sub Command1_Click()
    MsgBox GetLine(Text1.hWnd, 2)
    End Sub

    наверх


    Скролинг текста

    Расположите на форме элемент CommandButton, элемент TextBox, элемент Timer.

    Dim strText As String
    Private Sub Command1_Click()
    strText = String(30, " ") + "Спасибо, что вы посетили сайт VBnet.RU. Надеюсь, вы нашли много полезного для себя."
    Timer1.Interval = 100
    Timer1.Enabled = True
    End Sub
    Private Sub Form_Load()
    Command1.Caption = "Начать скролинг"
    With Text1
    .Font = "Courier New Cyr"
    .FontSize = 12
    .Width = 3400
    End With
    End Sub
    Private Sub Timer1_Timer()
    strText = Mid(strText, 2) & Left(strText, 1)
    Text1 = strText
    End Sub

    наверх


    СКак сделать первую букву каждого слова заглавной

    Разместите на форме элемент TextBox. Запустите проект на выполнение и попробуйте набрать несколько слов в элементе TextBox.

    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 Text1_Change()
    Call ccProperCase(Text1)
    End Sub

    наверх


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

    BalloonMessage for MS Agent

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

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

    наверх


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

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

    Вопросы:


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

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

       Есть ли в VB какая-либо связь с ASSEMBLERом?


    Автор вопроса: Andrushin Sergey

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

       Существую ли функции отсчитывающие кол-во времени прошедшего с момента
    запуска проложения. Если да, то перечислите их.


    Автор вопроса: Michael Fezulaev

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

       Есть у меня проблема не как не могу решить её.
    Есть textbox когда я его закриваю с помащи свойства Locked от изменений то не получается можно его изменить с помащи меню которое выходит нажав на правую кнопку мышки и мне надо это убрать.


    Автор вопроса: Саша

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

       Как узнать какой документ стоит в печати, сколько их. Какие данные вообще можно от них узнать. Можно ли узнать время выхода их на печать ?


    Автор вопроса: Саша

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

       Как узнать данные из BIOS (дата) под XP ?


    Автор вопроса: Александр

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

       Возможно ли одновременно работать с MDB базой и DAO и ADO, почему-то начали пропадать записи. База используется в основном на корректировку. Записей порядка 27000, но объем не большой 3-5 Мб. Для вывода статистики используется ДатаРепорт подключенный вручную. Доступ к базе 2 пользователя, блокировка оптимистичная. Может какие идеи есть помогите пож.


    Автор вопроса: Алеша

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

       Кто-нибудь знает как загрузить и сохранить файл в ListView если ListView 3 столбика.Тагже вставить рисунки.


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

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

       У меня следующая проблема: пишу...

    Private Sub Form_Load()
         Dim objWord As Word.Application
         Dim objDoc As Word.Document
         
         Set objWord = New Word.Application
         Set objDoc = Word.Documents.Add
         
         objWord.Visible = True
         objDoc.Activate
        
    End Sub

    ...вояникает Run-time error '429'
    ActiveX component can't create object

    (на компе установлен VB 6.0 (SP5), Word 2000), а попробовал в VB 5-всё работает, так в чём проблема?


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

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

       У меня такой вопрос: Как вызвать меню файла (т.е. как в проводнике, когда щелкаешь по нему правой кнопкой) в собственной программе.


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

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

       есть куча картинок (pic001.bmp, pic002.bmp... и т.д.). Необходимо
    собрать их в avi. Спрашивается: КАК??? или ссылочку дайте.


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

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

       Как сделать просмотр папки в ListView? (Например, как в Windows Commander) Причем значки должны соответствовать файлам. А также должна быть сортировка.
    Если есть у кого-нибудь исходники и кому не в лом мыльте на leonxl@vpcit.ru


    Автор вопроса: Michael Fezulaev

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

       Создал базу даных в access XP и есть там поле с раширение Ole Object для фоток пытался вставить в picturebox или ole кричит не может свезать обьект с базай данных.
    Пользуесь с обьектом Adodc.
    Не подскажете что можно сделать




    Ответы:


    Вопрос:

       Можно ли запустить мою программу после того как польяователь нажал на кнопку Выключения компьютера или его переяагруяки черея меню Пуск?
    Примечание: желательно, чтобы код(коды) были под Win98/Me и(или) WinXP.

    Ответ:

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

    Тебе надо занести в реестр в секцию одноразового автозапуска (HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce) свою прогу, точнее сказать путь к ней. А когда происходит Form_QueryUnload, т.е. нормальное состояние выхода из проги, удалять из секции одноразового запуска.


    Вопрос:

       1.Мне необходимо получить список всех зарегестрированных на машине серверов, а потом прочитать список их System DSN для каждого сервера. Как это можно сделать?
    2. Для того чтобы исключить программу из диспетчера задач по Ctrl-Alt-Del я использую функцию RegisterServiceProcess. Под 95 виндами все работает шикарно, но на Windows 2000 Server (SP2), на ней прога ругается и говорит, что ссылку на данную функцию в kernel32 она не находит. В чем может быть дело? Если кто сталкивался с такой байдой буду признателен за совет.

    Ответ:

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

    2. B W2000 нет RegisterServiceProcess.
    Нужно делать перехват вызовов NtQuerySystemInformation ...


    Вопрос:

       Помогите решить задачу по получению данных с удаленных веб-сайтов.
    На сколько я понял стандартное решение это Microsoft Internet Controls (SHDOCVW.DLL), открываем Explorer: Set IE = New InternetExplorer... это все понятно, а как получить данные от Explorer открытого не программой или от нескольких открытых страниц, есть ли функция возвращающая количество IE и переключения между ними или подскажите другие методы.

    Ответ:

    Автор ответа: Владимир Кирко

    На
    http://www.relib.com/sourcescode.asp?id=179&NoBox=True
    лежал в своё время такой пример (сейчас его найти не могу, но текст остался, и даже кое-как работает, так что разобраться можно.

      http://www.relib.com/articles/article.asp?id=73 - близкая, по теме, статья).
    'Прочитать веб-страницу из запущенного Internet Explorer
    'Пример показывает как с помощью COM и коллекции ShellWindows
    'определить есть ли запущенные окна Internet Explorer и получить
    'содержимое просматриваемых веб-страниц.
    'References: Microsoft Internet Controls (SHDOCVW.DLL),
    'Microsoft HTML Object Library (MSHTML.TBL)
    'Author: Tim v. Schauroth
    Dim SWs As New SHDocVw.ShellWindows
    Dim IE As SHDocVw.InternetExplorer

    'Главная процедура
    Public Sub ReadHTML()
      'Dim Doc
      'Цикл по всем окнам IE
      For Each IE In SWs
       Set Doc = IE.document
       If TypeOf Doc Is HTMLDocument Then
        sTitle = Doc.Title
        Set IEBody = Doc.body
        Set IETextRange = IEBody.createTextRange()
        HTMLCode = IETextRange.htmlText ' Текст веб-страницы
       End If
      Next
    End Sub

    Private Sub Command1_Click()
      Dim Doc
      'Цикл по всем окнам IE
      For Each IE In SWs
       Set Doc = IE.document
       If TypeOf Doc Is HTMLDocument Then
        sTitle = Doc.Title
        Set IEBody = Doc.body
        Set IETextRange = IEBody.createTextRange()
        HTMLCode = IETextRange.htmlText ' Текст веб-страницы
       Text1.Text = HTMLCode
       End If
      Next

    End Sub


    Вопрос:

       Суть в следующем. Я с помощью апи SetParent делаю контрол дочерним окном рабочего стола. После этого мой контрол, естественно, повисает на экране отдельно от моей формы, чего я, в общем-то, и добиваюсь. Но при этом он отмечается собственной кнопкой на Taskbar-e. Как этого избежать? Ведь у контрола просто нет свойства ShowInTaskbar.

    Если сформулировать по-другому: как добиться, чтобы окно не отображалось на Taskbar, если нет возможности изменить свойство ShowInTaskbar?

    Ответ:

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

    А какие этико-моральные соображения мешают тебе положить этот контрол на форму без полей и заголовка, и обгрызьть ей края по размеру контрола ( и естественно поставить ShowInTaskbar в false ) ???


    Вопрос:

       На форме имеется Frame с controls(text boxes, buttons и labels).
    Как сделать так, что бы на Form_Resize не только растягивался фрэйм, но и контролы все изменяли свое местоположение в нем, и не меняли свой размер и порядок, а только расстояние между друг другом ?

    Ответ:

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

    Я не знаю, есть ли способ попорще, но ведь у тебя есть евент FORM_RESIZE ну так и изменяй там, как захочешь. Только давай не абсолютные значения, а относительные размера формы, т.е. в процентах от её размера.


    Вопрос:

       Не подскажите где можно найти описание всех свойств и методов контрола MediaPlayer

    Ответ:

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

    Да в MSDN есть!
    Grafics and multimedia servisies->Windows Media->Windows media player 7 - это главная страница медиа плеера. Дальше иди по ссылкам туда, куда надо.


    Вопрос:

       Я хочу создать в реестре значение типа DWORD равное = 1, а оно мне создаёт 31(в шестнадцатеричной) и 49 (в десятичной). Привожу код. Подскажите пожайлуста где ошибка?

    Private Sub PiZdA_Click()
    Dim hREn As Long, IDenT As Long, znak As String
    hREn = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\", 0, KEY_ALL_ACCESS, IDenT)
    znak = 1
    Print znak
    Call RegSetValueEx(IDenT, "NoDesktop", 0, REG_DWORD, ByVal znak, 4)
    End Sub

    Ответ:

    Автор ответа: Владимир Кирко

    У Вас переменная znak описана как String. Вот Вам её так и записывают как просили.



    Ответ:

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

    Кажется, именно тебе недавно отвечал на этот вопрос.
    Либо объяви znak as long
    либо напиши znak=chr(1) (именно этот вариант у меня заработал)



    Ответ:

    Автор ответа: Mind Engine

    Народ, вы чего в API то лезете за реестром? На любой тачке установлена виндявая скриптоза и она имеет классные пункции по работе с реестрозой! И никаких лишних движений нэ надо делать для юзанья этого рулеза (по крайней мере по сравнении с API)!

    Берет правда тока вот такие типы, зато могет по всем разделам шариться!

    REG_SZ
    REG_EXPAND_SZ
    REG_BINARY
    REG_DWORD

    Ну сами лукайте!

    ------

    Dim ws, pathos, valos
    Set ws = CreateObject("WScript.Shell")

    pathos = "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System\"

    valos = 1

    'Писалка и просто пишет и создает, если ключа не было!
    ws.RegWrite pathos & "DisableLockWorkstation", valos, "REG_DWORD"
    'Читалка
    ws.RegRead(pathos & "DisableLockWorkstation")
    'Удалялка
    ws.RegDelete pathos & "DisableLockWorkstation"

    ------

    Удивительное рядом! :о)


    Вопрос:

       Как с помощью Sock пердать с одного компьютера что-нибуть на другой ? Т.е. мне мужно что-бы один Sock отсылал данные другой принимал. Связь локальная

    Ответ:

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

    Ну тут два пути. Смотря по какому протаколу они у тебя будут работаь. Если по TCP/IP тогда вот код:

    Клиент

    Private Sub Form_Load()
         tcpClient.RemotePort = 100
    End Sub
    Private Sub tcpClient_DataArrival(ByVal bytesTotal As Long)
         Dim strData As String
         tcpClient.GetData strData
         txtReceive.Text = strData
    End Sub
    Private Sub cmdSend_Click()
         tcpClient.SendData txtSend.Text
    End Sub
    Private Sub cmdConnect_Click()
         tcpClient.RemoteHost = txtPCName.Text
         tcpClient.Connect
    End Sub

    Сервер

    Private Sub Form_Load()
         tcpServer.LocalPort = 100
         tcpServer.Listen
    End Sub

    Private Sub tcpServer_DataArrival(ByVal bytesTotal As Long)
         Dim strData As String
         tcpServer.GetData strData
         txtReceive.Text = strData
    End Sub
    Private Sub cmdSend_Click()
         tcpServer.SendData txtSend.Text
    End Sub

    Private Sub tcpServer_ConnectionRequest(ByVal requestID As Long)
         If tcpServer.State <> sckClosed Then tcpServer.Close
         tcpServer.Accept requestID
    End Sub

    А вот с протаколом UDP все обстаит гараздо лучше:

    Клиент

    Private Sub Form_Load()
         sckClient.RemotePort = 100
         sckClient.connect
    End Sub
    Private Sub tcpServer_DataArrival(ByVal bytesTotal As Long)
    'Эта процедура обеспецевает прием данных. ВО
         Dim strData As String
         sckClient.GetData strData
         txtReceive.Text = strData
    End Sub

    сервер

    Private Sub Form_Load()
         sckserver.localPort = 100
         sckserver.bind
    End Sub
    Private Sub tcpServer_DataArrival(ByVal bytesTotal As Long)
    'Эта процедура обеспецевает прием данных. ВО
         Dim strData As String
         sckserver.GetData strData
         txtReceive.Text = strData
    End Sub


    Вопрос:

       Привет всем! Пока могу с вами говорить. Пришло мне по почте письмо 15 января, наверное с вирусом. Может я и не единственный.
    Писмо имеет "Тему: Fw: Redirection error notification"; "От: Vvi@izhstal.ru.COPYMAIL" и вложение с названием SiamoDiTe.exe
    Если письмо открыть блокнотом то между тегами есть скрипт

    iframe id="Sample" style="display:none"

    и

    setTimeout('f2();',5000);
       function f2()
       {
        Sample.document.write('');
       }

    Если кто знает, что это за функции и что это за вирус напишите.

    Ответ:

    Автор ответа: Владимир Кирко

    Это, если он вирус, то вирус безобидный.

    iframe id="Sample" style="display:none"

    Sample - это просто имя фрейма (назвали его так).

    setTimeout('f2();',5000); - установка задержки по времени в 5 сек., т.е. через 5 сек. будет запущена на исполнение функция f2. Причём один раз.

        function f2()
        {
         Sample.document.write(''); - запись во фрейм пустой сроки.
        }

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



    Ответ:

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

    Вообще честные люди не очень любят разбрасываться хорошими программами. Попробуй проверить аттач антивирусом. Если ты никого не просил, чтоб тебе эту программку прислали, удаляй этот сообщение с файлом подальше!!!
    Я один раз открыл прикрепленную программку - в компе завелся вирус. На экране крутится спираль, ниче с ней не сделаешь. Пришлось сносить систему.




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

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

    наверх


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

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