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


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

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

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

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


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


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


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


Рассылки Subscribe.Ru
Старые игры

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

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

Ссылки:

  • Улицы VB
  • Использование VB
  • Азбука VB
  • VB на русском
  • Улицы VB
  • Кирпичики VB
  • CообЧа VB
  • Snoozex Design
  • Господа!!! читайте MSDN!!!

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

       Это 29 выпуск рассылки. Возможно по техническим причинам несколько следующих выпусков задержутся.
    Читайте!


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




    О VB.Net

    По материалам сайта vbrussian.com

    Информация, датированная концом мая месяца 2001 года, VBITS, презентация от David Mendlen, Microsoft Visual Basic Product Planner

    Была показана предварительная (даже не альфа)версия VB7, входящая в состав новой Вижуал Студии.

    Микрософт позиционирует этот продукт следующим образом :
    - Visual Basic - продуктивный инструмент разработки приложений
    - Visual C++ - наиболее полный и мощный (power) инструмент
    - Visual InterDev - Инструмент для создания WEB приложений

    Основной целью выпуска VS7 было декларировано: "упрощение создания WEB приложений серьезного уровня (уровня предприятий)" Итак, WEB теперь тоже находится в сфере интересов программистов на Visual Studio. Visual InterDev является частью интергрированной среды. Естественно, будет работать HTML IntelliSense (подсветка синтакстиса функций, методов и свойств) и завершение ввода тэгов.

    По сведениям Микрософт 90 процентов web программистов используют также VBScript, соотвественно VI 7 будет поддерживать все VB-языки.

    Был продемонстрирован новый VB menu editor. Участники VBITS в Сан-Франциско, кто "поторогал" новый редактор единодушны в своем мнении - новый редактор много лучше предыдущего и наконец "сделан правильно". Теперь создание меню может быть выполнено визуально - путем перетаскивания MainMenu контрола на форму, и выбора его свойств.

    Что же еще:
    Новая версия OptionExplicit, названная "OptionStrict," Эта опция требует строгого использования типов.(По моему давно пора) Наследование визуальных характристик, больше похоже на user interfaice теперь работает и для контролов
    Осталось неясным, как WebClasses будут поддерживаться в VB7. Mendlen обьяснил это тем, что WebClasses - its "generic technology." Не было показано, так же, как будет поддерживаться синхронизация между потоками.

    По прежнему покрыта мраком дата выхода Visual Basic 7 и Visual Studio 7 Microsoft предпологает выпустить альфа-весию летом, а бетту - осенью.


    По результатам обсуждения в группах я вычитал в адрес VB7 следующее:
    - можно будет создавать консольные приложения MS по прежнему рекомендует использовать VC++ для этого, однако VB сможет создавать NT сервися, причем темплэйт для этого будет включен в поставку.
    - вы получите больший контроль над процессом линковки. Линковка многоязычых модулей станет обычным делом
    - будут добавлены некоторые новые опции для оптимизации. Что-то типа поддержки новых фич процессоров.
    - наконец, начтоящее наследование. Причем будет поддерживаться наследования компонентов, для которых у вас есть исходные коды на VB или VC++. Откомпилированные компоненты уже не смогут быть унаследованы.

    По материалам превью VB7 на VBITS Chicago.
    Хорошая новость - теперь VB7 сможет использовать Windows Foundation Classes (WFC)
    VB 7 обещает стать объектно - ориентированным языком, в полном смысле этого слова. Несколько слов об этих возможностях:

    Constructors: Когда объект создается - весьма неплохо иметь вохможность передать ему некоторые данные для инициализации. Сейчас это невозможно, и вы вынужденны создавать специальные инициализационные методы, и после создания их вызывать (я, например этим сильно недоволен). В VB 7 конструкторы обьетов смогут принимать параметры, это упростит жизнь простым программистам :-)

    Encapsulation: Идея - вы можете создать ряд процедур(методов или свойств) Другой код может использовать эти методы, абсолютно не вдаваясь в подробности, что происходит внутри. Этот код просто внедряется в проект

    Free-threaded: Многопоточность - это комплексная концепция.Free-threading базируется на идее иметь возмоможность выполнять более одного потока в одно время. Например, печать документа в фоне, пока пользователь набирает новый документ. Free-threaded очень важен для создания масштабируемых server-side компонент, так же он может быть полезен и при создании интерактивного юэер - интерфейса.

    Inheritance: Наследование - Куча копий сломано по этому поводу - вкратце - возможность использования свойств и поведения чужого объекта, возможность расширения поведения этого объекта. Я могу создать объект Товар, на основе его создать объект Пищевой товар, и Промышленный товар. Оба будут наследовать свойства и поведение от объекта Товар. При этом в любой момент вы можете расширить или изменить поведение наследующего объекта.

    Initializers: Сегодня в VB вы объявляете переменные и потом присваиваете им значения - т.е. 2 строки кода. Инициализаторы позволяют декларировать и присваивать значения в одном стэйтменте.

    Object-based: Это сравнительно легко для любого языка - называться object-based. Можно назвать так любой язык легко взаимодействующий с объектами. Visual Basic имеет такую функциональность начиная с третьей версии, а сейчас (vb6) - DAO objects, ActiveX контролы, RDO, ADO и многие другие.

    Object-oriented: Для того, чтобы называться объектно-ориентированным, язык должен удовлетворять трем критериям:
    1- Он должен поддерживать инкапсуляцию(encapsulation). VB делает это с 4 версии
    2 - Обязн поддерживать наследование(inheritance). VB 7 будет иметь полноценное наследование.
    3 - Ну и поддержка полиморфизма(polymorphism). В VB это работает с 4 версии. Итак, в 7 версия будет вполне удовлетворять этим критериям.

    Overloading: Объекты частo выполняют одинаковые действия с похожими типами данных. Например, требуется добавить в обьект Заказ элемент Продукт и элемент Сервис. Легко, добавляем методы AddService и AddProduct в объект Order, и готово. Используя overloading мы можем использовать метод Add для каждого случая, позволяя VB автоматически вызывать правильный метод в зависимости от передаваемых данных.

    Overriding: Когда мы используем наследование, наш новый класс получает все методы от родительского класса. Однако может быть необходимим изменить какие либо из этих методов.Вы можете Переписать эти методы используя Overriding В тоже время VB7 будет позволять импользовать и оригинальный метод родительского объекта, используя ключевое слово MyBase (MyBase.methodname).

    Polymorphism: Просто возможность иметь 2 различных объекта, разного типа. При этим, каждый из них может может поддерживать одинаковые методы. Это позволяет нам писать код, вызывающий нужный метод в зависимости от типа объекта, используемого в данный момент.

    Shared Members: По другому(в С языке) называемый статический член класса, - метод или переменная, одинакого доступная для всех экземпляров класса. Каждый порожденный объект, базирующийся на данном классе будет иметь доступ к такой переменной или методу. Таким манером легко создавать счетчики экземпляров класса

    Structured Exception Handling: Обработка исключений. Взамен древнего, и нередко абсолютно негибкого On Error Goto выражения, мы имеем новую структуру для обработки ошибок. Это блок, содержащий Try, Catch, Finally ключевые слова. Код между Try и Catch является защищенным, и если ошибка случается выполняется Catch блок. После выполнения Catch блока выполняется код из Finally блока. Собственно, это стуктура, принятая во всех современных языках.

    Type Safety: Visual Basic сегодня преобразовывает типы автоматически. Нередко эти приводит к странностям в поведении программы. Используя type safety мы сможем заставить Vb избегать автоматического преобразования типов. Хотя эти и заставит программиста думать перед присвоением переменной одного типа другому, но при этом позволит избежать ошибок.

    User Interface Inheritance: Наследования в языке недостаточно! VB 7 будет включать наследовние форм. Это означает, что вы сможете создать шаблон формы, положить на нее тулбар, лого, установить цвета, и после этого создавать остальные формы, базируясь на этой, базовой. Все последующие будут наследовать внешний вид и код. И, главное - изменения в базовой форме будут автоматичемки приводить к изменениям в дочерних. Останется только перекомпилировать проект. Неплохо, а?!

    Так же из нового: WebForms и Web Services, не буду об этом писать, так как самому пока не вполне ясна функциональность этих элементов.

    наверх


    Перебор кликом трех стостояний Чекбокса

    Влад Помелов

    Чтобы заставить CheckBox последовательными нажатиями именно ЛЕВОЙ (да и правой тоже) кнопки мыши переключаться во все три состояния ("выключен": CheckBox.Value=0, потом "затемнен": CheckBox.Value=2, а потом "включен": CheckBox.Value=1)
    придется схитрить:

    'завести дополнительную переменную
    Private CheckFlag as Integer

    'запомнить текущее состояние CheckBox-а
    Private Sub CheckBox_MouseDown(Button As Integer, Shift As Integer, X
    As Single, Y As Single)
    CheckFlag = CheckBox.Value
    End Sub

    'и только после окончания события CheckBox_Click, которое происходит между CheckBox_MouseDown и CheckBox_MouseUp
    'переключаем CheckBox в нужное состояние
    Private Sub CheckBox_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If CheckFlag = 0 Then
         CheckBox.Value = 2
         Exit Sub
    ElseIf CheckFlag = 2 Then
         CheckBox.Value = 1
         Exit Sub
    ElseIf CheckFlag = 1 Then
         CheckBox.Value = 0
         Exit Sub
    End If
    End Sub

    наверх


    Как избавится от Null при получении оного из базы данных

    Игорь П.

    text1 = rs!Phone & ""
    Так, и не нужно лишних проверок, если телефон не введен

       Этот совет хорош только при работе с MDB базой. При работе с DBF, NULL может встречаться не только в текстовых, но и в числовых полях. При этом Ваш совет не работает. Я пишу следующее:

    text1=vbNullString
    If Not IsNull(rs!Phone) Then text1 = rs!Phone

    наверх


    ASP: Повышение наглядности кода генерации страниц

    Информация взята с сайта
    prosto.pp.ru
        Пусть для генерации формы применен следующий код:

        <FORM>
          <TABLE>
            <TR>
              <TD>
                Значение 1
              </TD>
              <TD>
                <INPUT Name="Value1" Value="1" Size=10 Maxlength=10>
              </TD>
            </TR>
            <TR>
              <TD>
                Значение 2
              </TD>
              <TD>
                <INPUT Name="Value2" Value="2" Size=10 Maxlength=10>
              </TD>
            </TR>
          </TABLE>
        </FORM>

         При создании формы было поля ввода Value2 создаются копированием кода относящегося к Value1 с последующей заменой сответствующих значений. Однако при таком подходе большая форма будет занимать много места и работа с ней станет не совсем удобной.
         Генерация страниц с применением процедур позволяет поднять наглядность получаемого программного кода.
         Попробуем переписать код генерации формы в виде:

        <FORM>
          <TABLE>
        <%Call Put_Param("Значение 1","Value1","1",10,10,"",True)%>
        <%Call Put_Param("Значение 2","Value2","2",10,10,"",True)%>
          </TABLE>
        </FORM>
        
        ' Вывод поля ввода
        Sub Put_Param(sName,sFieldName,sValue,sSize,sMaxLength,onScript,bInput)
          Response.Write("<TR><TD>" & sName & ": </TD><TD>")
          If bInput=True Then ' Вывод поля ввода
            Response.Write(" <INPUT Name='" & sFieldName & "'" _
                                  & " Value='" & sValue & "'" _
                                  & " Size=" & sSize _
                                  & " MaxLength=" & sMaxLength _
                                  & " " & onScript & ">")
          Else ' Вывод значения для просмотра
            Response.Write(sValue)
          End If
          Response.Write("</TD></TR>")
        End Sub
        
         Как видно собственно код формы стал более компактен и обозрим.
         О процедуре Put_Param() следует сказать отдельно. Если в различных модулях требуется формировать похожие поля форм, то процедуру Put_Param() целесообразно поместить в файл Include.
         Процедура Put_Param() имеет параметры:

    sName - Название поля
    sFieldName - идентификатор поля
    sValue - значение
    sSize - размер поля ввода
    sMaxLength - максимальное число символов в поле
    onScript - подстановка скрипта для проверки вводимых значений

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

    наверх


    Поиск в DBCombo по первым введенным буквам

    Васильев Виктор

       Теперь корректно обрабатывает BackSpace и Del,чего раньше, к сожалению, не было. Ну и работает с ADO-DataCombo.

       Dim n%
              Select Case KeyCode
             Case Is >= 48
                  DataCombo1.SelStart = Len(DataCombo1.Text) - DataCombo1.SelLength + 1
                  n = DataCombo1.SelStart
                  Adodc1.Recordset.Find "[Фамилия] LIKE '" & DataCombo1.Text & "*'"
                  If Adodc1.Recordset.EOF Then
                       MsgBox "Записи не найдены", vbExclamation + vbOKOnly, "ОШИБКА" ' По желанию Adodc1.Recordset.MoveFirst
                  End If
                  DataCombo1.SelStart = n
                  DataCombo1.SelLength = Len(DataCombo1.Text) - n
               End Select

    наверх


    Решение системы линейных уравнений

    Владимир Мизгулин

    Sub Eq_Sol(a() As Double, b() As Double, x() As Double, n As Integer)
    ' Решение системы линейных уравнений AX = B
    ' методом Халецкого (http://www.chat.ru/~alglib/).
    ' Обращение:
    ' Call (A(),B(),X(),N)
    ' где N - кол-во уравнений (неизвестных), A - матица коэффициентов (N*N),
    ' B - столбец (N), X - решение системы (N).
    ' Метод: матрицу A можно представить в виде A = L*R,
    ' где L - левая (нижняя) треугольная матрица,
    ' R - правая (верхняя) треугольная матрица с единицами по диагонали,
    ' тогда AX = LRX = L(RX) = LY = B,
    ' т.е. надо решить две простые системы LY = B и затем RX = Y
    ' Перед обращением следет проверить, что A(1,1) <> 0.
    ' Имеет ли система решение прграмма не проверяет.

    Dim L(1 To 20, 1 To 20), R(1 To 20, 1 To 20), Y(1 To 20)
    Dim i As Integer, j As Integer, k As Integer
    For i = 1 To n
        L(i, 1) = a(i, 1)
        R(1, i) = a(1, i) / a(1, 1)
    Next i
    Y(1) = b(1) / a(1, 1)
    For i = 2 To n
        R(i, i) = 1
        j = 2
        Do
           L(i, j) = a(i, j)
           R(i, j) = 0
           For k = 1 To j - 1
              L(i, j) = L(i, j) - L(i, k) * R(k, j)
           Next
           j = j + 1
        Loop Until j > i
        R(i, i) = 1
        Do
           L(i, j) = 0
           R(i, j) = a(i, j)
           Y(i) = b(i)
           For k = 1 To i - 1
              R(i, j) = R(i, j) - L(i, k) * R(k, j)
              Y(i) = Y(i) - L(i, k) * Y(k)
           Next
           R(i, j) = R(i, j) / L(i, i)
           Y(i) = Y(i) / L(i, i)
           j = j + 1
        Loop Until j > n
    Next
    x(n) = Y(n)
    For i = n - 1 To 1 Step -1
        x(i) = Y(i)
        For k = i + 1 To n
           x(i) = x(i) - R(i, k) * x(k)
        Next
    Next
    End Sub

    наверх


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

    BalloonMessage for MS Agent

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

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

    наверх


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

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

    Вопросы:


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

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

       У Вас есть исходник проги, которая тырит инфу биоса функцией GetMem ! Но вот эта функция, понятное дело, не пашет в 2000 маздае ! Как ее заставить работать, или какие есть аналоги этой функции, работающие на всех маздаях ???


    Автор вопроса: Кузин Константин

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

       Народ, подскажите кто-нить, почему API функция ExitWindowsEx не завершает работу или не выключает комп, а завершает сеанс данного юзера и предлагает войти под новым именем ?


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

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

       Пожалуйста подскажите, как загрузить в ListView текст из файла?


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

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

       Подскажите где можна скачать MSDN для VB6, бея справочника долго нужно париться над ним.


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

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

       Как сделать чтобы форма была всегда поверх всех окон?


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

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

       А можно ли менять прозрачность всех окон в системе с помощью API? Если да, то как??


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

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

       А как с помощью API вызвать диалоговое окно выбора цвета и сохранить новые значения??


    Автор вопроса: Тёмыч

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

       Я пишу софтину на VB (проигрывание явуковых MIDI файлов). Я подключаю к проекту библиотеку Windows Media Player. объявляю глобяльную переменную:
    dim MP as MediaPlayer.MediaPlayer
    Мне нужно ияменить громкость воспроияведения. Я пишу: MP.volume=Value и получаю сообщение об ошибке. Может кто-то подскаяать, что нужно сделать, чтоб софтина яаработала?


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

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

       Подскажите пожалуйста! Как на VB установить шрифты в систему. Пробовал использовать API функцию AddFontResource. Она устанавливает вибраний шрифт в систему, только после перезагрузки шрифт удаляется из системы.


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

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

       Есть переменная WindowsDirectory и я всегда ее использовал для временных файлов, так стабильнее чем Temp но вдруг мне пришло письмо что моя программа не работет в W2k Server так как он не распознает эту переменную и пишет файл куда хочет, а когда его нужно прочитать то читает тоже откуда хочет и эти папки не сходятся. Отсюда информация не теряется, а просто пишется в одно месте, а читается из другого места - т.е. файла нулевого!
    Стандартные переменные $System_Root$ VB не понимает!
      
    P.S. В W2K Proffesional все работает!


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

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

       как расположить несколько чисел в порядке воярастания?




    Ответы:


    Вопрос:

       В программах 1С очень удобные отчеты. можно ли их прицепить к своей программе на VB. и можно ли их таскать со свой программой (без установки всего предприятия). Я пробовал добавить ссылку на Moxel.dll, ругается.

    Ответ:

    Автор ответа: Шатрыкин Иван

    Знаешь, я видел на сайте Микрософта в разделе Office Extensions (конкурс там такой) модуль, который позволяет читать данные 1C в Excel. Сходи, погляди, может быть он там еще есть? Думаю, что должно помочь.


    Вопрос:

       В программах 1С очень удобные отчеты. можно ли их прицепить к своей программе на VB. и можно ли их таскать со свой программой (без установки всего предприятия). Я пробовал добавить ссылку на Moxel.dll, ругается.

    Ответ:

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

    По-моему это просто надстройка над Crystal Reports. Поставь их себе и попробуй поработать.


    Вопрос:

       1. При установке любой программы (после её закабинечивания мастером упаковки) пишет "неверные линии" в файле Setup.LST как раз там, где указан путь распаковываемых файлов. После сообщения о фатальной ошибке установка ПО прекращается. Пришлось выделить 600 метров диска для установки ещё одной версии Windows SE и VB5. Последняя создаёт нормальную установку, но она не делает кабинетов а файлы *.EX_. Может у кого-нибудь ещё была такая проблема?

    2. Как сделать, что прогамма, выполняющая например 2+2 не занимала 5-7 Мб установки.

    Ответ:

    Автор ответа: Roman Panyshev

    Перед упаковкой файлов зайди в Настройка>Панель управления>Язык и стандарты и переключи Региональные настройки на Английский. После перезапуска компа спокойно упаковывай файлы. Затем можешь вернуть все на место. Инсталятор будет работать прекрасно.


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

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

    наверх


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

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