Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

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


Информационный Канал Subscribe.Ru

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


VBNet VBMania
Ссылки:

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

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

       Здравствуйте...
    Читайте!


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




    Как превратить изображение в массив?

    Вопрос:

    Можно ли получить рисунок из ListImage как Dim Img() As Byte ?

    Ответ:

    dim Bitmapinfo as BITMAPINFO,br> dim outBuff as byte*65535
    hDCdskbuff=GetDC(hWindowWnd);
    hSecondBitmap =(HBITMAP)LoadBitmap(GetModuleHandle(0),MAKEINTRESOURCE(IDB_BITMAP1));
    'GetModuleHandle(0) тоже самое что и hInstance

    GetDIBits(hDCdskbuff,hSecondBitmap,0,128,outBuff,&Bitmapinfo,DIB_RGB_COLORS);
    Функция копирует с указанного контекста в байтовый массив, есть и обратная функция.

       Ivan R

    наверх


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

    Вопрос:

    Я нашёл код динамического создания PopupMenu - он работает, но как потом использовать это меню (где писать функции, которые будут происходить при нажатии на определённый пункт этого меню).

    Ответ:

    Сообщение WM_COMMAND говорит о том, что свершилось нажатие на меню. А ловить сообщение нужно субклассингом.

    Можно и по-другому. Если установить uFlag=TPM_RETURNCMD, то функция вернет индентификатор меню, которое было выбрано.

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



    наверх


    Что такое субклассинг?

    Вопрос:

    Собираюсь использовать динамическое меню. Для этого нужен субклассинг. Что это такое?

    Ответ:

    Собственно, раскажу все с самого начала. Каждое окно (а PictureBox, CommandButton - тоже окна) имеет такое свойство, как адрес оконной процедуры. Эта процедура получает все сообщения этого окна. Эти сообщения сообщают об создании сообщения (WM_CREATE), получении и потере фокуса (WM_SETFOCUS и WM_KILLFOCUS соответственно). Вобщем, этих сообщений немерено. Если пишешь на VB, сообщения получает процедура VB, которая делает, что нужно, иногда вызывает события. Но ничто тебе не мешает сделать так, чтоб окно посылало сообщения любой твоей процедуре. На www.vbnet.ru есть статья (по-моему, Ивана Шатрыкина). Там этот процес рассмотрен более детально. Как "засубклассить" окно? Используй функцию SetWindowLong:

    lngOldProc = SetWindowLong (hwnd, GWL_WNDPROC, AddressOf YourProc)
    где hwnd - hwnd твоего окна.
    YourProc - процедура, которая с этого момента будет получать все сообщения. Эта процедура может находится ТОЛЬКО в Стандартном модуле (функция AddressOf работает только с процедурами стандартного модуля).
    В переменную lngOldProc помещается адрес процедуру, которая получала до этого сообщения окна.

    Субклассинг - очень опасное занятие. Если в коде процедуры произойдет ошибка, без вариантов - вылетит веся Среда. Если ты нажмешь на кнопку Стоп на панели инструментов - вылетит вся Среда. Я вообще убрал эту кнопку с панели инструментов. Есть одно средство - писать без ошибок. Если так писать не получается, для запуска используй Ctrl+F5 (Run-- Start with full compile). Во всяком случае ошибки компиляции (Напр, неправильно написал имя переменной) будут исключены.

    Об отладке таких проектов. Делать это трудно. А вообще лучше использовать 2(два) монитора (начиная с 98-й это можно делать): на одном - Среда, на другом - окно.

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

    наверх


    Где можно достать полный список сообщений с их описанием?

    Вопрос:

    Субклассинг - Отличная штука!
    Нет ли у кого-нить полного списка сообщений с их описанием?

    Ответ:

    MSDN - только здесь (во всяк. случае, я так думаю) можно найти ПОЛНЫЙ списко всех сообщений, причем с особенностями для каждого контрола.

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

    наверх


    Как создать меню последних открытых файлов в программе?

    Вопрос:

    Нужно создать меню последних открытых файлов в программе.
    Как это сделать?

    Ответ:

    Создаёшь, например, 5 пунктов меню. Скрытые, кэпшна нет, тег пустой. При загрузке читаешь последние открытые файлы из реестра/INI, если таковые есть - заполняешь меню: тег - полный путь к файлу, кэпшн - только имя файла, визибл = тру. При открытии очередного файла сдвигаешь всё на один пункт вниз (самый "давнооткрытый" файл при этом "забывается). В первое меню добавляешь новый файл по той же схеме. Пишешь его в реестр/INI. При щелчке на меню (лучше делать массив с одним именем) делаешь что-то вроде:
    Sub mnuMRU_Click (Index as Integer)
      OpenFile mnuMRU(Index).Tag
    End Sub


       .::Savenger::.

    В режиме дизайна создай элемент меню, имеющий Caption равный "-". Этот элемент будет представлять собой разделитель имен файлов (обычно список файлов отделяют таким разделителем). Если разделитель не нужен, поставь Visible=false. ОЧЕНЬ ВАЖНО!!!___ поставь Index=0.

    Далее нет ничего сложного. Но много писанины.
    lngCount - здесь хранишь количество элементов, сохраненных в реестре
    mnuFileRecent - имя менюшки, которое ты создал в предыдущем шаге.

    For i = 1 To lngCount
       'Загрузим следующий элемент.
       Load mnuFileRecent(i)
       'Новосозданный элемент еще не видим. Исправим положение.
       mnuFileRecent(i).Visible = True
       'Загрузим путь из реестра
       strText=GetSetting(......)
       'Присвоим Caption
       'Тут я попытался добавить в список только имя файлы.
       mnuFileRecent(i).Caption = left(strtext,instrrev(strtext,"\"))
       'В свойство Tag запишем полный путь.
       mnuFileRecent.tag=strText
    Next i

    При клике на этом меню загружаешь файл mnuFileRecent(index).tag
    Добавлять элемент можно простым циклом. Есди mnuFileRecent.ubound меньше макс. кол-ва файлов, сначала загрузи еще один элемент:
    lngMaxCount - макс. кол-во файлов

    if mnuFileRecent.ubound < lngMaxCount then
       'Загрузим элемент меню, индекс которого на 1 больше кол-ва,
       'элементов в списке.
       load mnuFileRecent(mnuFileRecent.ubound+1)
       'Теперь просто обращаемся к самому "высокому" элементу
       mnuFileRecent(mnuFileRecent.ubound).visible=true
    end if

    for i = mnuFileRecent.ubound to 2
     mnuFileRecent(i).caption=mnuFileRecent(i-1).caption
    next i

    mnuFileRecent(1).caption=strFileName


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



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

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

    Вопросы:


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

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

       Подскажите, как написать контрол таймера для VBA.


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

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

       Как(ой)ие *.ocx нужны чтобы звонить на другой модем через телефонную линию?


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

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

       Я создал вяломщик ZIP паролей, принцип его действия таков:
    ВБ открывает через командную строку файл (создаю *.bat и запускаю через shell(c:\*.bat))
    Затем программа передает фокус приложению (командой AppActivate) и пускает горячие клавиши разархивации.
    После идет примерно следующее:

    for i=1 to 100
    select case i
    case 1: b="a"
    case 2: b="b"
    ...
    case 100 b="Я"
          for i1=1 to 100
            select case i1
            case 1: c="a"
            case 2: c="b"
            ...
            case 100 b="Я"
                 for i2=1 to 100
                     ...
                    for i3=1 to 100
                      ...
                     Отправка a & b & c & ... & t
    next i25
    next i24
    ...
    next i1
    next i

    Так вот:
    а) как можно открывать файлы (кроме *.txt *.exe и *.bat), не используя командной строки?
    б) как можно, не открывая ZIP - файл, перебирать пароли?
    в) программа AZRP (тоже ломает пароли) взламывает пароль ия 5 символов за 2 мин., моя за 5-6 и более...
    г) вставляя kol=kol+1: Label= "Проверено паролей: " & kol сам label становится пустым, т.е цикл его постоянно обновляет и он не успевает отображать, так как сделать прерывание, чтобы label не пустовал?


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

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

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


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

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

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


    Автор вопроса: Женя

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

       Как узнать метку (label) сменного диска? Стандартный DriveListBox дает метки HDD, и все.


    Автор вопроса: Кошевой Дмитрий

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

       Нужно делать WAP-браузер, но никак не могу понять формат WAP-графики. КТо может помочь?


    Автор вопроса: Реутов Дмитрий

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

       Есть 2 одностраничных PDF-файла, полученных печатью на дистиллер. Один представляет собой верхнюю часть страницы, другой - нижнюю. Можно ли их программно "совместить" на одну страницу?




    Ответы:


    Вопрос:

          В Recordset есть данные из SQL - сервера (запрос):
       
       Номер Дата Сумма Клиент Код
       
       Надо эти данные сконвертировать в текстовый файл заданной структуры.
       Я пробовал прочитать эти данные в текстовое поле (с помощью Fields.Pole()). Но это дает текущщее значение (одну запись). А мне надо все записи из запроса.

       Подскажите, пожалуйста, как это сделать.

    Ответ:

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

    Берешь свой Recordset (обзовем его R) и, переберая его в цикле, закидываешь его в свое текстовое поле (обзовем его F)
       
         Do Until R.EOF
              F = R![ЗакидываемыеДанные] & vbCrLf & vbCrLf
              R.MoveNext



    Ответ:

    Автор ответа: Andrew Stephanoff

    Мне кажется, что надо организовать цикл

         dim rs as adodb.recordset
         dim strTemp as string

         set rs = new adodb.recorset
         rs open strSQL

         {здесь необходимо открыть файл}
         do until rs.EOF
             strTemp = rs.Fields.Pole()
             {здесь необходимо дописать в конец файла строку strTemp}
             rs.MoveNext
         loop
         {здесь необходимо закрыть файл}

    На практике не проверял, но вроде должно работать.


    Вопрос:

       Делаю расшифровщик ZIp-паролей, но вот в чем проблема: нужно, чтобы открывался ZIP-файл, оператор shell этого не делает, пришлось вводить строку:

    shell ("c:\xxx.bat", vbHide)

    в xxx.bat записана функция открытия файла, далее следует такой код:

    AppActivate "WinZip -yyy.zip", False
    SendKeys "+e", true

    т.е после того, как открывается zip-файл, ему дожно посылаться сочетание клавишь Shift+E, чтобы, начиная разархивацию файлов, Zip потребовал пароль. Но эффект нулевой, после того как зип открывается - ничего не происходит :( Может знает кто, как провести эту (или хотя бы похожую) операцию. Или кто-то знает более простой подход?

    Ответ:

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

    AppActivate "WinZip -yyy.zip", False
    DoEvents
    DoEvents
    SendKeys "+e", true

    Найди в инете контролы позволяющие работать с зип архивами, с ними скорость подбора паролей заметно возрастет.



    Ответ:

    Автор ответа: Andrew Stephanoff

    Есть библиотека unrar.dll на сайте Евгения Рошала, не помню адрес, но поиском можно найти. Она позволяет работать с архивом .rar без shell'а, но насчет zip не уверен. Думаю и для zip есть похожая библиотека.


    Вопрос:

       Как засунуть в VB графический файл с расширением GIF так, чтобы он был с анимацией?

    Ответ:

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

    Скачай контрол Gif89.dll и подключи к проекту. Найти его можно в любом поисковике.


    Вопрос:

       Где скачать самоучебник по VB?
    Грешен - ленив, никак до поисковика руки не дойдут.

    Ответ:

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

    Поищи на сайте http://vb.hut.ru . Там есть неплохой учебник и справочник в одном (~400kb).


    Вопрос:

       Есть два одномерных массива, содержащие текстовые значения.
    Размерность обоих периодически изменяется. Приведу пример:

    Dim oldMas(3) As String
    Dim newMas(5) As String
    oldMas(0) = "abc"
    oldMas(1) = "def"
    oldMas(2) = "xyz"
    newMas(0) = "abc"
    newMas(1) = "def"
    newMas(2) = "zyx"
    newMas(3) = "klm"
    newMas(4) = "abc"

    Нужно найти:
    1. различия между oldMas() и newMas() с указанием на значения
    которые присутствуют в newMas() и отсутствуют в oldMas(), и наоборот
    присутствуют в oldMas() и отсутствуют в newMas()
    2. найти повторения значения которые могут содержаться в oldMas()
    два раза под разными индексами, а в newMas() три, другими словами найти
    это третье значение в newMas().
    Но при этом некоторые значения могут находиться в newMas()
    под другими индексами по сравнению с oldMas().

    Ответ:

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

           Если я правильно понял последнее задание

    Private Sub Command1_Click()
    Dim oldMas(3) As String
    Dim newMas(5) As String
    oldMas(0) = "abc"
    oldMas(1) = "def"
    'oldMas(2) = "def"
    oldMas(2) = "xyz"

    newMas(0) = "abc"
    newMas(1) = "def"
    'newMas(2) = "zyx"
    newMas(2) = "klm"
    newMas(3) = "klm"
    newMas(4) = "klm"
    'newMas(4) = "abc"
    'присутствуют в oldMas() и отсутствуют в newMas()
    Dim i As Byte
    Dim j As Byte
    Dim str As String
    Dim bFlag As Boolean
    For i = 0 To 2
         For j = 0 To 4
             If newMas(j) = oldMas(i) Then bFlag = True
         Next j
         If bFlag = False Then str = str + oldMas(i) + vbCrLf
         bFlag = False
    Next i
    MsgBox str
    'которые присутствуют в newMas() и отсутствуют в oldMas()
    str = vbNullString
    For i = 0 To 4
         For j = 0 To 2
             If newMas(i) = oldMas(j) Then bFlag = True
         Next j
         If bFlag = False Then str = str + newMas(i) + vbCrLf
         bFlag = False
    Next i
    MsgBox str
    str = vbNullString
    'которые могут содержаться в oldMas() два раза под разными индексами

    For i = 0 To 2
         For j = i + 1 To 2
             If oldMas(i) = oldMas(j) Then str = str + oldMas(i) + vbCrLf
         Next j
    Next i
    MsgBox str

    str = vbNullString
    'newMas() три, другими словами найти это третье значение в newMas()
    Dim k As Byte
    For i = 0 To 4
         For j = i + 1 To 4
             For k = j + 1 To 4
                 If newMas(i) = newMas(j) And newMas(i) = newMas(k) Then str = str + newMas(i) + vbCrLf
             Next k
         Next j
    Next i

    MsgBox str
    End Sub


    Вопрос:

       Можно ли в функциях, в качестве передаваемых и возвращаемых значений использовать массивы?

    Ответ:

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

    Private Sub Command1_Click()
         Dim bb(2) As String
         bb(0) = "ads"
         aa bb
         Debug.Print bb(0) 'Здесь будет ХХХ
    End Sub

    Sub aa(bb() As String)
         Debug.Print bb(0)
         bb(0) = "XXX"
    End Sub


    Вопрос:

       Напишите пример по использованию тэгов (ID3) в mp3 файлах. Мне нужна только запись, чтение у меня есть.

    Ответ:

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

    Засунуть все это в cls-файл:

    VERSION 1.0 CLASS
    BEGIN
       MultiUse = -1 'True
       Persistable = 0 'NotPersistable
       DataBindingBehavior = 0 'vbNone
       DataSourceBehavior = 0 'vbNone
       MTSTransactionMode = 0 'NotAnMTSObject
    END
    Attribute VB_Name = "ID3tag11"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = True
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    ' Author: Alvaro Redondo
    ' http://www.sevillaonline.com/ActiveX
    ' Version: 1.0
    ' Last modification date: 30.09.2000
    ' Description: ID3 tags are used to store information in multimedia files, commonly MP3 files.
    ' This class manages version 1.0 and 1.1 ID3 tags.

    Option Explicit

    Private Const GENERIC_READ = &H80000000
    Private Const GENERIC_WRITE = &H40000000

    Private Const OPEN_EXISTING = 3

    Private Const INVALID_HANDLE_VALUE = -1

    Private Const FILE_BEGIN = 0

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

    Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" _
         (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, _
         ByVal dwShareMode As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, _
         ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, _
         ByVal hTemplateFile As Long) As Long

    Private Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, _
         ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, _
         ByVal dwMoveMethod As Long) As Long

    Private Declare Function SetEndOfFile Lib "kernel32" _
         (ByVal hFile As Long) As Long

    Private Declare Function CloseHandle Lib "kernel32" _
         (ByVal hObject As Long) As Long

    Enum enGenres
         [Blues] = 0
         [Classic Rock] = 1
         [Country] = 2
         [Dance] = 3
         [Disco] = 4
         [Funk] = 5
         [Grunge] = 6
         [Hip-Hop] = 7
         [Jazz] = 8
         [Metal] = 9
         [New Age] = 10
         [Oldies] = 11
         [Other] = 12
         [Pop] = 13
         [R&B] = 14
         [Rap] = 15
         [Reggae] = 16
         [Rock] = 17
         [Techno] = 18
         [Industrial] = 19
         [Alternative] = 20
         [Ska] = 21
         [Death Metal] = 22
         [Pranks] = 23
         [Soundtrack] = 24
         [Euro-Techno] = 25
         [Ambient] = 26
         [Trip-Hop] = 27
         [Vocal] = 28
         [Jazz+Funk] = 29
         [Fusion] = 30
         [Trance] = 31
         [Classical] = 32
         [Instrumental] = 33
         [Acid] = 34
         [House] = 35
         [Game] = 36
         [Sound Clip] = 37
         [Gospel] = 38
         [Noise] = 39
         [AlternRock] = 40
         [Bass] = 41
         [Soul] = 42
         [Punk] = 43
         [Space] = 44
         [Meditative] = 45
         [Instrumental Pop] = 46
         [Instrumental Rock] = 47
         [Ethnic] = 48
         [Gothic] = 49
         [Darkwave] = 50
         [Techno-Industrial] = 51
         [Electronic] = 52
         [Pop-Folk] = 53
         [Eurodance] = 54
         [Dream] = 55
         [Southern Rock] = 56
         [Comedy] = 57
         [Cult] = 58
         [Gangsta] = 59
         [Top 40] = 60
         [Christian Rap] = 61
         [Pop/Funk] = 62
         [Jungle] = 63
         [Native American] = 64
         [Cabaret] = 65
         [New Wave] = 66
         [Psychadelic] = 67
         [Rave] = 68
         [Showtunes] = 69
         [Trailer] = 70
         [Lo-Fi] = 71
         [Tribal] = 72
         [Acid Punk] = 73
         [Acid Jazz] = 74
         [Polka] = 75
         [Retro] = 76
         [Musical] = 77
         [Rock & Roll] = 78
         [Hard Rock] = 79
         [Folk] = 80
         [Folk-Rock] = 81
         [National Folk] = 82
         [Swing] = 83
         [Fast Fusion] = 84
         [Bebob] = 85
         [Latin] = 86
         [Revival] = 87
         [Celtic] = 88
         [Bluegrass] = 89
         [Avantgarde] = 90
         [Gothic Rock] = 91
         [Progressive Rock] = 92
         [Psychedelic Rock] = 93
         [Symphonic Rock] = 94
         [Slow Rock] = 95
         [Big Band] = 96
         [Chorus] = 97
         [Easy Listening] = 98
         [Acoustic] = 99
         [Humour] = 100
         [Speech] = 101
         [Chanson] = 102
         [Opera] = 103
         [Chamber Music] = 104
         [Sonata] = 105
         [Symphony] = 106
         [Booty Bass] = 107
         [Primus] = 108
         [Porn Groove] = 109
         [Satire] = 110
         [Slow Jam] = 111
         [Club] = 112
         [Tango] = 113
         [Samba] = 114
         [Folklore] = 115
         [Ballad] = 116
         [Power Ballad] = 117
         [Rhythmic Soul] = 118
         [Freestyle] = 119
         [Duet] = 120
         [Punk Rock] = 121
         [Drum Solo] = 122
         [A capella] = 123
         [Euro-House] = 124
         [Dance Hall] = 125
    End Enum

    Private Type tipoTag
         Tag As String * 3
         Name As String * 30
         Artist As String * 30
         Album As String * 30
         Year As String * 4
         Comment As String * 30
         Genre As String * 1
    End Type

    Private m_sName As String, m_sAlbum As String, m_sArtist As String, _
         m_iYear As Integer, m_iGenre As Integer, m_sComment As String, _
         m_iSongNumber As Integer

    Private m_sPath As String, m_bFileExists As Boolean, m_bReadOnly As Boolean, _
         m_bHasID3tag As Boolean

    Property Get Album() As String
    Attribute Album.VB_Description = "Sets / returns album name."
         Album = m_sAlbum
    End Property

    Property Let Album(sAlbum As String)
         m_sAlbum = IIf(Len(Trim(sAlbum)) > 30, Left(Trim(sAlbum), 30), Trim(sAlbum))
    End Property

    Property Get Artist() As String
    Attribute Artist.VB_Description = "Sets / returns artist name."
         Artist = m_sArtist
    End Property

    Property Let Artist(sArtist As String)
         m_sArtist = IIf(Len(Trim(sArtist)) > 30, Left(Trim(sArtist), 30), Trim(sArtist))
    End Property

    Property Get Comment() As String
    Attribute Comment.VB_Description = "Sets / returns comment field."
         Comment = m_sComment
    End Property

    Property Let Comment(sComment As String)
         m_sComment = IIf(Len(Trim(sComment)) > 30, Left(Trim(sComment), 30), Trim(sComment))
    End Property

    Property Get FileExists() As Boolean
    Attribute FileExists.VB_Description = "Returns True if file exists."
         FileExists = m_bFileExists
    End Property

    Property Get FileName() As String
    Attribute FileName.VB_Description = "Sets / returns path to the file we want to work with."
         FileName = m_sPath
    End Property

    Property Let FileName(ByVal sPath As String)
         Dim FF As Integer
         sPath = Trim(sPath)
         If sPath = "" Then
             m_sPath = ""
             m_bFileExists = False
             m_bReadOnly = False
             Exit Property
         End If
         On Error Resume Next
         FF = FreeFile
         Open sPath For Input As #FF
         If Err.Number <> 0 Then
             Err.Clear
             m_sPath = ""
             m_bFileExists = False
             m_bReadOnly = False
             Exit Property
         End If
         Close #FF
         m_sPath = sPath
         m_bFileExists = True
         Open sPath For Append As #FF
         If Err.Number <> 0 Then
             Err.Clear
             m_bReadOnly = True
         Else
             Close #FF
             m_bReadOnly = False
         End If
         On Error GoTo 0
         Load
    End Property

    Property Get Genre() As enGenres
    Attribute Genre.VB_Description = "Sets / returns genre."
         Genre = CLng(m_iGenre)
    End Property

    Property Let Genre(lGenre As enGenres)
         m_iGenre = CInt(lGenre)
    End Property

    Property Get Genre_str() As String
    Attribute Genre_str.VB_Description = "Returns genre as string."
         Select Case m_iGenre
             Case 0
                 Genre_str = "Blues"
             Case 1
                 Genre_str = "Classic Rock"
             Case 2
                 Genre_str = "Country"
             Case 3
                 Genre_str = "Dance"
             Case 4
                 Genre_str = "Disco"
             Case 5
                 Genre_str = "Funk"
             Case 6
                 Genre_str = "Grunge"
             Case 7
                 Genre_str = "Hip-Hop"
             Case 8
                 Genre_str = "Jazz"
             Case 9
                 Genre_str = "Metal"
             Case 10
                 Genre_str = "New Age"
             Case 11
                 Genre_str = "Oldies"
             Case 12
                 Genre_str = "Other"
             Case 13
                 Genre_str = "Pop"
             Case 14
                 Genre_str = "R&B"
             Case 15
                 Genre_str = "Rap"
             Case 16
                 Genre_str = "Reggae"
             Case 17
                 Genre_str = "Rock"
             Case 18
                 Genre_str = "Techno"
             Case 19
                 Genre_str = "Industrial"
             Case 20
                 Genre_str = "Alternative"
             Case 21
                 Genre_str = "Ska"
             Case 22
                 Genre_str = "Death Metal"
             Case 23
                 Genre_str = "Pranks"
             Case 24
                 Genre_str = "Soundtrack"
             Case 25
                 Genre_str = "Euro-Techno"
             Case 26
                 Genre_str = "Ambient"
             Case 27
                 Genre_str = "Trip-Hop"
             Case 28
                 Genre_str = "Vocal"
             Case 29
                 Genre_str = "Jazz+Funk"
             Case 30
                 Genre_str = "Fusion"
             Case 31
                 Genre_str = "Trance"
             Case 32
                 Genre_str = "Classical"
             Case 33
                 Genre_str = "Instrumental"
             Case 34
                 Genre_str = "Acid"
             Case 35
                 Genre_str = "House"
             Case 36
                 Genre_str = "Game"
             Case 37
                 Genre_str = "Sound Clip"
             Case 38
                 Genre_str = "Gospel"
             Case 39
                 Genre_str = "Noise"
             Case 40
                 Genre_str = "AlternRock"
             Case 41
                 Genre_str = "Bass"
             Case 42
                 Genre_str = "Soul"
             Case 43
                 Genre_str = "Punk"
             Case 44
                 Genre_str = "Space"
             Case 45
                 Genre_str = "Meditative"
             Case 46
                 Genre_str = "Instrumental Pop"
             Case 47
                 Genre_str = "Instrumental Rock"
             Case 48
                 Genre_str = "Ethnic"
             Case 49
                 Genre_str = "Gothic"
             Case 50
                 Genre_str = "Darkwave"
             Case 51
                 Genre_str = "Techno-Industrial"
             Case 52
                 Genre_str = "Electronic"
             Case 53
                 Genre_str = "Pop-Folk"
             Case 54
                 Genre_str = "Eurodance"
             Case 55
                 Genre_str = "Dream"
             Case 56
                 Genre_str = "Southern Rock"
             Case 57
                 Genre_str = "Comedy"
             Case 58
                 Genre_str = "Cult"
             Case 59
                 Genre_str = "Gangsta"
             Case 60
                 Genre_str = "Top 40"
             Case 61
                 Genre_str = "Christian Rap"
             Case 62
                 Genre_str = "Pop/Funk"
             Case 63
                 Genre_str = "Jungle"
             Case 64
                 Genre_str = "Native American"
             Case 65
                 Genre_str = "Cabaret"
             Case 66
                 Genre_str = "New Wave"
             Case 67
                 Genre_str = "Psychadelic"
             Case 68
                 Genre_str = "Rave"
             Case 69
                 Genre_str = "Showtunes"
             Case 70
                 Genre_str = "Trailer"
             Case 71
                 Genre_str = "Lo-Fi"
             Case 72
                 Genre_str = "Tribal"
             Case 73
                 Genre_str = "Acid Punk"
             Case 74
                 Genre_str = "Acid Jazz"
             Case 75
                 Genre_str = "Polka"
             Case 76
                 Genre_str = "Retro"
             Case 77
                 Genre_str = "Musical"
             Case 78
                 Genre_str = "Rock & Roll"
             Case 79
                 Genre_str = "Hard Rock"
             Case 80
                 Genre_str = "Folk"
             Case 81
                 Genre_str = "Folk-Rock"
             Case 82
                 Genre_str = "National Folk"
             Case 83
                 Genre_str = "Swing"
             Case 84
                 Genre_str = "Fast Fusion"
             Case 85
                 Genre_str = "Bebob"
             Case 86
                 Genre_str = "Latin"
             Case 87
                 Genre_str = "Revival"
             Case 88
                 Genre_str = "Celtic"
             Case 89
                 Genre_str = "Bluegrass"
             Case 90
                 Genre_str = "Avantgarde"
             Case 91
                 Genre_str = "Gothic Rock"
             Case 92
                 Genre_str = "Progressive Rock"
             Case 93
                 Genre_str = "Psychedelic Rock"
             Case 94
                 Genre_str = "Symphonic Rock"
             Case 95
                 Genre_str = "Slow Rock"
             Case 96
                 Genre_str = "Big Band"
             Case 97
                 Genre_str = "Chorus"
             Case 98
                 Genre_str = "Easy Listening"
             Case 99
                 Genre_str = "Acoustic"
             Case 100
                 Genre_str = "Humour"
             Case 101
                 Genre_str = "Speech"
             Case 102
                 Genre_str = "Chanson"
             Case 103
                 Genre_str = "Opera"
             Case 104
                 Genre_str = "Chamber Music"
             Case 105
                 Genre_str = "Sonata"
             Case 106
                 Genre_str = "Symphony"
             Case 107
                 Genre_str = "Booty Bass"
             Case 108
                 Genre_str = "Primus"
             Case 109
                 Genre_str = "Porn Groove"
             Case 110
                 Genre_str = "Satire"
             Case 111
                 Genre_str = "Slow Jam"
             Case 112
                 Genre_str = "Club"
             Case 113
                 Genre_str = "Tango"
             Case 114
                 Genre_str = "Samba"
             Case 115
                 Genre_str = "Folklore"
             Case 116
                 Genre_str = "Ballad"
             Case 117
                 Genre_str = "Power Ballad"
             Case 118
                 Genre_str = "Rhythmic Soul"
             Case 119
                 Genre_str = "Freestyle"
             Case 120
                 Genre_str = "Duet"
             Case 121
                 Genre_str = "Punk Rock"
             Case 122
                 Genre_str = "Drum Solo"
             Case 123
                 Genre_str = "A capella"
             Case 124
                 Genre_str = "Euro-House"
             Case 125
                 Genre_str = "Dance Hall"
             Case Else
                 Genre_str = ""
         End Select
    End Property

    Property Get HasID3tag() As Boolean
    Attribute HasID3tag.VB_Description = "Returns True if file has an ID3 1.0 or 1.1 tag."
         HasID3tag = m_bHasID3tag
    End Property

    Property Get Name() As String
    Attribute Name.VB_Description = "Sets / returns track name field."
         Name = m_sName
    End Property

    Property Let Name(sName As String)
         m_sName = IIf(Len(Trim(sName)) > 30, Left(Trim(sName), 30), Trim(sName))
    End Property

    Property Get ReadOnly() As Boolean
    Attribute ReadOnly.VB_Description = "Returns True if the file can't be modified."
         ReadOnly = m_bReadOnly
    End Property

    Property Get SongNumber() As Integer
    Attribute SongNumber.VB_Description = "Sets / returns song number in album. If set to 0, tag version will be 1.0 and song number won't be saved. If set to a valid value, tag version will be 1.1."
         SongNumber = m_iSongNumber
    End Property

    Property Let SongNumber(iSongNumber As Integer)
         If iSongNumber >= 0 And iSongNumber <= 255 Then
             m_iSongNumber = iSongNumber
         Else
             m_iSongNumber = 0
         End If
    End Property

    Property Get Year() As Integer
    Attribute Year.VB_Description = "Sets / returns year field."
         Year = m_iYear
    End Property

    Property Let Year(iYear As Integer)
         If iYear >= 0 And iYear <= 9999 Then
             m_iYear = iYear
         Else
             m_iYear = 0
         End If
    End Property

    Function Load() As Boolean
    Attribute Load.VB_Description = "Loads tag information from file. Automatically called after setting the FileName property."
         Dim lLen As Long, lPos As Long, FF As Integer, tTag As tipoTag
         Clear
         m_bHasID3tag = False
         If Not m_bFileExists Then
             Load = False
             Exit Function
         End If
         On Error Resume Next
         FF = FreeFile
         Open m_sPath For Binary As #FF
         If Err.Number <> 0 Then
             Close #FF
             Load = False
             Exit Function
         End If
         On Error GoTo 0
         lLen = LOF(FF)
         lPos = lLen - 128 + 1
         If Not lPos > 0 Then
             Close #FF
             Load = False
             Exit Function
         End If
         Seek #FF, lPos
         Get #FF, , tTag
         Close #FF
         With tTag
             If .Tag = "TAG" Then
                 m_bHasID3tag = True
                 m_sName = RTrim(.Name)
                 If InStr(m_sName, Chr(0)) > 0 Then _
                     m_sName = Left(m_sName, InStr(m_sName, Chr(0)) - 1)
                 m_sAlbum = RTrim(.Album)
                 If InStr(m_sAlbum, Chr(0)) > 0 Then _
                     m_sAlbum = Left(m_sAlbum, InStr(m_sAlbum, Chr(0)) - 1)
                 m_sArtist = RTrim(.Artist)
                 If InStr(m_sArtist, Chr(0)) > 0 Then _
                     m_sArtist = Left(m_sArtist, InStr(m_sArtist, Chr(0)) - 1)
                 If Trim(.Year) <> "" Then
                     If IsNumeric(.Year) Then
                         m_iYear = CInt(.Year)
                     Else
                         m_iYear = 0
                     End If
                 Else
                     m_iYear = 0
                 End If
                 If Mid(.Comment, 29, 1) = Chr(0) Then
                     If Right(.Comment, 1) <> Chr(0) Then
                         m_iSongNumber = Asc(Right(.Comment, 1))
                         m_sComment = RTrim(Left(.Comment, 28))
                         If InStr(m_sComment, Chr(0)) Then _
                             m_sComment = Left(m_sComment, InStr(m_sComment, Chr(0)) - 1)
                     Else
                         m_iSongNumber = 0
                         m_sComment = RTrim(.Comment)
                         If InStr(m_sComment, Chr(0)) Then _
                             m_sComment = Left(m_sComment, InStr(m_sComment, Chr(0)) - 1)
                     End If
                 Else
                     m_iSongNumber = 0
                     m_sComment = RTrim(.Comment)
                     If InStr(m_sComment, Chr(0)) Then _
                         m_sComment = Left(m_sComment, InStr(m_sComment, Chr(0)) - 1)
                 End If
                 m_iGenre = Asc(.Genre)
                 Load = True
             Else
                 Load = False
             End If
         End With
    End Function

    Function Save() As Boolean
    Attribute Save.VB_Description = "Saves ID3 tag information to file."
         Dim tTag As tipoTag, FF As Integer, lLen As Long, _
             lPos As Long
         If Not m_bFileExists Or m_bReadOnly Then
             Save = False
             Exit Function
         End If
         FF = FreeFile
         On Error Resume Next
         Open m_sPath For Binary As #FF
         If Err.Number <> 0 Then
             Close #FF
             Save = False
             Exit Function
         End If
         lLen = LOF(FF)
         lPos = lLen - 128 + 1
         If Not lPos > 0 Then
             Close #FF
             Save = False
             Exit Function
         End If
         Seek #FF, lPos
         Get #FF, , tTag
         If Not tTag.Tag = "TAG" Then lPos = lLen + 1
         With tTag
             .Album = m_sAlbum & String(30 - Len(m_sAlbum), Chr(0))
             .Artist = m_sArtist & String(30 - Len(m_sArtist), Chr(0))
             If m_iSongNumber > 0 Then
                 If Len(m_sComment) > 28 Then _
                     m_sComment = Left(m_sComment, 28)
                 .Comment = m_sComment & String(28 - Len(m_sComment), Chr(0)) & Chr(0) & Chr(m_iSongNumber)
             Else
                 .Comment = m_sComment & String(30 - Len(m_sComment), Chr(0))
             End If
             .Genre = Chr(m_iGenre)
             .Name = m_sName & String(30 - Len(m_sName), Chr(0))
             .Tag = "TAG"
             .Year = IIf(m_iYear > 0, Format(m_iYear, "0000"), String(4, Chr(0)))
         End With
         Seek #FF, lPos
         Put #FF, , tTag
         Close #FF
         m_bHasID3tag = True
         Save = True
    End Function

    Function RemoveTag() As Boolean
    Attribute RemoveTag.VB_Description = "Removes ID3 tag information from file."
         Dim FF As Integer, tTag As tipoTag, _
             lLen As Long, lPos As Long, lHnd As Long, SA As SECURITY_ATTRIBUTES, _
             lRes As Long
         If Not m_bFileExists Or m_bReadOnly Or Not m_bHasID3tag Then
             RemoveTag = False
             Exit Function
         End If
         FF = FreeFile
         On Error Resume Next
         Open m_sPath For Binary As #FF
         If Err.Number <> 0 Then
             RemoveTag = False
             Exit Function
         End If
         On Error GoTo 0
         lLen = LOF(FF)
         lPos = lLen - 128 + 1
         If Not lPos > 0 Then
             Close #FF
             RemoveTag = False
             Exit Function
         End If
         Seek #FF, lPos
         Get #FF, , tTag
         If Not tTag.Tag = "TAG" Then
             Close #FF
             RemoveTag = False
             Exit Function
         End If
         Close #FF

         lHnd = CreateFile(m_sPath & Chr(0), GENERIC_READ Or GENERIC_WRITE, 0&, _
             SA, OPEN_EXISTING, 0&, 0&)
         If lHnd = INVALID_HANDLE_VALUE Then
             RemoveTag = False
             Exit Function
         End If
         lPos = lPos - 1
         lRes = SetFilePointer(lHnd, lPos, 0&, FILE_BEGIN)
         lRes = SetEndOfFile(lHnd)
         If lRes = 0 Then
             RemoveTag = False
         Else
             RemoveTag = True
             m_bHasID3tag = False
         End If
         CloseHandle lHnd
    End Function

    Sub Clear()
    Attribute Clear.VB_Description = "Clears all ID3 tag fields."
         m_sName = ""
         m_sAlbum = ""
         m_sArtist = ""
         m_iYear = 0
         m_iGenre = 255
         m_sComment = ""
         m_iSongNumber = 0
    End Sub

    Private Sub Class_Initialize()
         Clear
    End Sub



    Ответ:

    Автор ответа: Alexwander IV

    Давным-давно скачал откуда-то статью по работе с mp3 тегами (ID 3), там описывается, как написать библиотеку для работы с этими самыми тегами. Если надо могу прислать и библиотеку и эту статью. Пиши.


    Вопрос:

       Можно ли делать в vbnet asm вставки?

    Ответ:

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

    Насколько я знаю, нет, да и быть такого по логике вещей не может...


    Вопрос:

       Не сталкивался ли кто нибуть с такой штукой…
    Комп находиться в локальной сети и очень хочется изменить адрес контролера (Mac address), связанный как я понял с сетевой картой.
    Рассматриваю все, и фантастические варианты тоже.

    Ответ:

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

    Это зависит от модели сетевухи.
    Я встречал некоторые 3COM модели, где MAC адрес можно поменять в свойствах карты в диспетчере устройств. Но зачастую MAC адрес прошит в карте жестко и не меняется никак.


    Вопрос:

       Ребята, подскажите, как сделать, чтоб при вводе текста в TextBox прога проверяла все слова в ListBox на соответствие и, если такое слово найдено, выделяла его.

    Ответ:

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

    Используй этот код...

    'Text1 - имя твоего TextBox
    'ListBox1 - имя твоего ListBox

    Private Sub Text1_Change()
    Dim LIndex As Integer
    Dim LCount As Integer
         With ListBox1
             For LIndex = 0 To .ListCount - 1
                 If Text1.Text = .List(LIndex) Then
                     .Selected(LIndex) = True
                 Else
                     .Selected(LIndex) = False
                 End If
             Next
         End With
    End Sub



    Ответ:

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

    При вводе каждого символа проверяй, если это не буква, а, допустим, пробел или дефис, то в цикле перебирай все слова ListBox'а и сравнивай со своим словом.



    Ответ:

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

    Private Sub Text1_Change()
    Dim i As Integer
    For i = 0 To List1.ListCount - 1
    If InStr(1, List1.List(i), Text1) <> 0 Then List1.ListIndex = i: Exit For
    Next i
    End Sub



    Ответ:

    Автор ответа: Hr. Кудрявцев

    Private Sub Text1_KeyPress(KeyAscii As Integer)
    Dim i As Integer
    For i = 0 To (List1.ListCount - 1)
         If Text1.Text = List1.List(i) Then
             List1.ListIndex = i
             List1.Text = Text1.Text
         End If
    Next
    End Sub




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

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

    наверх


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

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


    http://subscribe.ru/
    E-mail: ask@subscribe.ru
    Отписаться
    Убрать рекламу


    В избранное