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


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
  • Несколько слов от автора:

       Увеличен размер рассылки. Отныне будет публиковаться 5 хитростей.
    Читайте!


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




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

    • 16 ноября 2001 года - Добавил много разных примеров.
    • 13 ноября 2001 года - Добавил 4 примера. Один шифрует и соединяет в один файл несколько файлов. Второй переводит числа в разные системы счисления. Третий создаёт SaveGame для игры NightmareCreatures с нужными настройками. А четвёртый пример - шпион, который работает в локальной сети.
    • 11 ноября 2001 года - Дописал статью "Основы SQL". Можете почитать её здесь.
      В Библиотеку кодов добавлен один код.
      Небольшое пополнение в FAQ.
    • 7 ноября 2001 года - Добавлен контрол, изображающий координатную сетку.
    • 6 ноября 2001 года - Создан ФОРУМ!!! Обязательно туда зайлите.
    • 5 ноября 2001 года - Небольшое обновление в FAQ.
      В раздел Библиотека кодов добавлен один код.


    наверх


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

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


    наверх


    Измерение скорости выполнения операций

    Дёмин Антон [http://demin.narod.ru] написал, пример на тему - как измерить время выполнения операции. Но он описал только принцип. Мне показалось, что Вам было бы удобнее если всё это оформить в виде процедур. Принцип измерений очень прост использование timeGetTime из мультимедиа библиотеки winmm.dll (на мой взгляд она самая точная).

        Итак, я написал модуль, который включает в себя несколько процедур. ProfileStart - вызывается вначале выполнения операции, время которой нужно измерить. Ей нужно передать параметр в который она запишет начальное значение таймера. После того, как операция выполнена, вызывайте ProfileStop или ProfileStopMsg для остановки таймера. Эти две процедуры отличаются тем, что первая возвратит во втором параметре прошедшее время, а вторая выводит MsgBox, в котором показывает прошедшее время.


    Option Explicit

    Public Declare Function timeGetTime Lib "winmm.dll" () As Long

    'запускает таймер для измерения
    Public Sub ProfileStart(lStart As Long)
        lStart = timeGetTime
    End Sub

    'измеряет время выполнения операции
    Public Sub ProfileStop(lStart As Long, lLenth As Long)
        lLenth = timeGetTime - lStart
    End Sub

    'измеряет время выполнения операции
    'и сообщает пользователю в окне MSGBOX
    Public Sub ProfileStopMsg(lStart As Long)
        Dim lLenth As Long

        lLenth = timeGetTime - lStart
        MsgBox "Время выполнения операции составило" & vbCrLf & lLenth & " ms.", vbInformation + vbOKOnly
    End Sub

    наверх


    Программное изменение раскладки клавиатуры

    Дёмин Антон [http://www.demin52.com] прислал новый совет. Он касается тех, кто хочет программно изменять раскладку клавиатуры во время выполнения работы программы.

        Итак. При загрузке формы вызываешь функцию API GetKeyboardLayout(....), предварительно объявив ее, и все необходимые константы API. Эта функция возвращает текущую раскладку клавиатуры, а затем, с помощью ActivateKeyboardLayout, переключаем раскладку.

    Public Declare Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As Long
    Public Declare Function ActivateKeyboardLayout Lib "user32" (ByVal HKL As Long, ByVal flags As Long) As Long

    Public Const HKL_NEXT = 1

    Public Const HKL_PREV = 0

    Public Const KLF_REORDER = &H8

    Public Sub МоеИмяПроцедуры()

    Dim lCodeKeybord As Long, CodeKeybord As Long

        lCodeKeybord = GetKeyboardLayout(CodeKeybord)

        If lCodeKeybord = 67699721 Then 'если английский, то все нормально

            'Выполняем необходимые действия

             Else 'если нет, то переключаем на английский

            'в моем случае и выполняем необходимые действия

            Call ActivateKeyboardLayout(HKL_NEXT, KLF_REORDER)

            'Выполняем необходимые действия

            'Переключаем на предыдущую раскладку, в моем случае русская

            Call ActivateKeyboardLayout(HKL_PREV, KLF_REORDER)

        End If



    наверх


    Реализация Undo и для стандартного TextBox

    Вы наверняка видели, что в стандартном текстовом окне Windows (TextBox) есть функция Undo, срабатывающая при нажатии Ctrl + Z. Если это уже реализовано, то может быть можно как-то программно управлять этим свойством? Оказывается можно! Итак, для начала объявим в модуле одну, нужную нам, функцию SendMessage и несколько констант:

    Public Const EM_UNDO = &HC7

    Public Const EM_CANUNDO = &HC6

    Public Const EM_REDO = &H454 'только для Rich Edit 2.0 или позже

    Public Const EM_CANREDO = &H455 'только для Rich Edit 2.0 или позже

        Для реализации "отмены" посылаем окну сообщение EM_CANUNDO, если функция возвратит TRUE, то отмена возможна и значит можно посылать сообщение EM_UNDO. Получив EM_UNDO, TextBox выполнит отмену последней операции. Реализация "повторить" выполняется аналогичным образом.

    fCanUndo = SendMessage (ActiveForm.ActiveControl.hWnd, EM_CANUNDO, &00,  &00)

    If f CanUndo Then

        SendMessage ActiveForm.ActiveControl.hWnd, EM_UNDO, &00, &00

    End If



    наверх


    Особенности программного выбора элементов в ListView

    Если Вам уже приходилось работать с ListView, то Вы, вероятно, уже сталкивались с ситуацией, когда программно выбранный элемент не виден пользователю. Дело в том, что вызов SelectedItem не всегда подразумевает, что выбранный элемент будет виден пользователю. Для того, чтобы пользователь увидел выделенный элемент, нужно вызвать метод EnsureVisible для выбранного элемента. Пожалуйста не забывайте об этом!

    'поместите на форму ListView, скопируйте

    'этот код и посмотрите, что получится.

    Private Sub Form_Load()

    Dim x As Integer

        With ListView1

            For x = 1 To 20

                .ListItems.Add Key:="элемент" & x, Text:="элемент" & x

            Next x

            .SelectedItem = .ListItems("элемент20")

            .SelectedItem.EnsureVisible

        End With

    End Sub

    наверх


    Размещение окна у основания Панели задач

    По умолчанию, Windows отображает панель задач в нижней части экрана. Вы можете переместить её к любому краю экрана, изменяя тем самым размеры доступной области экрана. С панелью задач, всегда видимой на экране, информация иногда заслоняется - особенно, если пользователь развертывает окно приложения. Вы можете использовать функцию SystemParametersInfo в приложении, чтобы определить доступную область экрана.

        Чтобы увидеть, как это работает, создайте новый проект. На форму добавьте контрол Command Button. Затем, добавьте код "Листинг A" для события Click Command Button. Наконец, создайте новый модуль, и добавьте код "Листинг B" в модуль.

    Листинг A:

    Private Sub Command1_Click()

    Dim RC As RECT

    Dim X As Long

        X = SystemParametersInfo _

            (SPI_GETWORKAREA, vbNull, RC, 0)

            Me.Move RC.Left * _

            Screen.TwipsPerPixelX, RC.Top * _

            Screen.TwipsPerPixelY, RC.Right * _

            Screen.TwipsPerPixelX, RC.Bottom * _

            Screen.TwipsPerPixelY

    End Sub

    Листинг B:

    Public Declare Function _

        SystemParametersInfo Lib "user32" _

        Alias "SystemParametersInfoA" _

        (ByVal uAction As Long, ByVal _

        uParam As Long, lpvParam As Any, _

        ByVal fuWinini As Long) As Long

    Public Const SPI_GETWORKAREA = 48

    Type RECT

        Left As Long

        Top As Long

        Right As Long

        Bottom As Long

    End Type

        Прежде, чем выполнить эту программу, удостоверитесь, что панель задач видна на вашем экране. Чтобы выполнять программу, нажмите [F5]. Форма появится на экране. Щелкните кнопку. Форма развернута и остается выше панели задач и не заслонена панелью задач.

        Весь выше приведенный код использует одну функцию - SystemParametersInfo. Она позволяет Вам определять большое количество системных параметров настройки Windows. Так как число системных параметров настройки в Windows очень большое, мы только обсудим те, в которых мы заинтересованы - рабочая область экрана. Чтобы определить рабочую область экрана, вызовите функцию с параметром SPI_GETWORKAREA. Этот параметр сообщает функции, что нужно возвратить координаты доступной области на экране. Координаты возвращаются в структуре RECT. Как только Вы определили рабочую область экрана в структуре RECT, Вы можете использовать функцию Visual Basic Move, чтобы изменить размеры формы к размеру координат, сохраненных в структуре RECT.



    наверх


    Книги

    Азбука программирования в Windows 32 API

    Фотография книги Изложены вопросы создания программных приложений для Window95 и Windows NT.
    Описаны основные типы переменных, макросов, функций.
    Материал книги иллюстрируется многочисленными примерами.
    Настоящее издание (второе вышло в 2000 г.) дополнено описанием тех возможностей Windows, которые не были упомянуты в предыдущих изданиях.

    Румянцев П.В., «Радио и связь» — 2001, 312 стр.
    85 руб. - 5% = 80.75 руб.

    Visual Basic 6.0 :Учебное пособие для вузов

    Фотография книги В систематизированном виде излагаются основы программирования в среде одного из наиболее популярных визуальных средств разработки Windows-приложений.
    Рассмотрены фундаментальные понятия, использование графики и анимации, программирование баз данных, основы проектирования пользовательского интерфейса.
    Для студентов, обучающихся по направлению 654600 ''Информатика и вычислительная техника'', может быть полезна начинающим программистам.

    Литвиненко Т.В., «Горячая линия-Телеком, Радио и связь» — 2001, 140 стр.
    48 руб. - 5% = 45.6 руб.


    наверх


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

    Трехмерное моделирование

       
    Хочешь создать свою вселенную, но не знаешь как, чем и где? Заходи, разберёмся... Свободное общение людей так или иначе связанных с 3D графикой. Здесь вы можете задать любые вопросы. Присоединяйтесь :)

    Подписаться

    Программирование на Visual Basic

       
    Всю жизнь мечтали программировать на Visual Basic? Приходите, получите бесценный опыт и очень полезные навыки в программировании. Напишем программу вместе — СообЧа. Ну, и, конечно, ответим на ваши вопросы.

    Подписаться

    Группа некомпьютерных вопросов

       
    Не следует думать, что сидящего денно и нощно за компьютером Чайника волнует только то, что связано с его компом. Иногда приходится от него оторваться, и вот тут-то всех нас подстерегают другие проблемы, возникают другие вопросы — как сдать вовремя сессию, что делать, если гибддэшник отобрал права, как правильно написать расписку, как красиво и правильно повесить на стену две картины, какого цвета обои будут гармонировать с вашим напольным покрытием...

    Подписаться

    Почта в интернете

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

    Подписаться

    Заработок в сети

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

    Подписаться

    наверх


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

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

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

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


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

    наверх



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

    BalloonMessage for MS Agent

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

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


    наверх


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

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

    Вопросы:


    Автор вопроса:
    Женя

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

       Помогите , пожалуйста разобраться в таком вопросе . Надо считать информацию из Event Viewer.
    Ни в одном месте не нашел использования функции ReadEventLog.
    Сначала открываю журнал с помощью функции OpenEventLog и получаю дескриптор файла , который и передаю функции ReadEventLog. Не могу разобраться какие значения могут принимать такие параметры :dwReadFlags , dwRecordOffset , nNumberOfBytesToRead.(Я знаю что dwReadFlags может принимать такие значения
    EVENTLOG_SEQUENTIAL_READ ,
    EVENTLOG_SEEK_READ ,EVENTLOG_FORWARDS_READ, EVENTLOG_BACKWARDS_READ) .
    И если возможно напишите какой вид должна иметь окончательная функция.

    Public Declare Function ReadEventLog Lib "advapi32.dll" Alias "ReadEventLogA" (ByVal hEventLog As Long, ByVal dwReadFlags As Long, ByVal dwRecordOffset As Long, lpBuffer As EVENTLOGRECORD, ByVal nNumberOfBytesToRead As Long, pnBytesRead As Long, pnMinNumberOfBytesNeeded As Long) As Long


    Автор вопроса: Humbat Nasibov

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

       Pomogite pojaluysta. Nujen kod na Vb dlya postroeniya 2-x mernix grafikov (matematika) funktsiy ili dannix.
    Naprimer, y=sin(x) i t.d.



    Автор вопроса: Вадим

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

       Напроглал на VB программу,но она не со всеми комьютрами работает (веяде 98винд 97офис), испольяуент она ADO к БД Акцессу(..Adodc1.Recordset.AddNew "myField","ssss") - то проблема : на моем компе прога естественно пашет на другом где не стоит VB она тоже пашет а на еще другом компе выдает сообщение "runtime error испольяуйте обновляемый яапрос". В чем проблема, вроде ОФИС веяде 97 (Может влияют раные библиотеки версий офиса 97 )?

    ps Думается если янал бы VC то не янал бы хлопот с офисом если конечно это ия-яа него, в VC наверняка встроенные библиотеки, и не обяяательно вообще ставить офис?


    Автор вопроса: Денис Козлов

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

       Я столкнулся с одной небольшой проблемой при разработке базы данных на Visual Basic 6.0. Знаю, что проблема ерундовая, но я только-только начинаю работать с Basic, и поэтому для меня она не проста. Опишу проблему в общем.
    Я создал форму Form1. На ней расположил три текстовых поля Text1, Text2, Text3 и элемент Data (с именем Data1).
    С помощью Visual Data Manager создал базу данных и связал текстовые поля Text1, Text2, Text3 с полями базы данных (наименования полей: Field1, Field2, Field3, наименование БД - Database). Элемент Data связал с созданной БД, так что можно перемещаться по записям БД.
    Далее создал меню на форме Form1, где есть пункты Добавить запись, Удалить запись, Печать, Поиск и Выход. В пункте Поиск есть подменю с пунктами Текст1, Текст2, Текст3.
    Обработку событий для Добавить запись,Удалить запись и
    Выход я написал (здесь особых проблем не возникло). При кликании на Печать - Текст1 открывается форма Form2, на которой есть текстовое поле Form2.Text1 и две кнопки ОК и Отмена. При нажатии кнопки Отмена форма Form2 исчезает и появляется форма Form1 (Обработку нажатия этой кнопки я написал). При нажатии кнопки ОК должен производиться поиск по записям базы данных (Database) и выводиться та запись, поле Field1 которой частично или полностью совпадает с текстом, введенным в текстовое поле Form2. Text1. В результате должна отображаться форма Form1 с найденной записью.
    Вопрос 1: какой будет код для кнопки ОК? И как восстановить прежнее состояние формы Form1, чтобы снова можно было бы передвигаться по записям с помощью Data1?
    Вопрос 2: при нажатии на пункте Печать меню формы Form1 должен выводиться на печать отчет, где в трех столбцах должны фигурировать данные полей базы данных Field1, Field2 и Field3. Названия столбцов соответственно Text1, Text2 и Text3. Как это можно сделать?




    Ответы:


    Вопрос:

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

    Ответ:

    Автор ответа: Shemyakin, Dmitry

    Можно сэмулировать ping запрос - в ответе будет нужный IP адрес. Как это сделать точно я не знаю но вероятно нужна будет апишная функция посылающая такой запрос.



    Вопрос:

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


    Ответ:

    Автор ответа: Vlad Radionov

    При наличии Visual Studio запустите depends.exe (common\Tools)


    Вопрос:

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


    Ответ:

    Автор ответа: Мунгалов Андрей

    DLL я просматриваю так!
    Открываю Проект - Ссылки - выбираю Dllку потом браузер обьектов и выбираешь библиотеку только что подключенную в окне выведутся все ее функции.

    Прим. ред.: так можно просматривать только содержимое ActiveX Dll.


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

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

    наверх


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

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