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


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 Студия

  • 11 сентября 2001 года - В раздел Примеры добавлен пример создания Floating Bar - плавающей формы.
    Добавлен раздел Архив рассылки
    Количество подписчиков рассылки перевалило за 2000!

    наверх


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

       10 сентября 2001 г. Представляю немного новых примеров: работа с системным треем, как поместить иконку в меню, работа с ImageComboBox, как изменить стандартный TitleBar, а также как изменить иконку в нем с помощью API во время работы программы.

    наверх


    По теме UpFolder

    Прислал
    Конурин А. Ю.

    Исправлена ошибка и снижено количество переменных.

    Public Function UpFolder(Folder As String) as String
       Dim nn As Long
       UpFolder = Folder
       If Right$(UpFolder, 1) = "\" Then
          UpFolder = Mid$(UpFolder, 1, Len(UpFolder) - 1)
       End If
       For nn = Len(UpFolder) To 1 Step -1
          If Mid(UpFolder, nn, 1) = "\" Then
          UpFolder = Left(UpFolder, nn)
          Exit For
       End If
       Next nn
    End Function

    наверх


    Как сделать TextBox enabled = false, но с текстом нормального цвета. Второй вариант.

    Прислал
    Н.Подымов

       Недавно прочитал в рассылке о TextBox.Enable=False

       Я предлагаю Вам другой способ сделать TextBox недоступным пользователю, а в Вашем варианте есть один недостаток - Если в TextBox вставлена полоса пркрутки то она становится недоступной хотя текст отображается нормально.

       По средствам ниже приведенного кода можно реализовать то же самое:

    Privatr Sub Text1_GotFocus()
       Command1.SetFocus
    EndSub

       При поподании тектового поля в фокус, фокус автоматически передается кнопке для данного случая или другому эллементу и в результате TextBox становится недоступным пользователю, а все элементы отображаются нормально.

    наверх


    О сабклассинге

    Автор:
    Алексей Вишневский

       Сабклассинг - техника, позволяющая приложению перехватывать и обрабатывать сообщения (messages), посылаемые или поставляемые в очередь (posted) определенному окну перед тем, как само окно будет иметь возможность их обработать.

       В windows практически все, что мы видим - окна (формы, контролы и т.д.). Каждое окно имеет свою "оконную процедуру" (window proc). В обязанности оконной процедуры входит обработка "сообщений", пришедших этому окну.
       Передача сообщений - это способ, которым windows производит манипуляции со всеми окнами. Hапример, когда юзер пытается закрыть окно, система посылает этому окну сообщение WM_CLOSE и оконная процедура должна должным образом обработать это сообщение.

       У каждого созданного в системе окна зарегистрированного класса ("editbox", "button" и т.д.) есть "оконная процедура по умолчанию" (default window proc), которая и отвечает за обработку сообщений, приходящих этому окну. Если мы напишем свою оконную процедуру для какого-то окна и заменим ей процедуру по умолчанию, то значит мы произвели subclass этого окна. Это и есть сабклассинг.

       Сабклассинг производится вызовом следующих api функций:

    GetWindowLong - для выяснения адреса default window proc (в принципе не обязательна)

    SetWindowLong - для указания адреса новой window proc (эта функция возвращает указатель на предыдущую функцию окна)

    CallWindowProc - для последующего вызова default window proc, если надо (см. также DefWindowProc).


       Сама оконная процедура должна иметь определенный вид:

    Function WindowProc(ByVal hWnd As Long, ByVal uMsg As _
        Long, ByVal wParam As Long, ByVal lParam As Long) As _
        Long


    где:
        hWnd - хендл (указатель) окна
        uMsg - сообщение
        wParam - дополнительная информация сообщения (значение зависит от конкретного типа сообщения)
        lParam - дополнительная информация сообщения (значение зависит от конкретного типа сообщения)

       Ну и пример.
    В модуль:

    Private Declare Function CallWindowProc Lib "user32" Alias _     "CallWindowProcA" (ByVal lpPrevWndFunc As Long, _     ByVal hwnd As Long, ByVal Msg As Long, _     ByVal wParam As Long, ByVal lParam As Long) As Long

    Private Declare Function SetWindowLong Lib "user32" Alias _     "SetWindowLongA" (ByVal hwnd As Long, _     ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

    Private Const GWL_WNDPROC = -4
    Private Const WM_MOVE = &H3


    Private lpPrevWndProc As Long ' тут будет указатель на default proc

    Public Sub start_subclass(hwnd As Long)
        'указываем новую оконную процедуру
        'SetWindowLong при этом возвращает указатель
        'на процедуру по умолчанию для указанного окна
        'Этим самым мы и начинаем субклассинг
        lpPrevWndProc = SetWindowLong(hwnd, GWL_WNDPROC, _
        AddressOf WindowProc)
    End Sub

    Public Sub stop_subclass(hwnd As Long)
        'возвращаем окну его "родную" процедуру
        SetWindowLong hwnd, GWL_WNDPROC, lpPrevWndProc
    End Sub

    Function WindowProc(ByVal hw As Long, ByVal uMsg As _
        Long, ByVal wParam As Long, ByVal lParam As Long) As _
        Long

        '"обрабатываем" сообщение WM_MOVE
        Select Case uMsg
            Case WM_MOVE
                Debug.Print "WM_MOVE"
        End Select

        'поскольку мы не написали "полноценной" оконной
        'процедуры, вызовем "родную" для обработки всех
        'сообщений. Этого можно и не делать, но тогда надо
        'обрабатывать все сообщения и возвращать
        'соответствующие значения.
        WindowProc = CallWindowProc(lpPrevWndProc, hw, _
            uMsg, wParam, lParam)
    End Function

    Теперь в форму:

    Private Sub Form_Load()
        start_subclass Me.hwnd
    End Sub

    Private Sub Form_Unload(Cancel As Integer)
        stop_subclass Me.hwnd
    End Sub

       Ну и напоследок - несколько предостережений:
  • Пользоваться этим надо очень аккуратно.
  • Не забывать возращать на место дефолтную функцию.
  • Не задерживать обработку сообщений (они могут валится сотнями в секунду), что чревато переполнением стека.

    наверх


    Создание ярлыка

    Автор:
    @LEXis

    Public Declare Function fCreateShellLink Lib "STKIT432.DLL" _
       (ByVal lpstrFolderName As String, _
       ByVal lpstrLinkName As String, _
       ByVal lpstrLinkPath As String, _
       ByVal lpstrLinkArgs As String) As Long

    fCreateShellLink "C:\Windows\Desktop", _
       "NotePad", _
       "C:\Windows\Notepad.exe", vbNullString


    наверх


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

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

    Вопросы:


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

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

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


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

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

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


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

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

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


    Автор вопроса: Татьяна

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

       Можно ли в ACCESS2000 сделать так, чтобы раяличные яаписи (строки)в форме отображались раяным цветом,например,для выделения красным просроченных платежей. Пробовала помечать bmp-ияображением, но это так долго_груяится. Записей много.


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

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

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


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

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

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


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

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

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


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

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

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


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

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

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


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

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

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




    Ответы:


    Вопрос:

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

    Ответ:

    На сайте VB Студия в разделе Статьи есть статьи о работе с реестром. Там про это написано.


    Вопрос:

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

    Ответ:

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

    Однозначно, "глючит" шрифт, используемый в ComboBox, я бы попробовал сделать свойство Font у этого OCX, и попытался его изменить, конкретнее нужно поменять свойство CharSet у этого шрифта на 1251, короче говоря поэксперементировать. Может случиться, что у используемого шрифта нет набора 1251, тогда выход один - использовать другой шрифт.


    Вопрос:

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

    Ответ:

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

    Думаю, что это невозможно не только в VB, но и вообще, иначе бы Windows использовали такую возможность. Начните копировать файл с CD-Rom и откройте дверцу? Что? Подвисли?


    Вопрос:

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

    Ответ:

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

    Советую поставить Service Pack 4, а вообще-то может быть используется On Error Resume Next? Уберите.


    Вопрос:

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

    Ответ:

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

    Только эмуляция, с помощью Shape или (для продвинутых) используя API функцию DrawFocusRect.


    Вопрос:

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

    Ответ:

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

    В папке с Promt лежит файл шаблон для Word под названием PROMTOF8, но он зашифрован. Если его сломать, то там все это и написано.


    Вопрос:

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

    Ответ:

    Автор ответа Катковский Денис

      Как только путь до файла изображения получен - загоняем его в image.picture и даем юзверю убедиться в том, что именно это но и хотел. А сами тем временем убеждаемся что этот фай именно рисунок и все необходимое для его просмотра у нас имеется (нет ошибки - все оБ).
      Теперь нам осталось сохранить рисунок из image.PictureData в базу данных. И дело в шляпе!!!
      Есть только одно НО: PictureData имеет тип variant/byte(size), а это значит, что брать рисунок из базы и пихать его в PictureData следует ПРЯМО ИЗ Recordset'а!!! а не из запроса. Дело в том, что запрос преобразует наш variant/byte в простой String со всеми вытекающими...


    Вопрос:

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

    Ответ:

    Я выложил на сайт код, который прислал мне Алексей Лукин. Посмотрите его.


    Вопрос:

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

    Ответ:

    Я выложил на сайт пример, который прислал мне Sergey Y. Tkachev


    Вопрос:

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

    Ответ:

    Автор ответа Sergey Sapozhnikov

    Нужно в любом случае ставить клиента Оракла (там эта библиотека и находится). А из VB доступ получаете уже как хотите ADO, OLE DB, ну, или ODBC.


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

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


    наверх


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

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