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


VB Студия VB Line
Голосование:

Ваш голос отсылается по E-mail владельцу сайта, после чего голоса анализируются и на отдельной странице выводятся результаты.

Subscribe.Ru увеличило максимальный размер рассылки до 100 кб. В связи с этим вопрос:
Какого размера Вы хотели бы получать рассылку?

Менее 20 кб
От 20 до 40 кб
От 40 до 60 кб
От 60 до 80 кб
Выше 80 кб


В какой день (дни) недели Вы хотели бы получать рассылку "Visual Basic: новости сайтов, советы, примеры кодов."?
Понедельник
Вторник
Среда
Четверг
Пятница
Суббота
Воскресение


С какой периодичностью Вы хотели бы получать рассылку "Visual Basic: новости сайтов, советы, примеры кодов."?
Каждый день
2 раза в неделю
Раз в неделю
Раз в две недели
Раз в месяц
Реже


Результаты голосования
Рассылки Subscribe.Ru
Новости сайта VBline и советы программистам
Мир программирования на Visual BASIC 5.0 и HTML.

Доска почёта:

Sergey Y. Tkachev
Кононенко Роман
Sergey Sapozhnikov
Sobic

Ссылки:

  • Улицы VB
  • Использование VB
  • VB Line
  • Азбука VB
  • VB на русском
  • Улицы VB
  • VB - шаг за шагом
  • Кирпичики VB
  • CообЧа VB
  • VB - мания
  • VB по русски
  • Snoozex Design
  • Несколько слов от автора:

       Немного увеличил размер рассылки.
    Читайте!


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




    Новости сайта VB Студия

    • 7 ноября 2001 года - Добавлен контрол, изображающий координатную сетку.
    • 6 ноября 2001 года - Создан ФОРУМ!!! Обязательно туда зайлите.
    • 5 ноября 2001 года - Небольшое обновление в FAQ.
      В раздел Библиотека кодов добавлен один код.
    • 4 ноября 2001 года - Добавлено 2 примера. Первый - пример кодирования текста, а второй пример вычисляет математическое выражение, находящееся в переменной типа String.
    • 3 ноября 2001 года - Контролы для распаковки и упаковки файлов zip появились в разделе Контролы
      Появилась моя первая статья "Работа с базами данных с помощью DAO". В ней описываются основные принципы работы с базами данных с помощью библиотеки DAO (Data Access Objects).
    • 2 ноября 2001 года - Обновление очень маленькое. У меня совсем нет времени. В разделе Примеры добавлен уникальный пример программы, удаляющей саму себя!


    наверх


    Новости сайта VB Line

       05 ноября 2001 г. Во-первых, я получил сертификат "Visual Basic Programmer" уровня Master от eCertification.com. Поздравления принимаются по прежнему адресу shatrykin@mail.ru.Во-вторых, на сайте есть одна "обновка". Stas(Sheff) Vorobiov прислал интересный пример игры с использованием DirectX.
       28 октября 2001 г. Представляю очень интересную статью: Динамическое создание ДТС-пакетов с помощью VB. Автор работы Андрей Чувахин. В статье показывается программное решение конкретной задачи по копированию данных из таблицы формата ДБФ в базу данных MS SQL Server.
       27 октября 2001 г. Сегодня совсем мало обновлений, очень занят. Представляю пример в разделе Примеры как отправить письмо по электронной почте с помощью WinSock. Пример очень интересный, так как позволяет работать с почтой без использования программ посредников.
       21 октября 2001 г. Новый сайт про ЭТО Технологии Программирования - Visual Basic, обязательно загляните. Для новичков в разделе Примеры как сделать калькулятор. В Советах можно узнать как открывается CD-ROM. В ActiveX очень хороший контрол для работы с анимационными GIF.

    наверх


    Модернизация контролов с помощью WithEvents

    Думаю временами всем нам не хватает в контролах какой -либо мелочи. К примеру какие -то действия при использовании текстбокса. Решение есть - можно написать процедуру и вызывать е как эвент для контролов. Собственно именно для этого и существует команда "WihEvents"

    К примеру хочется ограничить ввод в текстбокс только символов в верхнем регистре. Буквы в нижнем регистре должны быть автоматически преобразованы в верхний. Ну и еще при проходе мышки над текстбоксом - путь показывает координаты мышы в тултипсе

    Создаем стандартный EXE project, добавляем 4 текстбокса , добавляем class module. В Form1 добавляем код

    'General Declarations
    Private clsTextBox1 As Class1
    Private clsTextBox2 As Class1
    Private clsTextBox3 As Class1
    Private clsTextBox4 As Class1

    Private Sub Form_Load()
    Set clsTextBox1 = New Class1
    Set clsTextBox1.TextBoxCtl = Text1
    Set clsTextBox2 = New Class1
    Set clsTextBox2.TextBoxCtl = Text2
    Set clsTextBox3 = New Class1
    Set clsTextBox3.TextBoxCtl = Text3
    Set clsTextBox4 = New Class1
    Set clsTextBox4.TextBoxCtl = Text4
    End Sub


    В Class1, добавим следующий код .

    Private WithEvents txt As TextBox

    Public Property Set TextBoxCtl(OutsideTextBox As TextBox)
    Set txt = OutsideTextBox
    End Property

    Private Sub txt_KeyPress(KeyAscii As Integer)
    '-- Преобразуем в верхний регистр
    KeyAscii = Asc(UCase$(Chr$(KeyAscii)))
    End Sub

    Private Sub txt_MouseMove(Button As Integer, Shift As Integer, X As
    Single, Y As Single)
    txt.ToolTipText = "X:" & X & " Y:" & Y
    End Sub


    Чтобы добавить что то еще - просто добавьте код в класс. Единственно что - эвент в классе случается после эвента в контроле.

    наверх


    Как оссоциировать тип файла со своей программой

    Функция, изменяющая настройки типа файлов в Windows: приложение запуска, иконку и т.д...
    Здесь показан пример изменения названия, иконки и приложения для файлов .TXT
    Подговте проект с формой.
    На форму поместите:
    - Кнопку с именем Command1

    Добавте в форму:

    Private Declare Function RegCreateKey Lib "advapi32.dll" _
    Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey _
    As String, phkResult As Long) As Long
    Private Declare Function RegSetValueEx Lib "advapi32.dll" _
    Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, _
    ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, _
    ByVal cbData As Long) As Long
    Private Declare Function RegCloseKey Lib "advapi32.dll" _
    (ByVal hKey As Long) As Long
    Private Const HKEY_CLASSES_ROOT = &H80000000

    Private Sub AssociateMyApp(ByVal sAppName As String, _
    ByVal sEXE As String, ByVal sExt As String, Optional ByVal sIcon As String)
    Dim lRegKey As Long
    Call RegCreateKey(HKEY_CLASSES_ROOT, sExt, lRegKey)
    Call RegSetValueEx(lRegKey, "", 0&, 1, ByVal sAppName, Len(sAppName))
    Call RegCloseKey(lRegKey)
    Call RegCreateKey(HKEY_CLASSES_ROOT, sAppName & "\Shell\Open\Command", lRegKey)
    Call RegSetValueEx(lRegKey, "", 0&, 1, ByVal sEXE, Len(sEXE))
    Call RegCloseKey(lRegKey)
    If Len(sIcon) Then
    Call RegCreateKey(HKEY_CLASSES_ROOT, sAppName & "\DefaultIcon", lRegKey)
    Call RegSetValueEx(lRegKey, "", 0&, 1, ByVal sIcon, Len(sIcon))
    Call RegCloseKey(lRegKey)
    End If
    End Sub

    Private Sub Command1_Click()
    AssociateMyApp "My New File App", "C:\File.exe %1", ".txt", "C:\File.exe,-1"
    End Sub

    наверх


    Подгоняет высоту выпадающего окна ComboBox'а к высоте имеющихся строк

    Private Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long

    Public Sub ResizeCbo(cbo As ComboBox)
    Counter = cbo.ListCount
    cboLeft = cbo.Left / Screen.TwipsPerPixelX
    cboTop = cbo.Top / Screen.TwipsPerPixelY
    cboWidth = cbo.Width / Screen.TwipsPerPixelX
    cboHeight = cbo.Height / Screen.TwipsPerPixelX * Counter
    MoveWindow cbo.hwnd, cboLeft, cboTop, cboWidth, cboHeight, 1
    End Sub

    наверх


    Определяет, соответствует ли имя файла маске

    Private Function IsMask(ByVal FileName As String, ByVal Mask As String) As Boolean
    'объявляем переменные
    Dim i As Integer
    Dim pos As Integer
    Dim posit As Integer
    Dim curs As String
    Dim tmp As Integer
    Dim temp As String
    Dim j As Integer
    'Заменяем идущие подряд несколько звёздочек на одну
    pos = 1
    posit = InStr(pos, Mask, "**")
    Do While posit <> 0
    temp = Left$(Mask, posit - 1)
    temp = temp & Mid$(Mask, posit, 1)
    temp = temp & Right$(Mask, Len(Mask) - (posit + 1))
    Mask = temp
    posit = InStr(pos, Mask, "**")
    Loop
    'Заменяем *? на *
    pos = 1
    posit = InStr(pos, Mask, "*?")
    Do While posit <> 0
    temp = Left$(Mask, posit - 1)
    temp = temp & Mid$(Mask, posit, 1)
    temp = temp & Right$(Mask, Len(Mask) - (posit + 1))
    Mask = temp
    posit = InStr(pos, Mask, "*?")
    Loop
    'Перебираем все символы в Mask
    For pos = 1 To Len(Mask)
    curs = Mid$(Mask, pos, 1)
    Select Case curs
    'если символ "?", то это любой знак
    Case "?"
    j = j + 1
    i = i + 1
    'если символ "*", то
    Case "*"
    If pos = Len(Mask) Then
    'Если это последний символ, отпускаем с богом
    i = i + (Len(FileName) - j)
    'А если нет, то ищем символв FileName,
    'стоящий в Mask за звездой
    Else
    tmp = InStr(pos, FileName, Mid$(Mask, pos + 1, 1))
    'Если символ не найден, то
    If tmp = 0 Then
    'Значение функции = False
    IsMask = False
    'Выходим из функции
    Exit Function
    End If
    'i = i + кол-во непроверенных символов
    i = i + (tmp - (j + 1))
    'то же самое с j
    j = j + (tmp - (j + 1))
    End If
    'если символ не "*" и не "?", то
    Case Else
    j = j + 1
    'если символ в FileName совпадает с символом
    'в Mask, то
    If Mid$(FileName, j, 1) = Mid$(Mask, pos, 1) Then
    'Увеличиваем счётчик попаданий
    i = i + 1
    End If
    End Select
    'завершаем цикл
    Next
    'Если i соответствует длине FileName, то
    'значение функции True, иначе False
    If i = Len(FileName) Then IsMask = True Else IsMask = False
    End Function

    наверх


    Книги

    Visual Basic 6.0 ( Руководство для программистов )

    Фотография книги Язык программирования Visual Basic - мощный инструмент разработки приложений для 32-разрядных систем Windows 95 и Windows NT.
    В книге рассматриваются как фундаментальные понятия и темы, так и сложные вопросы, адресованные профессиональным программистам.

    Нет данных по автору(ам), «БХВ - Санкт-Петербург» — 2000, 959 стр.
    248,19 руб. - 5% = 235.6 руб.

    SQL (Полное руководство)

    Фотография книги Второе издание существенно расширенное и обновленное описание языка SQL, являющегося основным инструментом работы с реляционными базами данных.

    Д. Р. Грофф, «СПАРРК, Издательская группа BHV» — 2001, 816 стр.
    343,08 руб. - 5% = 325.85 руб.


    наверх


    Анонсы эхо-конференций СообЧа

    Программирование на Delphi и Turbo Pascal

       
    Конференция по программированию на Delphi и Turbo Pascal, а также Win Api, решение вопросов возникающих при программировании на этих языках. Приглашаются все желающие от новичков до профессионалов!

    Подписаться

    Группа по вирусам

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

    Подписаться

    наверх


    Доска объявлений

       Ищу телеработу.

    • Переводы: английский, украинский, русский.
    • Cipper программист.
    • Assembler программист.
    • PIC разработчик
    • композитор
    • Прогрессивные стили
    • 3D анимация
    • GIF анимация
    Антон Лозовский.

       Объявляется конкурс на лучщий баннер для сайта VB Студия. Приз за лучший баннер - 5000 баннеров баннерообменной сети TLE. Вопросы и предложения по этому адресу


       Требуется человек, знающий HTML для работы с сайтом группы СооБчаVB. Вопросы и предложения по этому адресу

    наверх



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

    BalloonMessage for MS Agent

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

    Подробнее...


    наверх


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

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

    Вопросы:


    Автор вопроса:
    Николай Коваль

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

       Как получить IP адресса компьютеров которые находятса в одной лок. сети с даным?


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

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

       Скажите, пожалуйста, как узнать функции, содержащиеся в каком-либо DLL. Есть ли какие-нибудь декомпиляторы для DLL и где их можно достать?



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

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

       Пожалуйста, помогите! Как на VB узнать загрузку процессора желательно не через реестр.


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

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

       Когда-то давно (месяцев 8,5 назад) я вытаскивал с инета АктивИксу которая работала как таблица на форме, но при этом ей было совершенно наплевать к какому источнику данных она подстегнута. Работала и со стандартным Данные (VB6). Потом на корпоративном серваке была авария... Много чего погибло... В том числе и этот контрол (спасали-то документы, оракл, и прочую хрень)... Потом он был и вовсе забыт за ненадобностью. А неперь очень надо!!!

    Итак: .....АктивИксу которая работала как таблица на форме, но при этом ей было совершенно наплевать к какому источнику данных она подстегнута. Работала и со стандартным Данные (VB6).....



    Автор вопроса: Юрий

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

       Здравствуйте. У меня к вам следующий вопрос.В VB можно создавать базы данных DAT.Но по видимому, в них существует ограничения по длинне единичной записи, так как при вводе достаточно большого количества символов в единичную запись выдается ошибка 'Неверная длинна записи', а при малом количестве все OK.Скажите пожалуйста как расширить длинну единичной записи (чем больше тем лучше).



    Автор вопроса: Igor Malinovsky

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

       Кто знает,как открыть запороленный*.mdb через DAO?


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

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

       Подскажите пожалуйста, не видел ли кто библиотечки для работы с модемом и передачи файлов по модемной свяяи по протокалу типа Z-Modem.




    Ответы:


    Вопрос:

       Вопрос такой - как из программы сжать базу ACCESS - удалить физически все удаленные записи.

    Ответ:

    Автор ответа: Sergey Y. Tkachev

    Очень, ну просто очень просто.

    Dim OldName as String, NewName as String
    OldName = "СтараяБаза.mdb"
    NewName = "НоваяБаза.mdb"
    DBEngine.CompactDatabase (OldName, NewName)


    Вопрос:

       Как в VB организовать передачу данных по сети (например, по протоколу TCP/IP)?

    Ответ:

    Автор ответа: Sergey Y. Tkachev

    Воспользуйтесь Microsoft Winsock Control. Как это делать - описывать не буду, потому что информации об этом полно и в MSDN, и в сети. Просто приведу статью из MSDN

    To create a TCP server

    Create a new Standard EXE project.
    Change the name of the default form to frmServer.
    Change the caption of the form to "TCP Server."
    Draw a Winsock control on the form and change its name to tcpServer.
    Add two TextBox controls to the form. Name the first txtSendData, and the second txtOutput.

    Add the code below to the form.

    Private Sub Form_Load()
    ' Set the LocalPort property to an integer.
    ' Then invoke the Listen method.
    tcpServer.LocalPort = 1001
    tcpServer.Listen
    frmClient.Show ' Show the client form.
    End Sub

    Private Sub tcpServer_ConnectionRequest _
    (ByVal requestID As Long)
    ' Check if the control's State is closed. If not,
    ' close the connection before accepting the new
    ' connection.
    If tcpServer.State <> sckClosed Then _
    tcpServer.Close
    ' Accept the request with the requestID
    ' parameter.
    tcpServer.Accept requestID
    End Sub

    Private Sub txtSendData_Change()
    ' The TextBox control named txtSendData
    ' contains the data to be sent. Whenever the user
    ' types into the textbox, the string is sent
    ' using the SendData method.
    tcpServer.SendData txtSendData.Text
    End Sub

    Private Sub tcpServer_DataArrival _
    (ByVal bytesTotal As Long)
    ' Declare a variable for the incoming data.
    ' Invoke the GetData method and set the Text
    ' property of a TextBox named txtOutput to
    ' the data.
    Dim strData As String
    tcpServer.GetData strData
    txtOutput.Text = strData
    End Sub

    The procedures above create a simple server application. However, to complete the scenario, you must also create a client application.

    To create a TCP client

    Add a new form to the project, and name it frmClient.
    Change the caption of the form to TCP Client.
    Add a Winsock control to the form and name it tcpClient.
    Add two TextBox controls to frmClient. Name the first txtSend, and the second txtOutput.
    Draw a CommandButton control on the form and name it cmdConnect.
    Change the caption of the CommandButton control to Connect.

    Add the code below to the form.
    Important Be sure to change the value of the RemoteHost property to the friendly name of your computer.

    Private Sub Form_Load()
    ' The name of the Winsock control is tcpClient.
    ' Note: to specify a remote host, you can use
    ' either the IP address (ex: "121.111.1.1") or
    ' the computer's "friendly" name, as shown here.
    tcpClient.RemoteHost = "RemoteComputerName"
    tcpClient.RemotePort = 1001
    End Sub

    Private Sub cmdConnect_Click()
    ' Invoke the Connect method to initiate a
    ' connection.
    tcpClient.Connect
    End Sub

    Private Sub txtSendData_Change()
    tcpClient.SendData txtSend.Text
    End Sub

    Private Sub tcpClient_DataArrival _
    (ByVal bytesTotal As Long)
    Dim strData As String
    tcpClient.GetData strData
    txtOutput.Text = strData
    End Sub

    The code above creates a simple client-server application. To try the two together, run the project, and click Connect. Then type text into the txtSendData TextBox on either form, and the same text will appear in the txtOutput TextBox on the other form.



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

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

    наверх


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

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