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


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

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

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


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

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

Sergey Y. Tkachev
Sergey Sapozhnikov
Sobic
Несколько слов от автора:

   Этот выпуск немного опоздал по техническим причинам - в течении двух недель у меня не было доступа в сеть. Вопросы и ответы, а также любой другой материал, присланный Вами после 25 сентября не вошёл в этот и предыдущий номер рассылки, но я обязательно опубликую их в следующих выпусках.
Читайте!


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




О группе СообЧаVB

      Группа VB. Заходите в гости. Здесь вы приобретете практические навыки по программированию на Visual Basic. Как вы этого сможете достигнуть? Путем написания собственной серьезной программы. Чем обычно занимается рядовой чайник-программист? Ну пишет там всякие приколы на VB... Ну ма-а-ленькую полезную программку наваяет. А как получить навыки в создании серьезных программ? Правильно, путем создания серьезных программ. ;) Но в одиночку вам с этим не справиться. Вот для этого в проекте СообЧа существует группа программистов-чайников, которые занимаются разработкой серьезного софта на VB. Суть состоит в том, что вам совсем необязательно знать все в Visual Basicе. Вам достаточно быть рядовым чайником и немного знать операторы VB. Остальному научимся вместе. На данный момент в группе разрабатывается почтовая программа под рабочим названием "Сообчайлер". Она будет уметь все, что умеет популярная программа The Bat и даже намного больше. Есть сборник оригинальных идей, выдвинутых членами нашей группы, которые мы постараемся реализовать все вместе. Проект разбивается на отдельные простые задачи. Такие как: проверка орфографии, форма для написания нового письма, главное окно... и т.п. Каждую часть делает отдельный человек. Затем он высылает сделанный модуль в группу и остальные просто присоединяют его к базовому проекту. Вам совсем не обязательно четко представлять как это сделать. Достаточно просто начать и столкнуться с какой-нибудь проблемой. Пусть это будет даже проблема типа "А как добавить новый модуль к проекту?". Все. Наткнулись... ;) Дальше действуем по одной схеме - пишем письмо с описанием проблемы в группу и мы все вместе разбираемся в проблеме. Таким образом все остальные получат ЗНАНИЯ и некоторые навыки в решении создавшихся проблем. Не забывайте - все мы чайники. Не стоит бояться задать вопрос. Задавайте - а мы вместе попытаемся найти ответ.

Подписаться в группу (пустое письмо)



