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


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

Голосования сайта VBNet.Ru. Результаты голосований передаются на сайт. Проследите, что есть соединение с интернетом.



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

Ссылки:

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

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

       Господа! Материалы для рассылки скоро закончаться! У кого есть хорошие коды, достойные появления на сайте VBNet.Ru и в этой рассылке, просьба присылать мне. Особенно буду рад кодам Visual Basic .Net.
    Читайте!


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




    Книги

    Переход на VB .NET. Стратегии, концепции, код (цена ~ 158 руб.)

    Эта книга была задумана как одна из первых книг о .NET, которая ознакомит читателя с основными идеями новой архитектуры и подготовит его к знакомству с более детальной литературой, например документацией Microsoft и ее толкованиями, которая неизбежно появится на рынке. Она поможет вам взглянуть на эту технологию с позиций ваших собственных рабочих планов и быстро освоить те концепции, которые покажутся необычными для большинства прогр...

    Автор(ы): Дан Эпплман, Издательство: Питер, 2002 г.


    Программирование на VB.NET. Учебный курс (цена ~ 119 руб.)

    Эта книга является вводным курсом по изучению языка программирования Visual Basic .NET. Даны основные принципы объектно-ориентированного программирования в контексте языка VB .NET, поскольку без хорошей подготовки в этой области невозможно в полной мере пользоваться всеми преимуществами VB .NET.
    Изложены азы всех аспектов языка, которыми должен владеть любой профессиональный разработчик VB .NET

    Автор(ы): Г. Корнелл, Дж. Моррисон, Издательство: Питер, 2002 г.


    VB.NET для разработчиков (цена ~ 125 руб.)

    Основная задача книги - быстро ознакомить разработчиков Visual Basic с изменениями в .NET Framework. Программисты, использующие Java, C++, Delphi или другие инструменты разработки приложений и интересующиеся Visual Basic или технологией .NET Framework, также найдут эту книгу полезной. Хотя книга посвящена Visual Basic.NET, ее основная цель - продемонстрировать взаимодействие Visual Basic и ...

    Автор(ы): Кит Франклин, Издательство: Вильямс, 2002 г.




    Остальные книги о VB можно найти здесь.

    наверх


    Как заблокировать стандартное контекстное меню

    Данный пример покажет, как можно заблокировать стандартное контекстное меню элемента TextBox. Расположите на форме TextBox, а также создайте невидимое меню mnuText и как минимум одно подменю. Запустите проект, нажмите правой клавишей мыши на TextBox'е...

    Private Declare Function LockWindowUpdate Lib "User32" (ByVal hwndLock As Long) As Long
    Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = vbRightButton Then
    LockWindowUpdate Text1.hWnd
    Text1.Enabled = False
    DoEvents
    PopupMenu mnuText
    Text1.Enabled = True
    LockWindowUpdate 0&
    End If
    End Sub

    наверх


    Изменение вида каретки

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

    В изменении вида каретки принимает участие API-функция CreateCaret

    Declare Function CreateCaret Lib "user32" (ByVal hwnd As Long, ByVal hBitmap As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long

    ByVal hwnd - обозначает хэндл окна, в котором меняется вид каретки
    ByVal hBitmap - обозначет цвет каретки
    ByVal nWidth - ширина каретки
    ByVal nHeight - высота каретки

    Следующий пример покажет различные способы изменения вида каретки

    Добавьте на форму 1 PictureBox и 3 TextBox'а. Загрузите в элемент PictureBox bmp-файл. Запустите проект на выполнение, нажимайте ТАБУЛЯТОР и смотрите, как меняется вид каретки.

    Private Declare Function CreateCaret Lib "user32" (ByVal hwnd As Long, ByVal hBitmap As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
    Private Declare Function ShowCaret Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function GetFocus Lib "user32" () As Long
    Private Sub Text1_GotFocus()
    h& = GetFocus&()
    b& = Picture1.Picture
    Call CreateCaret(h&, b&, 10, 10)
    x& = ShowCaret&(h&)
    End Sub
    Private Sub Text2_GotFocus()
    h& = GetFocus&()
    'Измените на ваше усмотрение цифры 15, 15, которые обозначают ширину и высоту каретки
    Call CreateCaret(h&, 0, 15, 15)
    x& = ShowCaret&(h&)
    End Sub
    Private Sub Text3_GotFocus()
    h = GetFocus()
    Call CreateCaret(h, 0, 3, 24)
    x = ShowCaret(h)
    End Sub

    наверх


    Запретить ввод определенных символов

    Private Sub Text1_KeyPress(KeyAscii As Integer)
    Dim sTemplate As String
    'Replace the '!@#$%^&*()_+=' какие символы игнорировать
    sTemplate = "!@#$%^&*()_+="
    If InStr(1, sTemplate, Chr(KeyAscii)) > 0 Then KeyAscii = 0
    End Sub

    наверх


    Как вернуться на то же место, при потере фокуса

    Dim x
    Private Sub Text1_GotFocus()
        On Error Resume Next
        Text1.SelStart = x
    End Sub
    Private Sub Text1_LostFocus()
        x = Text1.SelStart
    End Sub

    наверх


    Как очистить все TextBox'ы на форме

    Добавьте на форму несколько элементов TextBox и CommandButton

    Private Sub Command1_Click()
    Dim Contrl As Control
    For Each Contrl In Form1.Controls
    If (TypeOf Contrl Is TextBox) Then Contrl.Text = ""
    Next Contrl
    End Sub

    наверх


    Добавить новую линию в существующий текст элемента TextBox

    Добавить Command Button на форму

    Private Sub Command1_Click()
    Dim NewText As String
    With Text1
    'replace 'My New Text' with the Text you want to add
    NewText = "My New Text"
    .SelStart = Len(.Text)
    .SelText = vbNewLine & NewText
    End With
    End Sub
    Private Sub Form_Load()
    Text1.Text = "My Initial Text"
    End Sub

    наверх


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

    BalloonMessage for MS Agent

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

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

    наверх


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

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

    Вопросы:


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

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

       Как проиграть midi файл находящийся в файле ресурсов не сохраняя его на диск?


    Автор вопроса: I hate the fucking world

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

       Люди кто знает как определить серийный номера жесткого диска? Именно ЖД, о не логического диска С, D и т.д., т.к. после форматирования номера логических дисков изменяются.Очень срочно


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

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

       А возможно ли закрыть из VB окно сеанса ДОС?


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

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

       1) где взять MSDN на русском или хотя бы описание любых API-функций (на
    русском)
    2) Если на первый вопрос ответа нет, то помогите разобраться с функцией GetClassName(1,2,3). Первое яначение я знаю чё значит, а второе и третье
    нет. Помогите пожайлуста.
    3) Чё означает встроенная VB функция String$() и Left$()


    Автор вопроса: Daniel Zaharov

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

       Стоит задача создания «среды разработки» (возможно на VB), т.е. есть панель инструментов, взял нужный и поставил в нужном месте (как в VB, например). Кроме того, данная среда должна быть ориентирована на построение моделей, а именно один блок генерирует событие, другой –накапливает, третий – принимает на себя и т.д. Есть идея создать контролы, выполняющие данные функции. Может кто что посоветует, буду очень благодарен.


    Автор вопроса: Виталий

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

       Подскажите как сделать оформление в силе ХР под Win2k или в Win9x.


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

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

       Где можно раядобыть описание API-функций для реестра (желательно на русском)? И вообще есть какой-нить русскоязычный сайт посвящённый АПИ-функциям или где они рассматриваются?




    Ответы:


    Вопрос:

       Есть программа (ЕХЕ-файл) написаная мной как-то давненько. Все данные об этой прогрмамме утеряны. Есть ли возиожность каким то способом разобрать снова эту программу, для изменений. Если есть, намыльте как это делается.

    Ответ:

    Автор ответа: I hate the fucking world

    Просто, но тебе необходимо знать ASM на 50-99% ты ее просто дизасемблиш и смотриш код.



    Ответ:

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

    Единственный способ - это использовать дизассемблер, но там без знаний acm'а не обойтись. Ну можно еще попытаться найти утилиты для перевода кода ассемблера в VB, но я не уверен если для перевода в VB(в Delphi и С есть) и на 100% они тебе ничего не переведут. Так что лучше садись вспоминай что ты там напрограммил и пиши снова.


    Вопрос:

       1. В PictureBox, методом PaintPicture закинул рисунок. Как его сохранить в файл?
    2. Как получить свойства принтера. Т.е. вызвать родное окно с его родными свойствами?

    Ответ:

    Автор ответа: Саша Карамнов

    SavePicture ИмяОбъекта.Picture, "ПутьСКонечным файлом"

    Пример:

    SavePicture Picture1.Picture, "C:\Picture.bmp"


    Вопрос:

       1. Как сделать так, чтобы какое-нибудь событие сопровождалось звуком, например при щелчке по кнопки раздавался сигнал.
    2. Не могу понять, как пользоваться элементом ProgressBar, мне надо, чтобы через каждые 10 секунд прибавлялось одно деление.

    Ответ:

    Автор ответа: I hate the fucking world

    На форму ставиш таймер с интервалом 10000 в коде пишеш

    progressbar1.value=progressbar1.value+1

    и все


    Вопрос:

       Я еще новичек в VB, поэтому можетэто и глупый вопрос, но как обратиться к элементу строки стоящим под n-ым номером?

    Ответ:

    Автор ответа: Nechaev Sergey

    Чтобы получить символ N из строки надо использовать функцию Mid

    Mid(строка, начало извлекаемой подстроки, ее длина)

    Например дана строка Привет

    Mid("Привет", 3, 2)

    даст подстроку "ве" (я мог ошибиться но примерно так)
    Чтобы получить энный символ укажи Начало=N, длинна=1.



    Ответ:

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

    Просто используй функцию Mid. Ее синтаксис:

    Mid(строка, начало выделения, длина выделения)

    То есть если тебе надо обратиться например к 10 элементу строки stroka ты пишешь:

    Mid(stroka, 10, 1)

    Этим ты выделишь один 10 элемент строки stroka.



    Ответ:

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

    newstr = mid(yourstr,n,m)

    newstr - фрагмент строки
    yourstr - исхдная строка
    n - с какого символа (по счету) начинать вырезать
    m - сколько символов вырезать

    Пример:

    yourstr="Никомунекабельность"
    newstr=mid(yourstr,4,6)
    Print newstr 'newstr="омунек"



    Ответ:

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

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

    Обратиться к n-ому элементу в массиве:

          strText=strArray(n)

          где
          StrText - переменная, в которую поместится текст
          atrArray - массив переменных

    Обратиться к n-ому элементу в ListBox'е:

          strText=lstText.list(n)

          где
          strText - переменная, в которую поместится текст
          lstText - твой ListBox
    Внимание! нумерация начинается с 0
          
    Если ты не нашел ответа на свой вопрос, можешь написать мне - Artyom_kr@mail.ru. Рекомендую подписаться к конференции СообЧа - VB. Там тебе дадут ответы на все твои вопросы. Подписать ся можно, отправив пустое письмо по этому адрессу: VB-on@soobcha.org



    Ответ:

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

    Функция Mid.


    Вопрос:

       Где можно вяять инфу по работе с DirectX'ом.

    Ответ:

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

    www.msdn.microsoft.com - первоисточник информации по программированию. О DirectX там тоже есть инфа.
    Диски MSDN. У меня MSDN за январь 2001. там весь четвертый компакт посвящен DirectX (DirectX SDK(сам не знаю, что это такое), хэлп и примеры (есть для Visual C++ и даже для VB))
    www.vbstreets.ru - здесь есть несколько исходников.


    Вопрос:

       Есть код, позволяющий создать окно произвольной формы.
    В Win9x/Me все работает как положено, а в Win XP ненужные участки формы не обрезаются, т.е. на экране форма имеет вид прямоугольника. Кто подскажет, в чем дело?
    Код программы привожу:


    Option Explicit

    'Объявляем API-функцию, которая так сказать
    'накладывает созданный регион на окно (те
    'части которые остались за пределами
    'региона исчезают), где: hwnd - идентифика-
    'тор окна, на котором нужно "выдавить"
    'форму, hRgn - "формочка" для окна,
    'bRedraw - перерисовывать ли окно после
    '"выдавления".

    Private Declare Function SetWindowRgn _
         Lib "user32" (ByVal hwnd As Long, _
         ByVal hRgn As Long, ByVal bRedraw As _
         Boolean) As Long

    'Объявляем API-функцию чтобы создать
    'регион-"формочку" (состоит регион из n-ого
    'количества точек, которое необходимо
    'задать), где: lpPoint - первая точка
    'региона, nCount - количество точек,
    'nPolyFillMode - описание метода заливки
    'полигона.

    Private Declare Function CreatePolygonRgn _
         Lib "gdi32" (lpPoint As POINTAPI, _
         ByVal nCount As Long, ByVal _
         nPolyFillMode As Long) As Long

    'Объявляем тип для описания координат
    'каждой точки

    Private Type POINTAPI
       x As Long
       y As Long
    End Type

    'Объявляем массив P по типу POINTAPI

    Dim P(128) As POINTAPI

    Private Sub Form_Load()
         'Присвоим свойству Picture формы такого
         'же вида свойство
         Picture = Image1

       'Записываем код для каждой точки,
       'описывающий её координаты в пикселах

       P(0).x = 448: P(0).y = 25
       P(1).x = 97: P(1).y = 45
       P(2).x = 98: P(2).y = 33

      'Тут задаются координаты точек от 3 до 125

       P(126).x = 90: P(126).y = 43
       P(127).x = 93: P(127).y = 45
       P(128).x = 448: P(128).y = 25

       'Объявляем переменную, содержащую
       'регион

       Dim Rgn As Long
         
       'Создаём регион

       Rgn = CreatePolygonRgn(P(0), 128, 0)

       '"Выдавливем форму"

       Call SetWindowRgn(hwnd, Rgn, True)

    End Sub

    Ответ:

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

    Не пробовал после

    Rgn = CreatePolygonRgn(P(0), 128, 0)

    вставить строку

    Debug.Print Rgn

    А дело в том, что полигон не создается из-за некорректного вызова функции. Надо так:

    Rgn = CreatePolygonRgn(P(0), 128, ALTERNATE)

    или

    Rgn = CreatePolygonRgn(P(0), 128, WINDING)

    но не 0. Для справки:

    Const ALTERNATE = 1
    Const WINDING = 2



    Ответ:

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

    Все дело в том, что вызывая функцию CratePolyRgn ты ставишь третий параметр, определяющий режим создания региона, 0. Поэтому эта функция возвращает 0 (то есть, произошла ошибка). Ставить необходимо один из следующих режимов:

    Public Const ALTERNATE = 1 'Пересекающиеся области региона "выколоты" не будут
    Public Const WINDING = 2 'Пересекающиеся области региона будут "выколоты"

    То есть, напиши:

    Rgn = CreatePolygonRgn(P(0), 128, ALTERNATE)

    или

    Rgn = CreatePolygonRgn(P(0), 128, WINDING)

    Очевидно, в 98-й не требубуется специально указывать этот параметр, а в XP - обязательно



    Ответ:

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

    Место:

    Rgn = CreatePolygonRgn(P(0), 128, 0)

    надо писать:

    Rgn = CreatePolygonRgn(P(0), 128, 1)

    И добавь после кода:

    DeleteObject Rgn

    (очищает память)


    Вопрос:

       А можно ли как-то узнать название (букву) CD-ROM'а?

    Ответ:

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

    Ставь на форму DriveListBox и кнопку. Теперь впиши код:

    Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long

    Private Sub Command1_Click()
      For t = 0 To Drive1.ListCount - 1
       drive_name = Left(Drive1.List(t), 2) & "\"
       If GetDriveType(drive_name) = 5 Then MsgBox "Drive " & drive_name & " is CDROM"
       '0 - не удалось определить тип
       '1 - корневой директории диска не сущ.
       '2 - гибкий диск
       '3 - жесткий диск
       '4 - сетевой диск
       '5 - CDROM
       '6 -RAM - диск(виртуальный)
      Next t
    End Sub


    Вопрос:

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

    Ответ:

    Автор ответа: Murat Shonov

    Можешь использовать запись в реестре или ини-файле глубоко в винде.
    Для реестра код простой: записать при первой загрузке, а потом проверять если ключ есть то требовать пароль

    SaveSetting "Имя_приложения", "Секция", "Ключ", "Установка"

    считывать

    n = GetSetting("Имя_приложения", "Секция", "Ключ", "Значение_по_умолчанию")

    Значение по умолчанию используется если такого ключа нет.
    Можно в разные места поназасовывать ключей типа от разных программ, а то юзеры сильно умными стали.
    А с ини сложнее там надо через АПИ функции. Но если надо пиши muha@land.ru



    Ответ:

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

    Это тебе поможет:

    If App.PrevInstance = True Then ...



    Ответ:

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

    Снова неточная формулировка вопроса. Непонятно, что нужно сделать: отслеживатьвторой запуск программы ВООБЩЕ, или запуск программы, если копия этой программы уже запущена. Отвечаю на оба вопроса:

    1) При запуске программы проверим, запускалась ли программа хоть раз (попробуем считать из реестра этот параметр)

    Sub Form_Load()
         dim boolWasLoaded as boolean
         dim strPassword as string

         boolWasLoaded=iif( _
         GetSetting (App.Path,"Options","WasLoaded","NO")="YES",True,False)

         if boolWasLoaded then
            'Спрашиваем пароль
            strPassword=inputbox("Введите пароль!")
            'Если пароль неверен, выходим
            if strPassword <> "Hello" then end
         Else
             'Записываем в реестре, что программа уже была запущена
             SaveSetting app.path, "Options","WasLoaded","YES"
         end if
    end sub

    2) При запуске программы проверяем, заущена ли уже копия этой программы

    Sub Form_Load()
         dim boolWasLoaded as boolean
         dim strPassword as string

         boolWasLoaded=app.PrevInstance
         'Далее по той же схеме
         
         if boolWasLoaded then
            'Спрашиваем пароль
            strPassword=inputbox("Введите пароль!")
            'Если пароль неверен, выходим
            if strPassword <> "Hello" then end
         end if
    end sub

    Этот код не идеален. Продвинутый пользователь легко постаит значение "NO" в реестре. Но это уже вопросы шифрования и защиты.



    Ответ:

    Автор ответа: Rutshtein Alex

    Используй в Form_Load() свойство App.PrevInstance, собствеено если оно true, то твоя программа уже запущена и можешь спрашивать пароль.


    Вопрос:

       Подскажите, как в тексте программы задать св-во MouseIcon? Что-то в хелпах по этому поводу ничего нет.

    Ответ:

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

    Me.MousePointer = vbCustom
    Me.MouseIcon = LoadPicture("<Путь_к_файлу_курсора>")



    Ответ:

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

    Вот, например:

    Private Sub Form_Load()
      Form1.MouseIcon = Picture1.Picture
      Form1.MousePointer = 99 'Иконка пользователя
    End Sub



    Ответ:

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

    ТвойКонрол.MouseIcon=ТвойIcon.

    ТвойIcon - это твоя иконка. Это может быть свойство Picture какого-то контрола. Но туда должна быть загружена иконка. Можно загрузить картинку из файла - используй функцию LoadPicture.


    Вопрос:

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

    Ответ:

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

    'Registry keys
    Public Const HKEY_CLASSES_ROOT = &H80000000
    Public Const HKEY_CURRENT_USER = &H80000001
    Public Const HKEY_LOCAL_MACHINE = &H80000002
    Public Const HKEY_USERS = &H80000003
    Public Const HKEY_PERFORMANCE_DATA = &H80000004
    Public Const HKEY_CURRENT_CONFIG = &H80000005
    Public Const HKEY_DYN_DATA = &H80000006

    'Registry access constants
    Public Const KEY_QUERY_VALUE = &H1 'Permission to query subkey data.
    Public Const KEY_SET_VALUE = &H2 'Permission to set subkey data.
    Public Const KEY_CREATE_SUB_KEY = &H4
    Public Const KEY_ENUMERATE_SUB_KEYS = &H8
    Public Const KEY_NOTIFY = &H10
    Public Const KEY_CREATE_LINK = &H20
    Public Const KEY_READ = KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY
    Public Const KEY_WRITE = KEY_SET_VALUE Or KEY_CREATE_SUB_KEY
    Public Const KEY_ALL_ACCESS = KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_SUB_KEY Or KEY_CREATE_LINK Or KEY_SET_VALUE

    Public Const REG_OPTION_NON_VOLATILE = 0&
    Public Const REG_OPTION_VOLATILE = &H1

    Public Type SECURITY_ATTRIBUTES
       nLength As Long
       lpSecurityDescriptor As Long
       bInheritHandle As Long
    End Type

    Public Enum RegTypes
         RegNonee = 0
         RegSZ = 1
         RegExpandSz = 2
         RegBinary = 3
         RegDword = 4
         RegDwordLittleEndian = 4
         RegDwordBigEndian = 5
         RegLink = 6
         RegMultiSz = 7
         RegResourceList = 8
         RegFulResourceDesc = 9
    End Enum

    Declare Function RegOpenKeyEx Lib "advapi32" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
    Declare Function RegSetValueEx Lib "advapi32" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal szData As String, ByVal cbData As Long) As Long
    Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long
    Declare Function RegQueryValueEx Lib "advapi32" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, ByRef lpType As Long, ByVal szData As String, ByRef lpcbData As Long) As Long
    Declare Function RegCreateKeyEx Lib "advapi32" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, ByRef lpSecurityAttributes As SECURITY_ATTRIBUTES, phkResult As Long, lpdwDisposition As Long) As Long

    Public Function RegGetValue(Root As Long, SubKey As String, Key As String) As String
         Dim Buffer As String, hKey As Long, nType As Long, nSize As Long
         RegGetValue = ""
         If Not RegOpenKeyEx(Root, SubKey, 0, KEY_READ, hKey) Then
             nSize = 0
             RegQueryValueEx hKey, Key, 0, nType, Buffer, nSize
             If hKey And nSize > 0 And nType = RegSZ Then
                 Buffer = Space(nSize + 1)
                 RegQueryValueEx hKey, Key, 0, nType, Buffer, nSize
                 RegGetValue = Left(Buffer, nSize - 1)
                 RegCloseKey hKey
             End If
         End If
    End Function

    Public Sub RegSetValue(Root As Long, SubKey As String, Key As String, value As String)
         Dim hKey As Long, sa As SECURITY_ATTRIBUTES, nDisp As Long
         If Not RegCreateKeyEx(Root, SubKey, 0, vbNull, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, sa, hKey, nDisp) Then
             RegSetValueEx hKey, Key, 0, RegSZ, value, Len(value) + 1
             RegCloseKey hKey
         End If
    End Sub

    Использование:

    sUser = RegGetValue(HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion", "RegisteredOwner")
    RegSetValue HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion", "RegisteredOwner", "Darth Vader"



    Ответ:

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

    На сайте www.vbnet.ru есть целая статья по этому поводу.


    Вопрос:

       1. Можно ли зделать прозрачную форму? Если да то как? (BackColor - прозрачный)
    2. Как Получить управление с помощью колесика мышы?

    Ответ:

    Автор ответа: Ревягин_Алексей

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

    Const WS_EX_TRANSPARENT& = &H20& ' окно является прозрачным и не скрывает окна под собой

    Dim tmplong1 As Long

       SetWindowLong Me.hwnd, -20, tmplong1 Or WS_EX_TRANSPARENT&
    Me.Height = Me.Height - 10
    Me.Height = Me.Height + 10



    Ответ:

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

    На сайте www.vbnet.ru есть статья и по этому поводу.




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

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

    наверх


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

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