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


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



Рассылки Subscribe.Ru
VB.NET-World
Новости сайта IgorykSoft и советы по программированию
DanSoft о Visual Basic
Visual Basic.NET Уроки.

Ссылки:

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

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

       Свежий выпуск. Извините, что задержался...
    Читайте!


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




    Citycat by Email

       Программа Citycat by Email позволяет работать с сервером Subscribe.ru с помощью электронной почты. Теперь Вам не нужно тратить деньги на работу в online и просматривать мегабайты рекламы для того, чтобы подписаться на нужную рассылку! Вам просто необходимо скачать небольшую базу данных по всем рассылкам каталога с нашего сайта, после чего Вы сможете подписываться и отписываться от рассылок, заказывать архивы прошлых выпусков, выполнять поиск по каталогу рассылок и многое другое.
       Программу Citycat by Email можно бесплатно загрузить с сайта http://sapisoft.h1.ru.

    наверх


    Новости сайта VBNet

    Дата: 22.10.2003 13:31 | Раздел: Статьи по VB | Автор: Max V. Irgiznov

    Создание плагина для Winamp - Данная статья расскажет вам о том, как можно создавать свои плагины для популярного мультимедиа плеера Winamp.

    Дата: 21.10.2003 11:25 | Раздел: Статьи по VB | Автор: Любченко Вячеслав

    О борьбе с рекурсией - Внимание к языкам функционального и логического программирования (ФП и ЛП) не уменьшается. В этом убеждает недавнее появление языков программирования типа Haskell, а также развитие языков Prolog, ФП и ЛП. Но как бы в противовес этому не ослабевает интерес и к приемам устранения рекурсии. Чем же объясняются столь противоречивые тенденции?

    Дата: 20.10.2003 21:06 | Раздел: Примеры кода | Автор: Gevorg

    ColorButtons - От User Unknown: при старте немного заглючила в дебаге. Закомментировав кусок кода - запустил. Работает. Красивенько:).

    Дата: 20.10.2003 11:24 | Раздел: Статьи по VB | Автор: Немец Евгений

    Приемы взаимодействия Visual Basic и SQL - При создании приложений, оперирующих базами данных, нередко возникают проблемы, связанные с организацией взаимодействия языка программирования с языком SQL. В статье раскрываются приемы использования SQL-запросов при работе Visual Basic 6.0 с библиотекой Microsoft DAO 3.51 Object Library.

    Дата: 19.10.2003 11:24 | Раздел: Статьи по VB | Автор: Богатырев Руслан

    Премьера Visual Studio .NET: Microsoft и Sun в битве Web-сервисов - Первые месяцы 2002 г. охарактеризовались новым важным витком борьбы между корпорациями Microsoft и Sun за мировое лидерство. Цель объявлена: это всепроникающие Web-сервисы. Средства тоже известны: операционные платформы Microsoft .NET и Sun ONE, а также языковые платформы Microsoft .NET Framework и Java 2 Platform (включая Micro Edition, Standard Edition и Enterprise Edition).



    Последние 20 тем форума на VBNet.Ru:

    08:00 / 26 окт.  Автономная работа браузера | Хитов: 2 |  Ответов: 0
    02:08 / 26 окт.  Люди, у кого-нибудь есть полнофункциональный пр... | Хитов: 3 |  Ответов: 0
    21:58 / 25 окт.  Самое страшное слово - ДОКУМЕНТАЦИЯ | Хитов: 9 |  Ответов: 0
    19:31 / 25 окт.  копирование файлов по маске | Хитов: 9 |  Ответов: 1
    18:44 / 25 окт.  Вопрос про ФИДО | Хитов: 6 |  Ответов: 0
    18:38 / 25 окт.  Помогите начинающему Web-программисту!!! | Хитов: 14 |  Ответов: 1
    16:03 / 25 окт.  MAPI | Хитов: 7 |  Ответов: 0
    13:38 / 25 окт.  Automation | Хитов: 12 |  Ответов: 1
    13:06 / 25 окт.  Новый язык программирования | Хитов: 28 |  Ответов: 5
    12:57 / 25 окт.  Продолжительность работы любой программы | Хитов: 18 |  Ответов: 1
    12:00 / 25 окт.  Медленно Webbrowser работает | Хитов: 6 |  Ответов: 0
    23:01 / 24 окт.  Обновление IE | Хитов: 34 |  Ответов: 1
    22:33 / 24 окт.  ADODC.Recordet->DataGrid | Хитов: 20 |  Ответов: 2
    20:23 / 24 окт.  ЧАТ на Winsock(е) ???? | Хитов: 31 |  Ответов: 2
    17:59 / 24 окт.  Работа с папками | Хитов: 57 |  Ответов: 12
    17:55 / 24 окт.  Как сжать базу на веб-сервере? | Хитов: 13 |  Ответов: 0
    17:45 / 24 окт.  Сжать базу на сервере | Хитов: 15 |  Ответов: 0
    17:19 / 24 окт.  Скролинг програмного кода при помошо колесика мыши | Хитов: 30 |  Ответов: 1
    17:10 / 24 окт.  VBRKit | Хитов: 28 |  Ответов: 5
    16:37 / 24 окт.  про MSFLEX и .FixedCols | Хитов: 17 |  Ответов: 1


    Последние поступления в Библиотеку кодов:

    Конвертирование цветной картинки в черн...
    Как получить размер папки


    наверх


    Новости сайта MSDN



    наверх


    Новости сайта GotdotNet



    Новые статьи:



    наверх


    Новости сайта dotSite

    Новые статьи:



    Новые примеры:



    наверх


    Один момент из жизни форума: Прозрачность

    Вопрос:
    Автор вопроса: Артём Л.

       .NET.

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


    Ответы:

    Автор: Павел
       Попробуй поставить у контрола BackColor с нужным значением компоненты Alpha (прозрачность).

    Автор: SAVok
       Действительно, управление прозрачьностью осуществляется Alpha компонентом цвета. Но только надо помнить, что не все ОС поддерживают прозрачность.



    наверх


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

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

    Вопросы:


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

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

       Можно ли как - нибудь убрать выбранные байты из файла не перезаписывая весь файл?
    Например:

    1111
    2222
    3333

    Как убрать 2222 чтобы в файле получилось

    1111
    3333

    ?


    Автор вопроса: Роганов Владимир

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

       Я пишу прогу и она занимает 1.93 МВ. Когда я запаковываю туда, с помощью VB-PowerWrap1.7, OCX и dll-ы, то размер становится 3.34 МВ, при архивировании WinRar-ом, размер становится 3.31 МВ. Кто может, подскажите любые методы, чтобы как можно сильнее уменьшить размер!


    Автор вопроса: Максим Гаранин

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

       Как на vb.net осуществить чтение данных из текстового файла? Никак не могу найти аналог команды vb6: input #1, var1, var2 и т.д. Процедуры из классов StreamReader и BinaryReader не помогают.


    Автор вопроса: C...R...a...S...H

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

       У меня на форме куча textbox`ов, данные в них связаны.
    Например:

    txtName(0) - имя '
    txtSoName(0) - фамилия ' это все как-бы ячейка
    txtLastName(0) - отчество '
    'и так повторяется до 62
      
    Вопросы такие:
    1. Как мне реально сделать Отмену последнего действия (причем отменяется во всей ячейке)?
    2. Как сделать, чтобы можно было выделять несколько ячеек и получить из них данные?


    P.S. Прим. Павла: господа, может нам в рассылке раздел обучения русскому языку открыть? Я уже устал править сообщения местных "грамотеев"!


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

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

       Каким образом можно добраться из программы на VB6 до изменения формата ячеек в Excel? При передаче информации типа 01/03 Excel воспринимает ее как дату, а необходимо, чтобы она воспринималась как текст.


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

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

       Что возвращает функция VarPtr?


    Автор вопроса: Сан Саныч

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

       Как скопировать из одномерного массива типа byte в переменную типа IPictureDisp, или в контейнер PictureBox?
    Лучше если это будет при помощи АПИ.


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

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

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

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


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

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

       Как определить, установлен ли в системе принтер, и если установлен, то в каком он находится состоянии - "вкл." или "выкл". Если можно, то кусок кода.


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

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

       Access2000. Как динамически вкл\выкл доступ к пункту меню, в зависимости от моих условий?


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

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

       Access2000.
    DoCmd.MoveSaiz [right][, down][, width][, height]
    Как определить максимальные значения [right][, down][, width][, height] ?


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

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

       Можно ли в TextBox выделить не все, а несколько знаков? К примеру 4-ый и 5-ый справа?




    Ответы:


    Вопрос:

       Функция Time() возвращает время на компьютере, а как можно получить время на другом компе в локальной сети?

    Ответ:

    Автор ответа: Роман

    В командной строке набрать NET TIME /? и увидишь инфу.


    Вопрос:

       Существует кем-то написанная программа, работающая в фоновом режиме, хочу послать ее окну комбинацию клавиш:
    Shift+a, ctrl+a, alt+a (a – для примера). Знаю hwnd этого окно, пробовал при помощи sendmessage, но посылается только отдельная клавиша, а как комбинацию послать не знаю

    Ответ:

    Автор ответа: Роман

    По-моему нужно отсылать константу типа VK_SHIFT (смотри а API) следующим образом: VK_SHIFT OR CHR$(клавиша).


    Вопрос:

       Возвращаясь к напечатанному:

    Отвечал: Alexander
    Чует моё сердце, что пытаетесь менять данные в полях БД с атрибутами числовой/логический. Это так?
    В таком случае для испольяуются объекты StdDataValue, StdDataFormat, а не только Textbox.
    Данные меняются и в полях с атрибуто- текстовый, обновления все равно нет. Можно ли по-подробнее про объекты StdDataValue, StdDataFormat?

    Ответ:

    Автор ответа: Александр

    Итак,
    а) данные меняются и в полях с атрибутом "текстовый", обновления все равно нет.
    Рекомендации:
    - проверить, что данное текстовое поле опирается на Recordset не с атрибутом "только для чтения",
    - проверить, что присвоено .DataField имя поля, присутствующее в Recordset
    - изменения базы данных не проводятся до тех пор, пока мы не уйдём с поля, например, на кнопку "ОК", поэтому для форсирования события можно, например, в событии _Change сделать так:

           rs.Update "MyTextField", TextBox1.Text

    Это редкий случай. Т.к., как правило, на форме несколько полей и кнопок. Поэтому анализ делается, к примеру, когда Form_Unload или <что-то>_LostFocus:

        If rs.EditMode = adEditInProgress Then
           rs.UpdateBatch adAffectAllChapters
         ...
        End If

    б) касательно StdDataValue, StdDataFormat. Легче на стандартном примере: если какое-то логическое поле имеет значение True, то выдать "Да", иначе - "Нет".
    В "References" проекта поставим галочку напротив "Microsoft Data Formatting Object Library 6.0 (SP4)"
    В программе, где оформляем DataGrid1, обычно Form_Load(), припишем:

              Set fmtBooleanData = New StdDataFormat
              fmtBooleanData.Type = fmtBoolean
              fmtBooleanData.TrueValue = "Да"
              fmtBooleanData.FalseValue = "Нет"
              fmtBooleanData.NullValue = ""
              Set DataGrid1.Columns(index).DataFormat = fmtBooleanData

    index - номер столбца, который надо так отобразить.

    Результат не заставит себя долго ждать :-)
    Естественно, это можно связать с событием _Button. Т.е. как заблагорассудится.
    Остальное - в MSDN или MVP.org.


    Вопрос:

       На форме есть RichTextBox. Как узнать скорость ввода символов?

    Ответ:

    Автор ответа: Максим

    31 соответствует наибольшему значению скорости повтора, 0 - наименьшему.

    Const SPI_GETKEYBOARDSPEED = 10
    Private Declare Function SystemParametersInfo Lib "user32" Alias
    "SystemParametersInfoA" _
    (ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any, ByVal
    fuWinIni As Long) As Long
    Private Sub Form_Load()
    Dim r As Long
    q = SystemParametersInfo(SPI_GETKEYBOARDSPEED, 0, r, 0)
    MsgBox "Скорость повтора = " & r & " символ в секунду"
    End Sub



    Ответ:

    Автор ответа: Максим

    Может быть это подойдет.

    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal
    bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    'bVk - Виртуальный код клавиши для имитации нажатия и отпускания клавиши.
    'bScan - Зарезервировано -- установлено в 0.
    'dwFlags - Комбинация следующих флагов определяет различные способы имитации:
    'KEYEVENTF_EXTENDEDKEY - Префикс скэн-кода с префиксным байтом, имеющим значение &HE0.
    'KEYEVENTF_KEYUP - Клавиша, указанная в bVk будет отпущена. Если этот флажок не определен, клавиша будет нажата.
    'dwExtraInfo - Дополнительное 32-разрядное значение, связанное с событием клавиатуры.
    Const KEYEVENTF_KEYUP = &H2 'событие отпускания клавиши
    Const VK_ADD = &H6B 'клавиша +
    Const VK_CONTROL = &H11 'клавиша Ctrl
    Const VK_TAB = &H9 'клавиша Tab
    Const VK_MENU = &H12 'клавиша Alt
    Const VK_ESCAPE = &H1B 'клавиша Escape
    Const VK_LWIN = &H5B 'левая клавиша, эмулирующая нажатие кнопки ПУСК
    Private Sub ShowStartMenu()
    'Функция эмулирует нажатие Ctrl + Esc
    Call keybd_event(VK_CONTROL, 0, 0, 0) 'Hажимаем Ctrl
    Call keybd_event(VK_ESCAPE, 0, 0, 0) 'Hажимаем Esc
    Call keybd_event(VK_ESCAPE, 0, KEYEVENTF_KEYUP, 0) 'Отпускаем Esc
    Call keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0) 'Отпускаем Ctrl
    End Sub

    Коды клавиш в объектбраузере.
    Но окно должно быть активно.


    Вопрос:

       Как красивее написать следующее условие:
      Если NameVariable = 0 или NameVariable = 1 или NameVariable = 2 или NameVariable = 3 или NameVariable = 1000 ...и т.д.
    (Переменная одна, а значений, при которых это условие должно выполнятся, может быть ооооооочень много).

    Ответ:

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

    dim i as integer
    dim Vtest as Variant
    Vtest =array(1,25,49,2015,3.62)'Массив проверяемых значений
    for i=lbound(Vtest ) to ubound(Vtest )
    if Name_ariable=Vtest(i) then
         ....
         exit function
    end if
    next i


    Вопрос:

       1. Как различить нажатие левой и правой клавиши Ctrl ( Shift, Alt). В программе мне необходимо выполнить два разных действия при нажатии левой или правой клавиши?
    2. Аналогично, как различить нажатие Enter и Enter дополнительной клавиатуры?

    Ответ:

    Автор ответа: Максим

    Ну, в общем, ответ про то, что в vb6 этого нет, а в .net есть, банальный...
    На всякий случая для .net: в обработчике события keyup или down, в e.Modifiers.



    Ответ:

    Автор ответа: Александр Шелапугин

    По 2 вопросу: в VB есть константы, соответствующие кодам клавиш:

    vbKeyReturn =
    vbKeySeparator = Но эта константа не работает!!!
      
    Решение проблемы есть в MSDN (статья "BUG: vbKeySeparator Constant Does Not Work"), пример оттуда:
      
    Добавьте код в Form1
      
      Private Declare Function PeekMessage Lib "user32" Alias _
             "PeekMessageA" (lpMsg As MSG, ByVal hwnd As Long, _
             ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, _
             ByVal wRemoveMsg As Long) As Long

           Private Type POINTAPI
              x As Long
              y As Long
           End Type

           Private Type MSG
              hwnd As Long
              message As Long
              wParam As Long
              lParam As Long
              time As Long
              pt As POINTAPI
           End Type

           Const PM_NOREMOVE = &H0
           Const WM_KEYDOWN = &H100
           Const WM_KEYUP = &H101
           Const VK_RETURN = &HD

           Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
           Dim MyMsg As MSG, RetVal As Long

           ' pass:
           ' MSG structure to receive message information
           ' my window handle
           ' low and high filter of 0, 0 to trap all messages
           ' PM_NOREMOVE to leave the keystroke in the message queue
           ' use PM_REMOVE (1) to remove it
           RetVal = PeekMessage(MyMsg, Me.hwnd, 0, 0, PM_NOREMOVE)

           ' now, per Q77550, you should look for a MSG.wParam of VK_RETURN
           ' if this was the keystroke, then test bit 24 of the lparam - if ON,
           ' then keypad was used, otherwise, keyboard was used
           If RetVal <> 0 Then
              If MyMsg.wParam = VK_RETURN Then
                 If MyMsg.lParam And &H1000000 Then
                    MsgBox "Enter from Keypad pressed"
                 Else
                   MsgBox "Enter from Keyboard pressed"
                 End If
           End If
           Else
           MsgBox "No message waiting, or possible problems calling PeekMessage"
           End If
           End Sub

    Запустите проект и нажимайте обе клавиши ENTER.


    Вопрос:

       Подскажите, как достучаться до динамически созданного контрола.
    Я динамически добавил на форму CombBox. Как теперь получить к нему доступ: произвести чтение, проверить есть ли он вообще.
    В Васике 6.0 можно было создавать массив элементов, и обращаться к ним через индексы, а как это же сделать в NET'e.

    Ответ:

    Автор ответа: Максим

    Нужно добавлять обработчик собятия.
    AddHandler.


    Вопрос:

       Как с помощью модема соедениться с двумя машинами и передать файл (на VB6)?

    Ответ:

    Автор ответа: C...R...a...S...H

    В MSDN есть sample работы с mscomm.ocx, называется vbterm.



    Ответ:

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

    Если устоновлен MSDN то посмотри по этому пути: "Program Files\Microsoft Visual Studio\MSDN\2001JAN\1033\SAMPLES\VB98\Mscomm".


    Вопрос:

       Как проигрывать звук циклически без всяких там контролов, только средствами Win API и VB?

    Ответ:

    Автор ответа: Vladimir [PRC]

    Для WAV файлов можно поступить так:
      
    Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long
    Private Const SND_FILENAME = &H20000 ' name is a file name
    Private Const SND_SYNC = &H0 ' play synchronously (default)
    Private Const SND_ASYNC = &H1 ' play asynchronously
    Private Const SND_LOOP = &H8 ' loop the sound until next sndPlaySound
    PlaySound "ИМЯ ФАЙЛА.WAV", 1, SND_FILENAME Or SND_ASYNC Or SND_LOOP

    При этом необходимо:
    1. После воспроизведении другого звука перезапускать файл
    2. При завершении работы программы остановливать звук


    Вопрос:

       Как на VB получить системную переменную?
    Мне конкретно нужна переменная, в которой хранится полный путь к временной дирректории (temp). Полагаю, нужно использьзовать WINAPI, но какую ф-ю не знаю. Может кто делал и поделится инфой, можно и примерчиком маленьким.

    Ответ:

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

       Dim TempDir As String
       TempDir = VBA.Environ ("temp")

       А вот более навороченая функция. Возвращает кучу всяких переменных с учетом типа ОС.

    Private Declare Function SHGetSpecialFolderLocation Lib "shell32" (ByVal hwndOwner As Long, ByVal nFolder As Integer, ppidl As Long) As Long
    Private Declare Function SHGetPathFromIDList Lib "shell32" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal szPath As String) As Long
    Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long

    Public Enum DIRS
         [Desktop] = 0
         [Programs] = 2
         [Windows] = 36
         [Windows9x] = 101
         [System] = 37
         [temp] = 100
    End Enum

    Public Const MAX_PATH As Byte = 255

    Public Function GetSysFolder(ByRef ForDir As DIRS) As String
         Dim sPath As String
         Dim lPath As Long
         Dim lReturn As Long
         Dim lPidl As Long

         sPath = Space$(MAX_PATH)
         If ForDir = [temp] Then
             lPath = GetTempPath(256, sPath)
             lReturn = (lPath > 0)
    ' sPath = VBA.Environ$("temp")
         ElseIf ForDir = [Windows9x] Then
             sPath = VBA.Environ$("windir")
             lReturn = 1
         Else
             lReturn = SHGetSpecialFolderLocation(0, ForDir, lPidl) ' Get lPidl for Id...
             If lReturn = 0 Then ' If success is 0
                 lReturn = SHGetPathFromIDList(lPidl, sPath) ' Get Path from Item Id List
             End If
         End If
         If lReturn Then ' If success
             sPath = Trim$(sPath) ' Fix path string
             lPath = Len(sPath) ' Get length of path
             If lPath = 0 And ForDir = [Windows] Then sPath = VBA.Environ$("windir")
             If lPath > 0 Then
                 If Asc(Right$(sPath, 1)) = 0 Then lPath = lPath - 1 'Adjust path length
                 sPath = Left$(sPath, lPath)
                 If Right$(sPath, 1) <> "\" Then sPath = sPath + "\"
             End If
         Else
             sPath = ""
         End If
         GetSysFolder = sPath
    End Function



    Ответ:

    Автор ответа: Vladimir [PRC]

    Читайте MSDN, раздел ENVIRON:
      
    Dim Indx, EnvString
    Indx = 1
    Do
         EnvString = Environ(Indx) ' Get environment variable.
         If Left$(EnvString, 4) = "TEMP" Or Left$(EnvString, 3) = "TMP" Then
             
         ' EnvString содержит полный путь к каталогу Temp или TMP
         ' Типа: TEMP=C:\WINDOWS\TEMP или
         ' TMP=C:\DOCUME~1\Админ~1\LOCALS~1\Temp
      
         End If
         Indx = Indx + 1
    Loop Until EnvString = ""



    Ответ:

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

    Declare Function GetTempPath& Lib "kernel32" Alias "GetTempPathA" (ByVal _
    nBufferLength As Long, ByVal lpBuffer As String)
      
    nBufferLength Long—The length of the lpBuffer string.
    lpBuffer String—A preinitialized string to load with the temporary path.
      
    Daniel Appleman




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

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

    наверх


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

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