наверх


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

  • 10 октября 2001 года - Добавлены хитрости.
    Вышел десятый юбилейный выпуск рассылки. Все выпуски рассылки можно посмотреть здесь
    Сайт полностью избавлен от графических баннеров. Остался только блок из трёх текстовых ссылок. Грузиться будет быстрее!
    Добавлена одна замечательная программа в раздел Утилиты. Это русскоязычная программа русского же разработчика для создания файлов справки. Встраивается в Microsoft Word. Работать с неё предельно легко! Обязательно посмотрите. Размер около двух мегобайт.
    Старые новости ущли в архив.

    наверх


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

       17 сентября 2001 г. Раздел Программы пополнился новой версией программы Михаила Эскина для регистрации OCX и DLL.    15 сентября 2001 г. В разделе Советы обновление, кроме того добавлены несколько новых примеров в Примеры, а также интересный OCX для работы со Scin-ами в разделе ActiveX.

    наверх


    Ведение лог-файлов

    Очень полезно, чтобы программа вела лог-файлы своей работы. Особенно записывала туда время и на каком этапе произошел сбой. В дальнейшем это существенно облегчает поиск и исправление ошибки. Вдобавок если вы программу делали на заказ, то цена такого протокола работы резко возрастает. Все что нам нужно для работы - это ввести одну-две переменных и добавить одну ма-а-ахонькую процедурку. Итак, поехали:
    Для начала объявим переменную Private Logging As Boolean
    Она будет служить нам для разрешения/запрета ведения подробного протокола работы. Это необходимо, чтобы без нужды не писать в файл большое количество информации. Только время запуска/завершения и код и описание ошибки, если таковая была. Добавим в программу возможность запуска с ключом /l для ведения подробных логов. это придаст гибкость программе. З.Ы. чтобы запустить программу с ключем /l создайте ярлык программе и добавте в пути к программе (лейбл объект) этот ключ.

    'Если программа была запущена с ключем /l, то записываем
    'все действия программы в логи, иначе - записываются только
    'контрольные точки и сообщения об ошибках
    If Command$ = "/l" Then Logging = True Else Logging = False
    If InStr(1, Command$, "/l") > 0 Then Logging = True Else Logging = False

    Ну, а теперь осталось только добавить саму процедуру записи действия:

    Private Sub Log(Promt As String)
    'Процедура, которая ведет логи в зависимости от ключа в
    'коммандной строке
    'Если переменная установлена в False (запуск без ключа /l), то пропускаем
    If Logging = False Then Exit Sub
    Dim FileNum As Integer
    FileNum = FreeFile
    Open App.Path & "\checker.log" For Append As FileNum
    Write #FileNum, " " & Promt
    Close #FileNum
    End Sub

    Вот и все. Теперь используем ее везде, где хоть что-то делается. Это дабавляйте в том месте где нужно добавить запись в лог-файл.

    Log Now & "Получение почты" & vbCrLf

    Однако для наиболее ответственных точек сделаем отдельную процедуру записи состояния программы в этих точках LogGeneral.

    Private Sub LogGeneral(Promt As String)
    'Процедура, которая ведет логи.
    Dim FileNumb As Integer
    FileNumb = FreeFile
    Open App.Path & "\checker.log" For Append As FileNumb
    Write #FileNumb, " " & Promt
    Close #FileNumb
    End Sub

    наверх


    Как узнать расположение панели задач?

       Таскбар может быть налепелен слева, справа, или даже сверху. А некоторые юзеры (никому не рассказывайте только) делают его высотой в 2 или 3 строки.
    Таким образом, ваше приложение может не влезать в экран. Первый прмер позволит спрятать таскбар если он мешается , а вот мешается ли он - можно выяснить взяв его размеры и координаты:

    Dim mLeft As Single
    Dim mTop As Single
    Dim mWidth As Single
    Dim mHeight As Single


    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lprect As RECT) As Long


       Dim precTaskbar As RECT
       Dim plngResult As Long
       Dim phWndTaskbar As Long

       phWndTaskbar = FindWindow("shell_trayWnd", "")
       plngResult = GetWindowRect(phWndTaskbar, precTaskbar)
       mLeft = precTaskbar.L * Screen.TwipsPerPixelX
       mTop = precTaskbar.T * Screen.TwipsPerPixelY
       mWidth = (precTaskbar.R - precTaskbar.L) * Screen.TwipsPerPixelX
       mHeight = (precTaskbar.B - precTaskbar.T) * Screen.TwipsPerPixelY
       Print mLeft, mTop, mHeight

    End Sub


    Private Sub Form_DblClick()
        GetTascbarInfo
    End Sub

    наверх


    Как спрятать панель задач

       Итак, что мы видим перед собой на экране? Правильно Таскбар - эта та самая полосочка внизу экрана, куда минимизируются окна. Первое желание - спрятать ее.

    Скопируйте это на форму , запустите ее.

    Private Declare Function FindWindow Lib "user32" _
      Alias "FindWindowA" (ByVal lpClassName As String, _
      ByVal lpWindowName As String) As Long
    Private Declare Function SendMessage Lib "user32" _
      Alias "SendMessageA"(ByVal hwnd As Long, _
      ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    'Заметьте, никаких Public декларайий внутри формы. Если функции
    'обьявлены в модуле, то там можно делать их паблик

    Private Const WM_SHOWWINDOW = &H18

    Dim hWndTaskbar As Long
    Dim bShow As Boolean

    Private Sub Form_Click()
        Dim r As Long
        Dim i As Integer
        i = 0
        bShow = Not bShow
        r = SendMessage(hWndTaskbar, WM_SHOWWINDOW, bShow, i)
    End Sub

    Private Sub Form_Load()
        bShow = True
        hWndTaskbar = FindWindow("shell_trayWnd", "")
    End Sub

    наверх


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

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

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

    наверх



    Сумма прописью

    cmdInput - CommandButton
    txtInput - TextBox
    txtOut - TextBox

    Public Function Num3(trojka$, i%)
    Dim sl$(1 To 3, 0 To 3)
    sl$(1, 1) = "миллион "
    sl$(2, 1) = "тысяча "
    sl$(3, 1) = "рубль "
    '---
    sl$(1, 2) = "миллиона "
    sl$(2, 2) = "тысячи "
    sl$(3, 2) = "рубля "
    '---
    sl$(1, 3) = "миллионов "
    sl$(2, 3) = "тысяч "
    sl$(3, 3) = "рублей "
    sl$(3, 0) = "рублей "
    '---
    ed$ = Right$(trojka$, 1)
    des$ = Mid$(trojka$, 2, 1)
    sot$ = Left$(trojka$, 1)
    '---
    If ed$ = "0" Then r3$ = ""
    If ed$ = "1" Then If i% = 2 Then r3$ = "одна " Else r3$ = "один "
    If ed$ = "2" Then If i% = 2 Then r3$ = "две " Else r3$ = "два "
    If ed$ = "3" Then r3$ = "три "
    If ed$ = "4" Then r3$ = "четыре "
    If ed$ = "5" Then r3$ = "пять "
    If ed$ = "6" Then r3$ = "шесть "
    If ed$ = "7" Then r3$ = "семь "
    If ed$ = "8" Then r3$ = "восемь "
    If ed$ = "9" Then r3$ = "девять "
    '---
    If des$ = "0" Then r2$ = ""
    s$ = des$ & ed$
    If s$ = "10" Then r3$ = "десять "
    If s$ = "11" Then r3$ = "одиннадцать "
    If s$ = "12" Then r3$ = "двенадцать "
    If s$ = "13" Then r3$ = "тринадцать "
    If s$ = "14" Then r3$ = "четырнадцать "
    If s$ = "15" Then r3$ = "пятнадцать "
    If s$ = "16" Then r3$ = "шестнадцать "
    If s$ = "17" Then r3$ = "семнадцать "
    If s$ = "18" Then r3$ = "восемнадцать "
    If s$ = "19" Then r3$ = "девятнадцать "
    '---
    If des$ = "2" Then r2$ = "двадцать "
    If des$ = "3" Then r2$ = "тридцать "
    If des$ = "4" Then r2$ = "сорок "
    If des$ = "5" Then r2$ = "пятьдесят "
    If des$ = "6" Then r2$ = "шестьдесят "
    If des$ = "7" Then r2$ = "семьдесят "
    If des$ = "8" Then r2$ = "восемьдесят "
    If des$ = "9" Then r2$ = "девяносто "
    '---
    If sot$ = "0" Then r1$ = ""
    If sot$ = "1" Then r1$ = "сто "
    If sot$ = "2" Then r1$ = "двести "
    If sot$ = "3" Then r1$ = "триста "
    If sot$ = "4" Then r1$ = "четыреста "
    If sot$ = "5" Then r1$ = "пятьсот "
    If sot$ = "6" Then r1$ = "шестьсот "
    If sot$ = "7" Then r1$ = "семьсот "
    If sot$ = "8" Then r1$ = "восемьсот "
    If sot$ = "9" Then r1$ = "девятьсот "
    '---
    If trojka$ <> "000" Then j% = (-1) * CInt(ed$ = "1" And des$ <> "1") _
    + (-2) * CInt((ed$ = "2" Or ed$ = "3" Or ed$ = "4") And des$ <> "1")
    If j% = 0 And trojka$ <> "000" Then j% = 3
    trojka$ = r1$ & r2$ & r3$ & sl$(i%, j%) 'формирование тройки цифр и
    'слова,например-"123 тысячи"
    End Function
    '***

    Private Sub cmdinput_Click()
    w$ = txtinput.Text 'Входное число - текст типа "123.45",защита
    '"от дурака" не сделана
    'выделение рублей в записи числа и удаление левых пробелов
    rubli$ = LTrim$(Left$(Str(Val(w$) * 100), _
    Len(Str(Val(w$) * 100)) - 2))
    cop$ = RTrim$(Right$(Str(Val(w$) * 100), 2)) 'выделение дробной части
    'числа и удаление правых пробелов

    Do While Len(rubli$) < 9
    rubli$ = "0" & rubli$
    Loop
    res$ = ""
    For i% = 1 To 3
    trojka$ = Mid$(rubli$, 3 * i% - 2, 3)
    Call Num3(trojka$, i%) ' Вызов функции формирования готовой тройки,
    'типа "123 тысячи"
    res$ = res$ & trojka$ ' Накопление таких троек
    Next i%
    res$ = UCase$(Left$(res$, 1)) & Right$(res$, Len(res$) - 1) 'Запись
    'первой буквы res$ в верхнем регистре

    c$ = " копеек" ' Блок добавления копеек
    If (Right$(cop$, 1) = "1" And Left$(cop$, 1) <> "1") Then c$ = _
    " копейка"
    If ((Right$(cop$, 1) = "2" Or Right$(cop$, 1) = "3" Or _
    Right$(cop$, 1) = "4") And Left$(cop$, 1) <> "1") Then _
    c$ = " копейки"
    If Left(res$, 1) <> "Р" Then res$ = res$ & cop$ & c$ Else _
    res$ = cop$ & c$

    txtout.Text = res$ ' Выход текста
    End Sub

    наверх

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

    BalloonMessage for MS Agent

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



    наверх


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

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

    Вопросы:


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

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

          Люди!!! Есть предложение создать ocx контрол для просмотра массивов от одномерного 1*n до матрици n*m на подобии msflexgrid контрола (с заголовками и всякими опциями) тока он будет изначально отображать лишь столько строк(s) на экране ,сколько входит в рабочую область , а затем при прокрутке будет выбираться из данного массива по s записей и отображаться с первой строки в контроле, а строки в контроле меняются тока при изменении размеров контрола . Это будет занимать гораздо меньше времени , чем копирование всего массива в мсфлексгрид . Или достать исходнини мсфлексгрида и чуть-чуть его переделать (тока где их достать). Я начал делать такой контрол, но ничего не получилось из этого хорошего



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

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

       1) Как быстро упорядочить(отсортировать) массив(Long) данных?
    2) Как быстро удалить несколько(n) элементов этого массива?


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

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

       Надо нажимая на кнопку, запускать привязанный как то к ней вордовский документ в ворде.


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

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

       Как создавать WinHelp файлы. И как сделать справку "Что это?"


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

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

       Как сделать на VB элемент управления ActiveX типа TreeView в такой иерархической системе, которая используется в Win98. Если можно покажите код.


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

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

       Прошу помочь в написании кода для работы с LPT портом, необходимо: переслать байт в порт, управлять линией STROBE.


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

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

       Вот еще один вопросик: как сохранять иконку из picture на диск через API(по типу SavePicture)?


    Автор вопроса: Богдан

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

       Как внедрить Word2000 на форму Access2000? Вместо поля Edit я хотел бы поместить Ворд для редактирования текста на форму Access'а.


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

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

       Есть БД Access. Ия таблицы Tabl необходимо вытащить внешним модулем на VB5 проиявольную яапись с некоторым номером, для дальнейшей обработки. Помогите, кто янает.


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

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

       Как можно определить номер страницы в Верде (проблема яаключается в том, что иногда нумерация начинается с нуля, например, а номер страницы в верхний/нижний колонтитул не вставлен - обращаться некуда)?


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

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

       Можно ли прочитать указанный мной сектор диска, если да то как?


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

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

       Как_ сделать так, чтобы .wav файл играл как фоновая музыка и была слышен клик мыши_ на фоне музыки.


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

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

       Как из-под Basic for MS Excel выдать через динамик звук определенной частоты и длительности ( например, нота ЛЯ: 440 Гц, 1 секунда ) ? А как это сделать через колонки ( наушники ) ?


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

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

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


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

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

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


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

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

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


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

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

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




    Ответы:


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

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

    наверх


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

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