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


VB Студия VB Line
Статистика:

На рассылку подписаны 3 человека.


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

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

Какой версией Visual Basic Вы пользуетесь?
VB 3
VB 4
VB 5
VB 6

Установлен ли у Вас Service Pack? Если да, то какой?
Нет
SP1
SP2
SP3
SP4
SP5

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




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

  • 3 августа 2001 года - Хорошая новость!!! Открылась рассылка с новостями двух VB-сайтов - конечно же нашего и VBLine. Также в каждом номере рассылки Вы сможете найти несколько хитростей, кусков кода, примеров.
    Здесь форма подписки, поиска по архиву, кнопка-счётчик подписчиков
    Старые новости ушли в Архив
  • 31 июля 2001 года - Обновлён FAQ.
    Добавилась рубрика Вопрос/Ответ. Там Вы можете задать вопрос или ответить на уже имеющиеся вопросы.
    Добавилась рубрика Хитрости. Там собраны всевозможные хитрости и трюки.

    наверх


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

        06 августа 2001 г. Что-то я слишком часто стал сайт обновлять! Кстати, а Вы знаете, что недавно вышел юбилейный 5-ый выпуск моей рассылки? Вы ещё не подписались? Спешите. Форма для подписки внизу страницы, а можно прямо здесь. Вразделе Статьи небольшое обновление - новые работы Михаила Эскина. В раздел Советы добавил ещё несколько советов. Кроме того я не обошел стороной разделы ActiveX и Примеры. И ещё, хочу принести публичные извинения Дмитрию Авакову, за то, что присланный им новый контрол "валялся" у меня с мая, а я его не опубликовал. Ну "зашился" я. Sorry. Он размещен в ActiveX, контрол посвящен прозрачным кнопкам.

    наверх


    Шифровка/расшифровка текста с использованием пароля

    Option Explicit

    Public Function Encrypt(ByVal Source As String, ByVal Password As String) As String 'шифрование данных
    Dim a As String
    Dim b As String
    Dim c As String
    Dim d As String
    Dim lentext As Long
    Dim lenpass As Long
    Dim cn As Long
    'ввод исходных данных
    'исходный текст для шифрования - запрашивается от пользователя, к примеру -
    a = Source
    'пароль: может запрашиваться от пользователя
    b = Password
    'итог шифрования
    c = ""
    'узнаем длины каждой из строк
    lentext = Len(a)
    lenpass = Len(b)
    'собственно шифрование
    For cn = 1 To lentext
    'в этой строке разберитесь сами, здесь попросту выполняется функция Xor с каждым символом исходной строки и соответствующим символом пароля, как бы "повторенным" на всю длину исходного текста. Mid берет из середины строки символ, Asc - превращает его в ASCII-код, Str - превращает число в строку, Trim - удаляет пробелы
    d = Trim(Str(Asc(Mid(a, cn, 1)) Xor Asc(Mid(b, ((cn - 1) Mod lenpass) + 1, 1))))
    'а теперь сделаем так, чтобы каждый символ занимал ровно три позиции, вне зависимости от величины его ASCII-кода. А иначе как вы будете потом при расшифровке разбивать строку на символы?
    Select Case Val(d)
    Case 0 To 9
    d = "00" + d
    Case 10 To 99
    d = "0" + d
    End Select
    c = c + d
    'ну вот и все, и так - с каждым символом из исходной строки
    Next cn
    'в итоге в переменной с - зашифрованная строка, каждой исходной букве соответствует 3 символа, ее можно записать в любое место - в документ, к примеру:
    Encrypt = c
    End Function

    Public Function Decrypt(ByVal Code As String, ByVal Password As String) As String 'расшифровывание данных
    Dim a As String
    Dim b As String
    Dim c As String
    Dim d As String
    Dim lentext As Long
    Dim lenpass As Long
    Dim cn As Long
    'строка для расшифровки
    c = Code
    'пароль
    b = Password
    'итог расшифровывания
    a = ""
    'узнаем длины каждой из строк
    lentext = Len(c)
    lenpass = Len(b)
    'собственно расшифровывание
    For cn = 1 To lentext Step 3
    a = a + Chr(Val(Mid(c, cn, 3)) Xor Asc(Mid(b, (Int(cn / 3) Mod lenpass) + 1, 1)))
    Next cn
    'в итоге в переменной a - расшифрованная строка, ее можно записать в любое место - в документ, к примеру:
    Decrypt = a
    End Function

    наверх


    Разбивание строки на составляющие по разделителям

    Если Вам потребуется самому распечатать строку текста в несколько строк, то ее, наверняка, нужно "отформатировать", т.е. разбить на строки. Приведенная ниже процедура делит строку на составляющие (по символам vbCrLf) и записывает их в массив.

    'Процедура делит входящую строку на строки по разделителям
    'возврата каретки и записывает из в массив
    Public Sub FormatLine(sLine As String, ArrayLine() As String)
    Dim iX As Integer
    Dim iS As Integer
    Dim iSOld As Integer
    Dim lLenth As Integer

    'инициализация переменных
        iSOld = 1
        Do
            iS = InStr(iSOld, sLine, Chr(13))
            X = X + 1
            ReDim Preserve ArrayLine(X)
            If iS = 0 Then
                lLenth = Len(sLine)
            Else
                lLenth = iS - iSOld
            End If
            ArrayLine(X) = Mid(sLine, iSOld, lLenth)
            iSOld = iS + 2
        Loop While iS <> 0
    End Sub

          Обратите внимание на то, что для поиска разделителя здесь нужно использовать функцию InStr, а не перебирать все символы строки по порядку Mid$. Это связано с тем, что функция InStr работает быстрее раз в 5-6.


    наверх


    Формирование из числа его "строкового" представления

    Многим из Вас приходилось формировать из числа, содержащего количество секунд строку, показывающую количество часов, минут и секунд. Для этого можно воспользоваться готовым примером.

    'Формирует строку с указанием количества минут(часов, секунд)
    Public Function FormatTime(lTime As Long) As String
    Dim lSec As Long
    Dim lMin As Long
    Dim lHour As Long
    Dim lTemp As Long
    Dim i As Long

        If lTime < 60 Then
            FormatTime = lTime & " сек"
        ElseIf lTime / 60 < 60 Then
            lTemp = lTime
            Do While lTemp > 60
                i = i + 1
                lTemp = lTemp - 60
            Loop
            lMin = i
            lSec = lTime - (lMin * 60)
            FormatTime = lMin & " мин " & lSec & " сек"
        Else
            lTemp = lTime
            Do While lTemp > 60 * 60
                i = i + 1
                lTemp = lTemp - 60 * 60
            Loop
            lHour = i
            i = 0
            lTemp = lTime - (lHour * 60 * 60)
            Do While lTemp > 60
                i = i + 1
                lTemp = lTemp - 60
            Loop
            lMin = i
            lSec = lTime - (lHour * 60 * 60) - (lMin * 60)
            FormatTime = lHour & " час " & lMin & " мин " & lSec & " сек"
    End If
    End Function

        Код, конечно, немного запутан, но вполне работоспособен. Если процедуре передать число 126, то она возвратит "2 мин 6 сек".


    наверх

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

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



    Вопросы:

    Пока вопросов нет.



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

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


    наверх


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

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