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


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!!!

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

       Этот выпуск немного задержался по техническим причинам. Только начал его создавать, начал капитально глючить IIS. Запустил "Восстановление системы". Но вместо восстановления оно полностью обрушило систему. Вот они, славные продукты MS... В пятницу пытался поднять Windows цивилизованными методами. Не удалось. А вчера format C:, потом установка и настройка программ, распаковка тонн архивов... Зато несколько гигабайт на диске осовбодилось - покупку нового винта можно на пару недель отложить. Правильно говорят - нет худа без добра.
    Читайте!


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




    Книги

    Переход на 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 можно найти здесь.

    наверх


    Хотите знать, какие файлы скопированы в память?

    Добавьте на форму элемент CommandButton и ListBox.
    Вставьте код, запустите. Затем переключитесь в Проводник, выберите несколько файлов, скопируйте их.
    Затем перейдите в вашу программу и нажмите на кнопку.

    Private Const CF_HDROP = 15
    Private Type POINT
    x As Long
    y As Long
    End Type
    Private Type DROPFILES
    pFiles As Long
    pt As POINT
    fNC As Long
    fWide As Long
    End Type
    Private Declare Function GlobalSize Lib "kernel32" (ByVal hMem As Long) As Long
    Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
    Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
    Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function CloseClipboard Lib "user32" () As Long
    Private Declare Function GetClipboardData Lib "user32" (ByVal wFormat As Long) As Long
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

    Private Sub ShowFilesOnClipboard()
    Dim lHandle As Long
    Dim lpResults As Long
    Dim lRet As Long
    Dim df As DROPFILES
    Dim strDest As String
    Dim lBufferSize As Long
    Dim arBuffer() As Byte
    Dim vNames As Variant
    Dim i As Long

    If OpenClipboard(0) Then
    lHandle = GetClipboardData(CF_HDROP)
    ' If you don't find a CF_HDROP, you don't want to process anything
    If lHandle > 0 Then
    lpResults = GlobalLock(lHandle)

    lBufferSize = GlobalSize(lpResults)
    ReDim arBuffer(0 To lBufferSize)

    CopyMemory df, ByVal lpResults, Len(df)
    Call CopyMemory(arBuffer(0), ByVal lpResults + df.pFiles, (lBufferSize - Len(df)))

    If df.fWide = 1 Then
    ' it is wide chars--unicode
    strDest = arBuffer
    Else
    strDest = StrConv(arBuffer, vbUnicode)
    End If
    GlobalUnlock lHandle
    vNames = Split(strDest, vbNullChar)
    i = 0
    While Len(vNames(i)) > 0
    List1.AddItem vNames(i)
    i = i + 1
    Wend
    End If
    End If
    CloseClipboard
    End Sub

    Private Sub Command1_Click()
    List1.Clear
    Call ShowFilesOnClipboard
    End Sub

    наверх


    Получение имен всех логических дисков

    Очередной пример из серии "как определить имена всех дисков в системе". Причина появления этого примера - использование API-функции GetLogicalDriveStrings

    Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long

    Private Function GetDriveStrings() As String
    Dim result As Long ' Result of our api calls
    Dim strDrives As String ' String to pass to api call
    Dim lenStrDrives As Long ' Length of the above string
    result = GetLogicalDriveStrings(0, strDrives)
    strDrives = String(result, 0)
    lenStrDrives = result
    result = GetLogicalDriveStrings(lenStrDrives, strDrives)
    If result = 0 Then
    GetDriveStrings = ""
    Else
    GetDriveStrings = strDrives
    End If
    End Function

    Private Sub Command1_Click()
    Dim strDrives As String
    strDrives = GetDriveStrings()
    If strDrives = "" Then
    MsgBox "No Drives were found!", vbCritical
    Else
    DisplayDriveTypes strDrives
    End If
    End Sub

    Private Sub DisplayDriveTypes(drives As String)
    Dim pos As Long
    Dim drive As String
    List1.Clear
    pos = 1
    Do While Not Mid$(drives, pos, 1) = Chr(0)
    drive = Mid$(drives, pos, 3)
    pos = pos + 4
    List1.AddItem UCase(drive)
    Loop
    End Sub

    наверх


    Установить высоту выпадающего окна ComboBox'а к количеству имеющихся строк

    Запустите проект, нажмите на стрелку элемента ComboBox, затем сделайте клик левой клавишей мыши на любом пустом месте формы, затем снова щелкните на элементе ComboBox...

    Private Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long

    Public Sub ResizeCbo(cbo As ComboBox)
    Counter = cbo.ListCount
    cboLeft = cbo.Left / Screen.TwipsPerPixelX
    cboTop = cbo.Top / Screen.TwipsPerPixelY
    cboWidth = cbo.Width / Screen.TwipsPerPixelX
    cboHeight = cbo.Height / Screen.TwipsPerPixelX * Counter
    MoveWindow cbo.hwnd, cboLeft, cboTop, cboWidth, cboHeight, 1
    End Sub

    Private Sub Form_Click()
    Call ResizeCbo(Combo1)
    End Sub

    Private Sub Form_Load()
    Combo1.AddItem "1"
    Combo1.AddItem "2"
    Combo1.AddItem "3"
    Combo1.AddItem "4"
    Combo1.AddItem "5"
    Combo1.AddItem "6"
    Combo1.AddItem "7"
    Combo1.AddItem "8"
    Combo1.AddItem "9"
    Combo1.AddItem "10"
    Combo1.AddItem "11"
    Combo1.AddItem "12"
    Combo1.AddItem "13"
    Combo1.AddItem "14"
    End Sub

    наверх


    Определение соответствия имени файла маске

    Данный пример позволяет определить, соответствует ли имя файла какой-либо маске. Очень часто вы используете специальные символы (к примеру при поиске файлов) - знак вопроса (?) или звездочку (*). Знак вопроса означает, что в данном месте может быть только один символ, а звездочка означает, что в данном месте может быть любое количество символов. В общем, посмотрите на прилагающийся пример, и вы сразу поймете в чем дело.

    Private Function IsMask(ByVal FileName As String, ByVal Mask As String) As Boolean
    'объявляем переменные
    Dim i As Integer
    Dim pos As Integer
    Dim posit As Integer
    Dim curs As String
    Dim tmp As Integer
    Dim temp As String
    Dim j As Integer
    'Заменяем идущие подряд несколько звёздочек на одну
    pos = 1
    posit = InStr(pos, Mask, "**")
    Do While posit <> 0
    temp = Left$(Mask, posit - 1)
    temp = temp & Mid$(Mask, posit, 1)
    temp = temp & Right$(Mask, Len(Mask) - (posit + 1))
    Mask = temp
    posit = InStr(pos, Mask, "**")
    Loop
    'Заменяем *? на *
    pos = 1
    posit = InStr(pos, Mask, "*?")
    Do While posit <> 0
    temp = Left$(Mask, posit - 1)
    temp = temp & Mid$(Mask, posit, 1)
    temp = temp & Right$(Mask, Len(Mask) - (posit + 1))
    Mask = temp
    posit = InStr(pos, Mask, "*?")
    Loop
    'Перебираем все символы в Mask
    For pos = 1 To Len(Mask)
    curs = Mid$(Mask, pos, 1)
    Select Case curs
    'если символ "?", то это любой знак
    Case "?"
    j = j + 1
    i = i + 1
    'если символ "*", то
    Case "*"
    If pos = Len(Mask) Then
    'Если это последний символ, отпускаем с богом
    i = i + (Len(FileName) - j)
    'А если нет, то ищем символв FileName,
    'стоящий в Mask за звездой
    Else
    tmp = InStr(pos, FileName, Mid$(Mask, pos + 1, 1))
    'Если символ не найден, то
    If tmp = 0 Then
    'Значение функции = False
    IsMask = False
    'Выходим из функции
    Exit Function
    End If
    'i = i + кол-во непроверенных символов
    i = i + (tmp - (j + 1))
    'то же самое с j
    j = j + (tmp - (j + 1))
    End If
    'если символ не "*" и не "?", то
    Case Else
    j = j + 1
    'если символ в FileName совпадает с символом
    'в Mask, то
    If Mid$(FileName, j, 1) = Mid$(Mask, pos, 1) Then
    'Увеличиваем счётчик попаданий
    i = i + 1
    End If
    End Select
    'завершаем цикл
    Next
    'Если i соответствует длине FileName, то
    'значение функции True, иначе False
    If i = Len(FileName) Then IsMask = True Else IsMask = False
    End Function

    Private Sub Form_Load()
    MsgBox IsMask("ritual.txt", "*.*"), , "ritual.txt" & " *.*"
    MsgBox IsMask("ritual.txt", "r*.*"), , "ritual.txt" & " r*.*"
    MsgBox IsMask("ritual.txt", "m*.*"), , "ritual.txt" & " m*.*"
    MsgBox IsMask("ritual.txt", "?i????.*"), , "ritual.txt" & " ?i????.*"
    MsgBox IsMask("ritual.txt", "*u??.*"), , "ritual.txt" & " *u??.*"
    MsgBox IsMask("ritual.txt", "*.htm"), , "ritual.txt" & " *.htm"
    MsgBox IsMask("ritual.txt", "*.txt"), , "ritual.txt" & " *.txt"
    End
    End Sub

    наверх


    Получение длинного и короткого имени файла/директории

    Данный вопрос очень часто звучит на многих форумах: "Как мне получить короткое имя файла" или "Как мне получить длинное имя файла, зная короткое". Далее следует ответ на эти вопросы.

    P.S. Надеюсь, мне не надо объяснять что такое "длинное"/"короткое" имя файла. :))

    Private Const MAX_PATH& = 260
    Private Const INVALID_HANDLE_VALUE = -1

    Private Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
    End Type
    Private Type WIN32_FIND_DATA
    dwFileAttributes As Long
    ftCreationTime As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime As FILETIME
    nFileSizeHigh As Long
    nFileSizeLow As Long
    dwReservedЇ As Long
    dwReserved1 As Long
    cFileName As String * MAX_PATH
    cAlternate As String * 14
    End Type
    Private Declare Function apiFindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
    Private Declare Function apiFindClose Lib "kernel32" Alias "FindClose" (ByVal hFindFile As Long) As Long
    Private Declare Function apiGetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long

    Function fGetShortName(ByVal stLongPath As String) As String
    Dim stShortPath As String
    Dim lngBuffer As Long, lngRet As Long
    stShortPath = String$(MAX_PATH, 0)
    lngBuffer = Len(stShortPath)
    lngRet = apiGetShortPathName(stLongPath, stShortPath, lngBuffer)
    fGetShortName = Left(stShortPath, lngRet)
    End Function

    Function fGetLongName(ByVal strFilename As String) As String
    Dim lpFindFileData As WIN32_FIND_DATA
    Dim strPath As String, lngRet As Long
    Dim strFile As String, lngx As Long, lngY As Long
    Dim strTmp As String
    strTmp = ""
    Do While Not lngRet = INVALID_HANDLE_VALUE
    lngRet = apiFindFirstFile(strFilename, lpFindFileData)
    strFile = Left$(lpFindFileData.cFileName, InStr(lpFindFileData.cFileName, vbNullChar) - 1)
    If Len(strFilename) > 2 Then
    strTmp = strFile & "\" & strTmp
    strFilename = fParseDir(strFilename)
    Else
    strTmp = strFilename & "\" & strTmp
    Exit Do
    End If
    Loop
    fGetLongName = Left$(strTmp, Len(strTmp) - 1)
    lngY = apiFindClose(lngRet)
    End Function

    Private Function fParseDir(strInFile As String) As String
    Dim intLen As Long, boolFound As Boolean
    Dim i As Integer, F As String, strDir As String
    intLen = Len(strInFile)
    If intLen > 0 Then
    boolFound = False
    For i = intLen To 1 Step -1
    If Mid$(strInFile, i, 1) = "\" Then
    F = Mid$(strInFile, i + 1)
    strDir = Left$(strInFile, i - 1)
    boolFound = True
    Exit For
    End If
    Next i
    End If
    If boolFound Then
    fParseDir = strDir
    Else
    fParseDir = strInFile
    End If
    End Function

    Private Sub Command1_Click()
    Dim fShort
    fShort = fGetShortName("C:\Program Files")
    MsgBox fShort
    fShort = fGetLongName(fShort)
    MsgBox fShort
    End Sub

    наверх


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

    BalloonMessage for MS Agent

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

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

    наверх


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

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

    Вопросы:


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

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

       Имеется: форма, распахнутая на весь экран, на форме - PictureBox (или Image - сейчас это не суть важно), в PictureBox загружается картинка. Суть проблемы: необходимо, чтобы картинка масштабировалась под размеры экрана (а так как форма распахнута на весь экран - следовательно, под размеры формы).
    Пример масштабирования картинки из выпуска 141 рассылки не помог.


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

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

       Объясните, пожалуйста, как с помощью MMControl проиграть MP3 файл.
    Я пробовал его переделать ия примера, который играет WAV файлы, там есть такое свойство DeviceType, яначение которого "WaveAudio". Какое значение этого свойства должно быть для MP3?
    Вояможно, в этом моя проблема? Поделитесь кодом, кто может.


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

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

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


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

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

       Вопрос элементарный: как сохранить ияображение в формате JPG, GIF. Метод SavePicture сохраняет только в BMP ???


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

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

       Как синхронияировать бд ACCESS 97/2000 ?
    Делал с помощью DAO:

    Sub InternetSynchronizeX()

         Dim dbsTemp As Database

         Set dbsTemp = OpenDatabase("C:\veda_dog\dbProf.mdb")

         ' Synchronize the local database with the replica on
         ' the Internet server.
         dbsTemp.Synchronize _
             "http://vad.chat.ru/dbProf.mdb", _
             dbRepImpExpChanges + dbRepSyncInternet

         dbsTemp.Close

    End Sub

    выдает ошибку :"Неправельный HTTP адрес"


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

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

       Как показать список всех процессов как это делает win2000.


    Автор вопроса: Корик

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

       1. Есть ли в ВБ константа содержащая число ПИ?
    2. Как узнать какая папка на компе обозначена под "My Documents", какая под "Desktop"?
    3. Как вообще можно обратиться к системным переменным типа %Temp%?


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

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

       Как сохранить OLE объект в базе данных MS ACCESS и как затем его обратно вычитать и поместить в контрол OLE?


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

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

       Хочу узнать как извлеч корень n-ой степени из числа???


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

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

       Вопрос мой уже был яадан(про подпрограммы "на лету"), но ия-яа нехватки времени я не смог нормально объяснить, что от вас хочу, да и выраяился коряво, что первое в голову пришло. Я имел ввиду следующее: моя проблема в том, что в моей проге при каком-то условии она должна выполнять несколько операторов, я пробовал это реалияовать так:

    if условие1 then
        делать1
        делать2
    if условие2 then
        делать 3
        делать 4

    НО при выполнении условия1, если оно истинно, то выполняется делать1, в противном случае делать1 не выполняется, а делать 2 выполняется в любом случае то же самое и с условием2: делать3 яависит от условия2, а делать4 выполняется всегда. Можно, конечно было так:

    (General)|(Declarations)
    -------------------------------
    Private Sub подпрограмма1()
    делать1
    делать2
    End Sub
    -------------------------------
    Private sub подпрограмма2()
    делать3
    делать4
    End Sub

    (Button1)|(Click)
    --------------------------------
    Private Sub Button1_Click()
    if условие1 then подпрограмма1
    if условие2 then подпрограмма2
    End Sub

    Но мне не надо описывать подпрограммы в модулях или еще где,
    можно ли какими-нибудь операторами в VB объединить делать1
    и делать2, а также делать3 и делать4 в группы, не описывая их
    в (General)|(Declarations) или в модулях?

    Сравните примеры на Паскале:

    var a,b:integer;
    begin
        randomize;
        a:=random(10);
        b:=4
        if a=3 then
        begin {1}
           a:=a+b;
           b:=3; {2}
        end;
    end.
    ---------------------------------
    var a,b:integer;
    procedure sub1
    a:=a+b;
    b:=3;
    end;
    begin
        randomize;
        a:=random(10);
        b:=4;
        if a=3 then sub1;
    end.

    В первом примере операторы {1} и {2} - аналоги тех
    операторов, которые мне нужны для объединения
    их в подпрограмму. Но это на Паскале, а как это
    сделать на Visual Basic?

    Искренне благодарен яа любую информацию.


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

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

       Привет, у меня вот такие вопросы от которых я вообще не в понятках:

    1) как VB вообще вяаимодействует с Инетом (всяческими портами)?
    2) для этого есть какие-то функции, методы или ещё что?
    3) мне где-то в ухо залетело, что с помощью какой-то MAPI, правильно залетело или нет?
    4) если в ухо правильно залетело, то где надыбать инфу по этому MAPI?
    5) и вообще чё такое этот MAPI? Это набор функций, типа API, но для взаимодействия с Инетом?
    6) стоит ли вообще использовать VB для работы с инетом? Или стоит выбрать чё-нить другое?




    Ответы:


    Вопрос:

       Можно ли в VB вставлять в код программы подпрограммы "на лету"?
    Так это приблизительно выглядит на Паскале:

    if <какое-то условие> then
    ...
    <тело программы>
    ...
    begin
    ...
    <код подпрограммы>
    ...
    end;
    ...
    <тело программы>
    ...

    А как в Visual Basic?

    Ответ:

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

    Компонент Microsoft Script Control X.X и ...

    Private Sub Form_Load()
             Dim strCode As String
             strCode = "Sub NameMe() MsgBox ""Hello World"" End Sub"
             ScriptControl1.AddCode strCode
             ScriptControl1.Run "NameMe"
    End Sub


    Вопрос:

       1) Как сделать так, чтоб при попытке удаления определённой папки в программу поступал сигал.
    2) Пишу программу запрашивающую пароль при попытке открыть папку. Как при получении правильного пароля открыть обычную Windows-кую папку

    Ответ:

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

    1)Проще узнать что с папкой или файлом произошли изменения - с помощью WinAPI - FindFirstChangeNotification. А чтобы перехватить попытку удаления - нужно перехватывать вызовы системных ф-ций таких как DeleteFile, то есть писать свои библиотеки типа kernel32.dll и т.д.
    2)Просто вызвать: Shell "explorer.exe " & sFolderPathToDisplay


    Вопрос:

       Вот такой вопрос: в текстбоксе есть определенный текст. Так вот что требуется: если первые 6 символов соответсвуют образцу (например If six number = "sobaka" Then) то будет происходить какое-то действие. Как это осуществить?

    Ответ:

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

    Private Sub Txt_Change()
         if instr(ucase(Txt.text),"ABCDE")=1 then
             'То что нужно сделать
         end if
    End Sub


    Вопрос:

       Какие есть API-функции для работы с *.ini файлами (если можно, пример кода)

    Ответ:

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

    Для работы с *.ini файлами существуют следующие функции:

    Private Declare Function OSWritePrivateProfileString _
    Lib "kernel32" Alias "WritePrivateProfileStringA" ( _
         ByVal lpApplicationName As String, _
         ByVal lpKeyName As Any, _
         ByVal lpString As Any, _
         ByVal lpFileName As String _
    ) As Long

    Private Declare Function OSGetPrivateProfileString _
    Lib "kernel32" _
    Alias "GetPrivateProfileStringA" ( _
         ByVal lpApplicationName As String, _
         ByVal lpKeyName As Any, _
         ByVal lpDefault As String, _
         ByVal lpReturnedString As String, _
         ByVal nSize As Long, _
         ByVal lpFileName As String _
    ) As Long


    А вот как их можно использовать (код придумал не я, я его только доработал - добавил запись в *.ini файлы). Кстати, код проверенный и на 100% рабочий (я его смастерил в виде модуля INIReaderWriter.bas и использую в трёх проектах):

    Option Explicit

    Private Declare Function OSWritePrivateProfileString _
    Lib "kernel32" Alias "WritePrivateProfileStringA" ( _
         ByVal lpApplicationName As String, _
         ByVal lpKeyName As Any, _
         ByVal lpString As Any, _
         ByVal lpFileName As String _
    ) As Long

    Private Declare Function OSGetPrivateProfileString _
    Lib "kernel32" _
    Alias "GetPrivateProfileStringA" ( _
         ByVal lpApplicationName As String, _
         ByVal lpKeyName As Any, _
         ByVal lpDefault As String, _
         ByVal lpReturnedString As String, _
         ByVal nSize As Long, _
         ByVal lpFileName As String _
    ) As Long

    Private Const nBUFSIZEINI = 1024
    Private Const nBUFSIZEINIALL = 4096

    Public Function GetPrivateProfileString(ByVal szSection As String, _
                                              ByVal szEntry As Variant, _
                                              ByVal szDefault As String, _
                                              ByVal szFileName As String) As String

    ' szSection - это секция, например [setup]
    ' szEntry - это вхождение, например в секции [setup] есть вхождение File=C:\111.exe, так вот File и будет значением szEntry
    ' szDefault - это значение, возвращаемое по умолчанию
    ' szFileName - это путь и имя к INI файлу


        Dim szTmp As String
        Dim nRet As Long

        If (IsNull(szEntry)) Then
           szTmp = String$(nBUFSIZEINIALL, 0)
           nRet = OSGetPrivateProfileString(szSection, _
                                            0&, _
                                            szDefault, _
                                            szTmp, _
                                            nBUFSIZEINIALL, _
                                            szFileName)
        Else
           szTmp = String$(nBUFSIZEINI, 0)
           nRet = OSGetPrivateProfileString(szSection, _
                                            CStr(szEntry), _
                                            szDefault, _
                                            szTmp, _
                                            nBUFSIZEINI, _
                                            szFileName)
        End If
        GetPrivateProfileString = Left$(szTmp, nRet)
    End Function

    Public Sub WritePrivateProfileString(ByVal szSection As String, _
                                              ByVal szEntry As Variant, _
                                              ByVal szString As String, _
                                              ByVal szFileName As String)


    ' szSection - это секция, например [setup]
    ' szEntry - это вхождение, например в секции [setup] есть вхождение File=C:\111.exe, так вот File и будет значением szEntry
    ' szString - это строка, которая запишется в указанное вхождение (см. выше - это будет 111.exe)
    ' szFileName - это путь и имя к INI файлу
      

        Dim szTmp As String
        Dim nRet As Long

        If (IsNull(szEntry)) Then
           szTmp = String$(nBUFSIZEINIALL, 0)
           nRet = OSWritePrivateProfileString(szSection, _
                                              0&, _
                                              szString, _
                                              szFileName)
        Else
           szTmp = String$(nBUFSIZEINI, 0)
           nRet = OSWritePrivateProfileString(szSection, _
                                              CStr(szEntry), _
                                              szString, _
                                              szFileName)
        End If
    End Sub


    Вопрос:

       Как размещать GIF-анимировыанные картинки на форме? Я пробовал Image, PictureBox, но ничего не помогает. Может кто-нибудь знает?

    Ответ:

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

    просто и сердито получается с помощью DSMAniGifControl (56к)



    Ответ:

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

    Не совсем уверен что это именно то что тебе надо но советую попробовать Microsoft Internet Control


    Вопрос:

       Приобретал несколько CD с бэйсиком 6, ни один из них не хочет работать на моём компьютере. Инсталяция нормально, а потом сообщение "программа выполнила недопустимую операцию и будет закрыта" это сообщение либо после попытки сохранить пустую форму, либо при помещении на форму кнопки и попытке сохранить (пустую форму и проект некоторые крмпакты сохраняют).
    Не встречалась такая ситуация?
    Как с ней бороться?
    Кстати 5 Бэйсик пашет во всю...

    Ответ:

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

    Сталкивался с подобной ситуацией, после неудачных попыток победить заново поставил OS и там уже без проблем встаёт VStudio и нормально работает. Меня угнетает то что в XP работая в оболочке VB я не могу вызвать MSDN хотя установка проходит нормально т.е. после установки VStudio запрашивается CD1 с MSDN и далее остальные диски.
    Если узнаешь как победить напиши.




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

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

    наверх


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

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