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


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

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

Каким браузером Вы пользуетесь?
IE 4.x
IE 5
IE 5.5
IE 6
Netscape 4.x
Netscape 6
Opera
Другой


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

   Наверстал новый выпуск. Он как всегда вовремя. Сегодня в разделе Вопрос/Ответ очень много вопросов. Обязательно загляните туда. Может быть Вы кому-нибудь поможете.

   Присылайте информацию и читайте рассылку!


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




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

  • 4 сентября 2001 года - Добавил следующие стаьи:
    Сабклассинг
    Автор Алексей Вишневский
    Оптимизация кода в Visual Basic
    Автор Шатрыкин Иван
    Опыт создания массива пользовательского типа в ActiveX Control'е
    Автор М. Эскин
    Создание подсказки для меню в Visual Basic
    Автор Deborah L. Cooper
    Добавил ответы на несколько вопросов в FAQ

    наверх


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

       02 сентября 2001 г. Сегодня небольшое обновление сайта. В разделе ActiveX несколько новых контролов: для модификации стандартного MsgBox, для работы с системным треем и контрол TipOfDay для вывода "советов дня". В .Статьи добавлена моя новая работа "Оптимизация кода в Visual Basic", а в раздел Примеры добавлены три новые работы: как считать атрибуты безопасности файла в Windows NT, создание в меню списка последних загруженных файлов и как сменить курсор в текстовом окне. И ещё в разделе Shareware, наконец, доступна моя первая работа BalloonMessage for Microsoft Agent. OCX предназначен для организации диалога программы с пользователем с помощью Microsoft Agent.. Внимание! Сайт VBline ищет новый хостинг. Требования простые: ASP, Ms Access, не менее 30 Mb, пока желательна оплата баннерами. Свои предложения и, особенно, советы, на тему хостинга, присылайте мне.

    наверх


    PassHash функция (выдаёт число, соответствующее паролю).

    Option Explicit

    Public Function PassHash(Pass As String) As Long
    Dim I As Long
    Dim L As Long
    Dim S As Double
    Dim K As Double

    L = Len(Pass)
    For I = 1 To L
    K = 1 + 1 * (I / L)
    S = S + Asc(Mid$(Pass, I, 1)) * K
    Next I

    S = S / L
    PassHash = Int(S) * 1000000 + (S - Int(S)) * 1000000000
    End Function

    наверх


    Как узнать переменные окружения операционной системы

    Совет прислал
    Дёмин Антон [http://demin.narod.ru]. В Бэйсике есть одна ОЧЕНЬ полезная, но многими забытая функция Environ! Она возвращает имена и содержание всех переменных среды операционной системы!!! Так, например, чтобы получить директорию Windows, совсем не надо прибегать к API-функции GetWindowsDirectory!!!!!! А получить её можно так:

    ABC = Environ ("windir")

    И ВСЁ!

    Но и это ещё не всё! Также можно получить следующие перменные:

    ABC = Environ ("TMP") 'директория временных файлов TEMP

    ABC = Environ ("BLASTER") 'координаты звуковой карты

    ABC = Environ ("PATH") 'пути, объявленные в autoexec.bat

    НО И ЭТО ВСЁ ЕЩЁ НЕ ВСЁ!!!!

       Чтобы получить имя и значение переменной, в скобках вместо строки можно поставить номер переменной (или индекс?). Вставьте следующую процедуру в окно Code, запустите проект, кликните на форме увидите список всех переменных и их значений!

    Private Sub Form_Click()
       'берём переменную и присваиваем ей единицу
       m = 1
       'запускаем цикл, который увеличивает переменную m каждый
       'раз на единицу и подсовывает её функции Environ
       Do
          'присваиваем переменной EnvString возвращаемую переменную,
             'соответствующую номеру m 
             EnvString = Environ(m) 
             'печатаем перменную, соответсвующую номеру m 
             Print Environ(m) 
             'перменную m увеличиваем на один 
             m = m + 1 
             'если перменная EnvString всё ещё не пустая - крутим дальше... 
          Loop Until EnvString = "" 
    End Sub

       Вот такой совет! От себя добавлю, что если функция не может найти указанную переменную, то она возвращает пустую строку.



    наверх


    Как защитить свою программу от взлома "звёздочек" при вводе пароля

    Ещё один совет от
    Дёмина Антона [http://demin.narod.ru]. Он посвящен тем, кто хочет избежать лёгкого взлома текстового поля с паролем (он там отображается в виде звёздочек). Я думаю, что ни для кого не является секретом, как можно посмотреть пароль. Теперь, собственно, совет. Для начала в разделе формы General Declarations объявите переменную, которая будет содержать код:

    Dim pswd As String

    Затем в свойствах текстового поля установите в PasswordChar звёздочку "*".

    Теперь выберите событие Text1_KeyPress и впишите туда:

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


        Теперь нажатия будут отлавливаться, а передаваться будут текстовому полю только звёздочки! И программа-взломщик пароль уже не достанет!!! Если кто-то хочет сделать так, как в Linux'e, т.е. никаких звёздочек нет вообще, то строку KeyAscii = Asc("*") надо заменить на KeyAscii = 0 и всё! Да, кстати, теперь пароль хранится в переменной pswd!!!

        Вот так-то, господа программисты! А Вы думали, что на Visual Basic можно только менюшки писать? Нет, можно пароли ломать или защищаться от их взлома ;-).

    наверх


    Меняем даты создания, модификации и последнего доступа к файлам

    Совет (или пример) от
    Дёмина Антона [http://demin.narod.ru]. Он посвящен временам файлов. Итак, у Вас есть файл, как узнать время его создания? Смотрите ниже приведённый код.

    ' Открывает указанный файл в режиме двоичного доступа.
    ' Эта функция необходима нам для получения доступа к датам файла и изменения их.
    Declare Function lopen& Lib "kernel32" Alias "_lopen" (ByVal lpPathName As String, ByVal iReadWrite As Long)
    ' Закрывает указанный файл.
    Declare Function lclose& Lib "kernel32" Alias "_lclose" (ByVal hFile As Long)
    Public Const READAPI = 0
    Public Const WRITEAPI = 1
    Public Const READ_WRITE = 2
    ' Получает информацию из указанного файла о дате времени.
    ' Аргументы lpCreationTime, lpLastAcccessTime и lpLastWriteTime могут быть
    ' установлены в ноль (тогда передайте эти аргументы ByVal As Long), если
    ' вам они не нужны. Дата возвращается этой функцией в формате UTC.
    Declare Function GetFileTime& Lib "kernel32" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME)
    ' Устанавливает время создания, изменения и последнего доступа к файлу.
    Declare Function SetFileTime& Lib "kernel32" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME)
    ' 64-битное число, указывающее на прошедшее время
    ' с 1 января 1601 г. с единицей измерения 100 наносекунд.
    Type FILETIME ' 8 бит
        dwLowDateTime As Long
        dwHighDateTime As Long
    End Type
    ' Записывает аргумент со структурой FILETIME
    ' во второй аргумент со структурой SYSTEMTIME.
    Declare Function FileTimeToSystemTime& Lib "kernel32" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME)
    ' Записывает аргумент со структурой SYSTEMTIME
    ' во второй аргумент со структурой FILETIME.
    Declare Function SystemTimeToFileTime& Lib "kernel32" (lpSystemTime As SYSTEMTIME, lpFileTime As FILETIME)
    ' Эта структура содержит информацию о времени и дате.
    Type SYSTEMTIME ' 16 бит
        wYear As Integer
        wMonth As Integer
        wDayOfWeek As Integer
        wDay As Integer
        wHour As Integer
        wMinute As Integer
        wSecond As Integer
        wMilliseconds As Integer
    End Type

    А затем для работы всего этого нужно сделать следующие:

    Sub Main()
        Dim lFileHwnd As Long
        Dim lDummy As Long
        Dim ftModified As FILETIME
        Dim ftCreated As FILETIME
        Dim ftAccessed As FILETIME
        Dim stCreated As SYSTEMTIME
        ' Поменяйте C:\AUTOEXEC.BAT на любой другой файл
        lFileHwnd = lopen("C:\AUTOEXEC.BAT", READ_WRITE)
        GetFileTime lFileHwnd, ftCreated, ftAccessed, ftModified
        FileTimeToSystemTime ftCreated, stCreated
        With stCreated
            Debug.Print .wDay & "." & .wMonth & "." & .wYear & ", " & .wHour & ":" & .wMinute & ":" & .wSecond & ":" & .wMilliseconds
        End With
        ' Увеличивает год создания файла на 5
        stCreated.wYear = stCreated.wYear + 5
         SystemTimeToFileTime stCreated, ftCreated
        SetFileTime lFileHwnd, ftCreated, ftAccessed, ftModified
        ' Проверка
        GetFileTime lFileHwnd, ftCreated, ftAccessed, ftModified
         FileTimeToSystemTime ftCreated, stCreated
        With stCreated
            Debug.Print .wDay & "." & .wMonth & "." & .wYear
        End With
        lDummy = lclose(lFileHwnd)
    End Sub


    наверх


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

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

    Вопросы:


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

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

       Как прочитать в реестре, все параметры данного раздела, с помощью API ?


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

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

       Как можно записать значения серого цвета изображения 30x30 в виде текстового файла?


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

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

       Как соединиться с другим компом через winsock control?


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

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

       Создал OCX, в который входит ComboBox. Список ComboBox-а заполняется из текстового файла (кодировка ANSI). Компонент предназначен для работы в системе визуализации WinCC (вряд ли это что-то кому-то скажет, но чего в жизни не бывает...). Под NT всё работает корректно. Под Windows_98 при вместо кирилицы отображаются иероглифы (буквы латинского алфавита с надбуквенными символами). При работе с кодировкой OEM наблюдалась аналогичная картина. Вставлял компонент в Internet Explorer - всё нормально отЗаранее спасибо всем принявшим участе в решении проблемы.


    Автор вопроса: Сергей

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

       Как написать код преобразования числа в текст типа: 23 456,23 руб. преобразуется в "Двадцать три тысячи четыреста пятьдесят шесть рублей, 23 коп.


    Автор вопроса: Валерий

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

       Вопрос по VBA. Как вставить кодом (MS Access 2000) OLE-объект (f.e., jpg) в Recordset ?


    Автор вопроса: Тимур

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

       Возможно ли с Помощью VB соядать программу дозвона по ppp-протоколу? Хотелось видеть исходный код, если это возможно.


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

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

       Когда пользователь нажимает кнопку дверцы CD-ROM, нужно перехватить команду, выполнить заданные операции и только тогда открыть дверцу. Кто подскажет, как это сделать?


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

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

       Люди!!! Кто знает как сделать графическое сопровождение музыкального файла как в Win. Media Player.


    Автор вопроса: Oleg Lekuchev

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

       Я написал ActiveX DLL на VB 6 в одной из функций есть вызов внешнего exe файла (простая программа не выводит никаких формб просто принимает пути к 2 файлам и пишет на диск третий)
    Так вот, пока я работал в Debug моде все нормально, а в откомпилированном виде внешняя программа не отрабатывает, ошибок не появляется, программа запускается, но видимо что-то не находит.... я пользуюсь функцией Shell("путь_к_программе")
    Не могли бы вы пояснить в чем может быть проблема


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

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

       Есть необходимость ия клиента на VB соядать сообщение Outlook Express (важно!), яаполнив все атрибуты письма. Стандартная операция, бея проблем проходящая на Outlook'е, но выяывающая трудности с Express'ом (приложение есть, а объекта типа "сообщение" нет!).


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

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

       Нужно вывести картинку запиханную в массив pic(width,height) as byte на экран, используя палитру Pal(255,2). Причем с максимальной скоростью. Пробовал преобразовывать в RGB картинку и выводить с помощью SetDIBitsToDevice, но получается медленно. Преобразования тормозят вывод. Может кто поможет?


    Автор вопроса: Alex Tychinin

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

       Несколько раз спрашивал в ФИДО, но из ответов так и не понял, можно ли в форме VB сделать выделение меток перед полями ввода пунктирными линиями как в большинстве программ Windows (по клавише TAB). Можно ли это сделать в VB?


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

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

       Внедряю .xls в Access (использую OLE). Сразу открывается этот файл. Каким образом заставить минимизироваться приложение Excel и как мне закрыть файл .xls или Excel. Перепробовала все команды из help'а, но они игнорируются. Помогите!!!


    Автор вопроса: Артём

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

       Как сделать панель как в MS Office или вроде виндоусной панели задач(той что с ПУСКом), чтобы за неё не прятались значки с рабочего стола, а отодвигались(как если переместить панель задач к другому краю).


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

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

       Можно ли создать программу в VB такого рода: переводчик промт переводит word(овский) файл с русского на французский например,и копирует его обратно в word.


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

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

       Хочу ия VB связываться с ORACLE. Говорят существует библиотека. Ни у кого нет? Очень нужно! ПЛЗ!




    Ответы:


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

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


    наверх


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

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