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


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

       Времени мало - готовлю доклад на научно-практическую конференцию. Быстро набросал этот выпуск. Он вышел вовремя.
    Читайте!


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




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

    • 2 ноября 2001 года - Обновление очень маленькое. У меня совсем нет времени. В разделе Примеры добавлен уникальный пример программы, удаляющей саму себя!
    • 29 октября 2001 года - В раздел Примеры добавлены 3 примера. Это пример использования текстового файла в качестве базы данных, пример получения цвета точки в объекте Picture и пример перетаскивания формы за любое место.
      В разделе Библиотека кодов очередной пример суммы прописью.
      В Хитрости добавлена одна хитрость: Как запретить ресайзинг формы, избегая мерцания.
      И в разделе Контролы добавлен один контрол для работы с треем.
    • 26 октября 2001 года - В разделе Статьи появилась статья "Взаимодействие ADO Data Control и DataGrid ActiveX Control".
      Два новых примера в разделе Примеры
      Вышел тринадцатый выпуск рассылки
    • 19 октября 2001 года - Пополнение в Хитростях. Добавлено 4 хитрости.
      Давненько не обновлял раздел Windows Api. Сегодня добавил десяток описаний функций в этот раздел.
      В библиотеке кодов один новый код.
      В примерах тоже пополнение.
      И напоследок - добавлена статья Классы в Visual Basic.


    наверх


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

       28 октября 2001 г. Представляю очень интересную статью: Динамическое создание ДТС-пакетов с помощью VB. Автор работы Андрей Чувахин. В статье показывается программное решение конкретной задачи по копированию данных из таблицы формата ДБФ в базу данных MS SQL Server.
       27 октября 2001 г. Сегодня совсем мало обновлений, очень занят. Представляю пример в разделе Примеры как отправить письмо по электронной почте с помощью WinSock. Пример очень интересный, так как позволяет работать с почтой без использования программ посредников.
       21 октября 2001 г. Новый сайт про ЭТО Технологии Программирования - Visual Basic, обязательно загляните. Для новичков в разделе Примеры как сделать калькулятор. В Советах можно узнать как открывается CD-ROM. В ActiveX очень хороший контрол для работы с анимационными GIF.
       15 октября 2001 г. Здравствуйте, любители Visual Basic! Сегодня совсем мало обновлений. В Примерах можно посмотреть интересный пример: как сохранить картинку в формате GIF и загрузка файлов с FTP сервера. Мало? Сам знаю, что мало, но ничего не поделаешь, нет времени.

    наверх


    Выбор элемента листбокса в момент прохода над ним мышки

    На пустую форму положите листбокс и текстбокс. Ну и этот код, конечно

    Option Explicit

    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
    Private Const LB_ITEMFROMPOINT = &H1A9

    Private Sub Form_Load()
    With List1
       .AddItem "Hello World"
       .AddItem "Hello Again"
       .AddItem "Just Example "
    End With
    End Sub

    Private Sub List1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

    Dim xPosition As Long
    Dim yPosition As Long
    Dim i As Long
    If Button = 0 Then ' если никакие кнопки не нажаты
       xPosition = CLng(X / Screen.TwipsPerPixelX)
       yPosition = CLng(Y / Screen.TwipsPerPixelY)
       With List1
          ' взять выбранный элемент из листа
          i = SendMessage(.hwnd, _
          LB_ITEMFROMPOINT, 0, ByVal _
          ((yPosition * 65536) + xPosition))
          'подсветить подсказку к элементу
          If (i >= 0) And _
          (i <= .ListCount) Then
             .ToolTipText = .List(i)
             Text1.Text = .List(i)
          Else
             .ToolTipText = ""
          End If
       End With
    End If
    End Sub

    наверх


    Заменяем системные цвета на свои собственные

    На пустую форму положите этот код

    Option Explicit
    Private Declare Function SetSysColors Lib "user32" _
    (ByVal nChanges As Long, lpSysColor As _
    Long, lpColorValues As Long) As Long

    Private Declare Function GetSysColor& Lib "user32" (ByVal nIndex As Long)


    'Можно использовать следующие константы

    Private Const COLOR_SCROLLBAR = 0 'The Scrollbar colour
    Private Const COLOR_BACKGROUND = 1 'Colour of the background with no wallpaper
    Private Const COLOR_ACTIVECAPTION = 2 'Caption of Active Window
    Private Const COLOR_INACTIVECAPTION = 3 'Caption of Inactive window
    Private Const COLOR_MENU = 4 'Menu
    Private Const COLOR_WINDOW = 5 'Windows background
    Private Const COLOR_WINDOWFRAME = 6 'Window frame
    Private Const COLOR_MENUTEXT = 7 'Window Text
    Private Const COLOR_WINDOWTEXT = 8 '3D dark shadow (Win95)
    Private Const COLOR_CAPTIONTEXT = 9 'Text in window caption
    Private Const COLOR_ACTIVEBORDER = 10 'Border of active window
    Private Const COLOR_INACTIVEBORDER = 11 'Border of inactive window
    Private Const COLOR_APPWORKSPACE = 12 'Background of MDI desktop
    Private Const COLOR_HIGHLIGHT = 13 'Selected item background
    Private Const COLOR_HIGHLIGHTTEXT = 14 'Selected menu item
    Private Const COLOR_BTNFACE = 15 'Button
    Private Const COLOR_BTNSHADOW = 16 '3D shading of button
    Private Const COLOR_GRAYTEXT = 17 'Grey text, of zero if dithering is used.
    Private Const COLOR_BTNTEXT = 18 'Button text
    Private Const COLOR_INACTIVECAPTIONTEXT = 19 'Text of inactive window
    Private Const COLOR_BTNHIGHLIGHT = 20 '3D highlight of button

    Dim OldColor As Long

    Private Sub Form_Load()
       'Эапоминаем текущий цвет
       OldColor = GetSysColor(COLOR_ACTIVECAPTION)

       SetSysColors 1, COLOR_ACTIVECAPTION, RGB(255, 0, 0)
    End Sub

    Private Sub Form_Unload(Cancel As Integer)
       'Восстанавливаем текущий цвет
       SetSysColors 1, COLOR_ACTIVECAPTION, OldColor
    End Sub

    наверх


    Как убрать программу из списка Ctrl-Alt-Del

    Чтобы сделать это, вам нужно зарегестрировать программу как сервис. Это делается следующими API-функциями:

    Вставьте этот код в раздел общих описаний (General Declarations)

    Public Declare Function GetCurrentProcessId _
    Lib "kernel32" () As Long
    Public Declare Function GetCurrentProcess _
    Lib "kernel32" () As Long
    Public Declare Function RegisterServiceProcess _
    Lib "kernel32" (ByVal dwProcessID As Long, _
    ByVal dwType As Long) As Long
    Public Const RSP_SIMPLE_SERVICE = 1
    Public Const RSP_UNREGISTER_SERVICE = 0

    Чтобы убрать вашу программу из списка Ctrl+Alt+Delete list, используйте процедуру MakeMeService:

    Public Sub MakeMeService()
    Dim pid As Long
    Dim reserv As Long
    pid = GetCurrentProcessId()
    regserv = RegisterServiceProcess(pid, RSP_SIMPLE_SERVICE)
    End Sub

    Чтобы показать вашу программу в списке Ctrl+Alt+Delete, используйте процедуру UnMakeMeService:

    Public Sub UnMakeMeService()
    Dim pid As Long
    Dim reserv As Long
    pid = GetCurrentProcessId()
    regserv = RegisterServiceProcess(pid, _
    RSP_UNREGISTER_SERVICE)
    End Sub

    Не забудьте дерегистрировать вашу программу, как сервис, чтобы освободить системные ресурсы, используя UnMakeMeService.



    наверх


    Как запретить ресайзинг формы, избегая мерцания?

    Я, Медведев Александр, изобрел очень простой способ избавиться от мерцания при запрещении ресайза формы:

    Private Sub Form_Resize()
    Me.Move 0,0,3600,3600
    End sub

    Мой способ позволяет не использовать API со множеством лишних слов :)))
    Как говорится, все гениальное просто.

    Private Sub Form_Resize()
    Me.Enabled = False
    Me.Enabled = True
    End Sub

    наверх


    Книги

    Visual Basic 6.0 ( Руководство для программистов )

    Фотография книги Язык программирования Visual Basic - мощный инструмент разработки приложений для 32-разрядных систем Windows 95 и Windows NT.
    В книге рассматриваются как фундаментальные понятия и темы, так и сложные вопросы, адресованные профессиональным программистам.

    Нет данных по автору(ам), «БХВ - Санкт-Петербург» — 2000, 959 стр.
    248,19 руб. - 5% = 235.6 руб.

    SQL (Полное руководство)

    Фотография книги Второе издание существенно расширенное и обновленное описание языка SQL, являющегося основным инструментом работы с реляционными базами данных.

    Д. Р. Грофф, «СПАРРК, Издательская группа BHV» — 2001, 816 стр.
    343,08 руб. - 5% = 325.85 руб.


    наверх


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

    Windows

       
    Windows, как много в этом слове… Группа, предназначенная для решения любых проблем и вопросов, возникающих при работе с операционными системами семейства MS Windows.

    Подписаться

    Советы от сНежного

       
    Маленькие полезные советы и обмен скрытыми и недокументированными фичами, фишками, фенечками и прибамбасами в ОС, программах и железе.

    Подписаться

    наверх


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

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

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

    наверх



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

    BalloonMessage for MS Agent

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

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


    наверх


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

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

    Вопросы:


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

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

       Может кто-то подскажет, как можно автоматизировать отправку факсом "аксес репорт" или "кристал репорт" с помощью VB. Сам не видел, но говорят, что это возможно.


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

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

       Вопрос такой - как из программы сжать базу ACCESS - удалить физически все удаленные записи.


    Автор вопроса: Олег Чижов

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

       Как в VB организовать передачу данных по сети (например, по протоколу TCP/IP)?


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

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

       Товарищи!!! Очень нужен ОСХ типа таблички но не стандартный и чтобы умел работать со стандартной Данные.


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

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

       Как добавить в Intenet Explorer свой toolbar (kak Google)?


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

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

       Как в VB подключить сетевой диск.


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

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

       Как под Access ия программного кода сжать баяу данных.


    Автор вопроса: Moiseev@SPB.MMBANK.ru

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

       Нужно сделать редактор временных диаграмм для цифровых устройств - некий цифровой осциллограф. Одиночные сигналы, шины, получения среза в определенный момент и т.д. и т.п. Очень не хочется тратить свое время на ваяние. Подскожите может есть библиотечки сильно могущие помочь в этом нелегком ратном деле. Если знаете отклинитесь. Можно для любой Windows системы разработки.


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

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

       Помогите, граждане! Нужно мерить напряжение 40 Гц, подаваемое на линейный вход звуковой карты. Как это сделать?
       Нашёл прогу - используется микрофонный вход, но как заставить измерять с линейного - не могу разобраться. Нигде в сети не нашёл полного справочника по API, да и вряд ли быстро разберусь - чайник истчо.
    Спасибо сочувствующим :)




    Ответы:


    Вопрос:

       Вы не подскажите как научить VB копировать каталоги и работать с архиватором.
    Я только начинаю работать с VB и хотел написать программу резервного копирования.

    Ответ:

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

    Я конечно посоветовал бы начинать с чего-нибудь попороще, но с другой стороны надо же когда-то начинать делать и что-то посложнее! :)
    Работать с каталогами в ВБ не просто, а очень просто. Для этого достаточно подключить к проекту библиотеку Microsoft Scripting Runtime (если в списке библиотек, который выпадает при нажатии в меню "Project" пункта "References..." такого названия нет, но надо нажать там же кнопку "Browse" и вручную найти файл c:\windows\system\scrrun.dll)
    После подключения библиотеки в программе можно оперировать переменными типа Folder, File и т.п. Самое главное -- для доступа ко всем этим объектам сначала надо создать объект FileSystemObject :

    '...
    Dim fso As FileSystemObject
    Dim iFolder As Folder
    '...
    Set fso = New FileSystemObject
    Set iFolder = fso.GetFolder("полное_имя_каталога")
    iFolder.Copy "путь_для_резервной_копии"
    '...
    Set iFolder = Nothing
    Set fso = Nothing
    '...

    Вобщем крайне полезная библиотека для работы с объектами файловой системы.
    Вот с архивированием дело обстоит сложнее. Можно пользоваться предположим консольным архиватором, запуская его с помощью команды Shell из VB или используя API-функции (что в принципе надежнее, но для начала сложновато):

    '...
    Dim filesToArc As String
    '...
    filesToArc = "какой-то_путь" & "*.doc"
    Shell "arj a " & filesToArc & " полное_имя_архива.arj", vbHide
    Параметр vbHide нужен, чтобы не показывать юзеру окно архиватора.

    Есть еще вариант с объявлением внешней функции из dll установленного архиватора, например, WinZip'а, в библиотеке WZ32.DLL которого имеются следующие функции:

    DragAppendFile
    DragCreateFiles
    WZ56
    uncompress
    uncompress_init
    unzip
    unzip_init
    zip
    zip_init
    ziplabelDiskette
    zipmemcompress
    zipsplit
    zipwipeDiskette

    Я так думаю, что функции zip и unzip -- это то, что нужно, но с какими параметрами их запускать, а следовательно и как объявлять их в модуле, я к сожалению не знаю. И еще можно предложить самому написать код для архивирования по известному алгоритму (думаю в И-нете можно довольно просто найти кучу таких алгоритмов с примерами кода)


    Вопрос:

       Вы не подскажите как научить VB копировать каталоги и работать с архиватором.
    Я только начинаю работать с VB и хотел написать программу резервного копирования.

    Ответ:

    Автор ответа: Sergey Y. Tkachev

    Описывать то, как работать с каталогами я не буду - в сети полно статей по этому поводу, а вот архивация - это штука интересная. Когда-то я сам долго мучался этим вопросом, пока мне не подвернулись эти контролы, решающие все проблемы.
    http://vb-studio.boom.ru/controls/VFunzip.zip - Для раззипования.
    http://vb-studio.boom.ru/controls/VFzip.zip - Для зипования


    Вопрос:

       Не могу найти, что нужно и как писать код для ловли всех (или почти всех) прерываний от клавиатуры и работы с ними.

    Ответ:

    Автор ответа: Стас

    Думаю, может помочь такая вещь, как subclassing:
    Я в интернете нашел контрол msghook.ocx , который ловит API типа sendmessage(WM_что_угодно), только у него в свойствах надо указать, какие WM_... надо ловить и к каким окнам (в т.ч. контролам) они должны быть адресованы.
    После чего всякий раз при возникновении этого sendmessage() запускается событие для msghook и при его обработке можно выполнить свой код.


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

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

    наверх


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

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