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


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

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



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

Ссылки:

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

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

       Мда... А материалов не видать!
    Читайте!


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




    Как делать DropDown Button в Васике?

    Вопрос:

    Как делать DropDown Button в Васике? (Это такая выпадающая кнопка, типа Back в IE)

    Ответ:

    Делаешь в ToolBar кнопку, задаешь ей стиль 5 - tbrDropdown.
    Для анализа выбора обрабатывай Toolbar1_ButtonMenuClick
    Можно динамически добавлять и удалять пункты:

    Toolbar1.Buttons(1).ButtonMenus.Add
    Toolbar1.Buttons(1).ButtonMenus.Remove

        Дмитрий Данелия

    наверх


    Как работать с FindWindow, EnumWindow.

    Вопрос:

    Поясните как работать с функцией API:
    FindWindow, EnumWindow.
    Мне нужно найти идентификатор окна.

    Ответ:

    Функция может искать хендл окна либо по заголовку, либо по имени класса, в зависимости от того, что известно. Ну и, естественно, хендл надо получить:

    Dim lMyHandle As Long
    lMyHandle = FindWindow(vbNullString, "Калькулятор")
         ' если знаем заголовок
    lMyHandle = FindWindow("ExploreWClass", vbNullString)
         ' найдешь окно Проводника

    А EnumWindows используется для того, чтобы перебрать все окна, существующие в данный момент.

    Private Sub Form_Load()
         Me.AutoRedraw = True
         'call the Enumwindows-function
         EnumWindows AddressOf EnumWindowsProc, ByVal 0&
    End Sub

    'Это помещаешь в модуль
    Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal
    lParam As Long) As Boolean
    Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal
    hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
    Declare Function GetWindowTextLength Lib "user32" Alias
    "GetWindowTextLengthA" (ByVal hwnd As Long) As Long

    Public Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As
    Boolean
         Dim sSave As String, Ret As Long
         Ret = GetWindowTextLength(hwnd)
         sSave = Space(Ret)
         GetWindowText hwnd, sSave, Ret + 1
         Form1.Print Str$(hwnd) + " " + sSave
         EnumWindowsProc = True ' продолжение перебора
    End Function

        Дмитрий Данелия

    наверх


    Где можно скачать описание API функций по-русски?

    Вопрос:

    Где можно скачать описание API функций по-русски?

    Ответ:

    http://subscribe.ru/catalog/comp.soft.prog.winapi19743

        •Creator•

    http://www.bcbdev.ru/winapi.htm

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

    наверх


    Как в VB .NET динамически создавать текстбоксы?

    Вопрос:

    VB .Net,

    Есть панель Panel1, на ней два текстбокса. Как сделать так, чтобы при появлении текста во втором текстбоксе, снизу создавался третий. Не делался visible, а появлялся, создавался.

    Ответ:

    'Вверху там где объявления переменных уровня класса

    Friend WithEvents txtNumber As System.Windows.Forms.TextBox

    'В процедуре, в которой создаёшь текстбокс
    txtNumber=New System.Windows.Forms.TextBox
    txtNumber.Visible=true
    'Устанавливаем положение и размеры
    txtNumber.Left=...
    txtNumber.top=...
    txtnumber.width=...
    txtnumber.height=...

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

    Можно унаследовать предыдущий и делать все это с массивом.

    redim pres...
    txtNumber(index)=New txtNumber(index-1)
    txtNumber(index).top=txtNumber(index-1).top + сколько надо
    а чтоб появился надо добавить его в соответствующую коллекцию
    Controls
    и еще не забыть обработчик навесить, чтоб под ним тоже могло появляться.

        Алексей Вишневский

    наверх


    Как создать меню ( Файл, Правка ...)?

    Вопрос:

    Как создать меню ( Файл, Правка ...)?

    Ответ:

    Щелкни правой кнопкой мышки по форме: выбери пункт Menu Editor
    В Caption вводишь названия пунктов своего меню, в Name - имя-идентификатор для каждого пункта, например:
    Caption = Файл
    Name = mnuOpen
    Для создания каждого последующего пункта щелкай на Next
    Если в пункте меню должны быть еще раскрывающиеся подпункты щелкай на стрелочку вправо (появится ....)
    Для создания разделителя в Caption вводи - (знак минус)
    Вот и все твое меню готово. Жми ОК!
    Если меню должно быть всплывающим в твоей программе (скажем,появляться по нажатию правой кнопки мыши на форме) тогда первым пунктом добавь что-то типа Name = mnuPopUp, и сними флажок Visible, а все остальные пункты сделай подчиненными данному пункту (вложенными) и вызывай следующим образом


    Sub Form_MouseDown(Button As Integer,Shift As Integer, _
         X As Single,Y As Single)
         if button =2 then
            popupmenu mnuPopup
         end if
    End Sub

    Все события при щелчке на пунктах меню обрабатываются в MenuName_Click

        Сергей Л.

    наверх


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

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

    Вопросы:


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

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

       Как сделать импорт ия БД Access в текстовый файл?




    Ответы:


    Вопрос:

       Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
    Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long
    Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Long)

    С помощью этих трех функций можно отобразить окно выбора папки. Что нужно сделать чтобы в этом окне появилась кновпка Создать? По умолчанию ее там нет.

    Ответ:

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

    Здесь лежит пример контрола с созданием такого окошка с кнопкой "Новая папка": http://apexsun.narod.ru/vb/userctrls/comdlg.zip.


    Вопрос:

       Как в окно сообщения MessageBox добавить элемент управления CheckBox? Желательно чтобы не пришлось писать собственный контрол на эту тему.

    Ответ:

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

    Просто сделай свою форму, размести на ней все, что нужно, и вызови ее с параметром vbModal:

    yourForm.show vbmodal

    А результат получай через переменные public.



    Ответ:

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

    Никак! MsgBox - это API.


    Вопрос:

       Есть два вопроса.
    1 Как с помощью проги создать ярлыки с параметрами?
    2 Как выключить компьютер, перепробывал пару примеров, в том числе и на Vb .net, ничего не работает, функция проходит и на этом все.

    Ответ:

    Автор ответа: Сан Саныч

    Напиши мне. Кину пример по созданию ярлыков. Пример использует только стандартные системные функции и написан на VB6.


    Вопрос:

       Подкиньте, пожалуйста, пример для определения CRC32. А то на сайте ссылка не работает.

    Ответ:

    Автор ответа: P@Ssword

    Писал сам, всё работает, по умолчанию полином от WinRAR, у WinZIP другой
    :-(

    Dim CRCTable(0 To 255) As Long

    Sub InitCRC(Optional ByVal Polynomial = &HEDB88320)
    Dim Ind As Long, Pos As Long
    Dim CRC As Long, Bit As Long

         For Ind = 0 To 255
             CRC = Ind
             For Pos = 0 To 7
                 Bit = CRC And &H1
                 CRC = ((CRC And &HFFFFFFFE) \ &H2&) And &H7FFFFFFF
                 If Bit = &H1 Then CRC = CRC Xor Polynomial
             Next Pos
             CRCTable(Ind) = CRC
         Next Ind
    End Sub

    Function UpdateCRC(ByVal CRC As Long, ByVal bByte As Byte) As Long
         UpdateCRC = (((CRC And &HFFFFFF00) \ &H100&) And &HFFFFFF) Xor
    CRCTable((CRC And &HFF&) Xor bByte)
    End Function

    Function InvertCRC(ByVal CRC As Long) As Long
         CRC = CRC Xor &HFFFFFFFF
         InvertCRC = CRC
    End Function

    Работать так:
    InitCRC
    CRC = 0&
    CRC = InvertCRC(CRC)
    ...
    CRC = UpdateCRC(CRC,Bytes(Index))
    ...
    CRC = InvertCRC(CRC)

    Если интересует, есть басиковская реализация MD5 :-)


    Вопрос:

       У меня в переменной сохранен текст веб-страницы.
    Я вношу изменения в этот текст и вот вопрос: как теперь эту страницу исполнить в webbrowser?
    Я, конечно, могу сохранить на диск и загрузить с диска, но это мне не подходит.

    Ответ:

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

    Примерно так:

    wbrmain.document.navigate "about:blank"
    wbrmain.document.write ""
    wbrmain.document.body.innertext=strNewHTML

    В принципе, должно сработать. Способ не оптимальный, но...

    PS Если у тебя изначально документ загружен в wbrMain, то ты сможешь изменять его через wbrMain.


    Вопрос:

       Необходимо, чтобы в процедуру подставлялась формула, введённая пользователем. Т.е. например, в TextBox вводится формула: 5*x^2+12. Процедура следующая:

    Private Sub Command1_Click()
    x=0
    For i = 1 to 10
    y(i)=text1
    List1.AddItem Format(y(i), "0.00000")
    x=x+1
    next
    End Sub

    Пробовал возиться с функцией EbExecuteLine, но либо я с ней не разобрался, либо она для этого не годится. В место х она подставляет 0 и в итоге ListBox заполнен цифрой 12. Если кто-нибудь сталкивался с такой задачей, то поделитесь успехами с народом. Он Вас не забудет.

    Ответ:

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

    Можешь воспользоваться методом Eval объекта Microsoft Script Control 1.0

    Private Sub Command1_Click()
        Dim sngCurX As Single, sngCurY As Single
        Dim sBuf As String, iPosX As Integer
        Dim MSScript As MSScriptControl.ScriptControl
        Set MSScript = New MSScriptControl.ScriptControl
        If Len(Me.Text1) = 0 Then MsgBox "Введи формулу!": End
        If Len(Me.Text2) = 0 Then MsgBox "Введи начальное значение Х": End
        If Len(Me.Text3) = 0 Then MsgBox "Введи конечное значение Х": End
        If Len(Me.Text4) = 0 Then MsgBox "Введи приращение по Х": End
        iPosX = InStr(1, UCase$(Me.Text1), "X")
        If iPosX = 0 Then MsgBox "В формуле отсутствует переменная Х!": End
        
        Me.List1.Clear
        MSScript.Language = "VBScript"
        For sngCurX = Me.Text2 To Me.Text3 Step Me.Text4
           sBuf = Left$(Me.Text1, iPosX - 1) & Str(sngCurX) & Mid$(Me.Text1, iPosX + 1)
           sngCurY = MSScript.Eval(sBuf)
           Me.List1.AddItem Format$(sngCurX, "#0.000") & " : " & Format$(sngCurY, "#0.000")
        Next
        Set MSScript = Nothing
    End Sub


    Вопрос:

       Как народ умудряется писать такие маленькие контролы? У меня меньше 100Кб не получается (хотя подобный занимает 25)

    Ответ:

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

    Сожми ее. Например, UPX или ASPack.



    Ответ:

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

    Может, народ использует другую среду разработки?


    Вопрос:

       А что значит Option Compare Text?

    Ответ:

    Автор ответа: Сан Саныч

    Это значит забить на регистр сравниваемых строк во всем модуле. Т.е. если ты в заголовке формы пропишешь Option Compare Text и в какой-нить процедуре будешь сравнивать например А=а то это выражение будет истинным.



    Ответ:

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

    По-моему это значит, что при сравнении строк регистр не будет иметь значение, т.е. "VB"="vb".



    Ответ:

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

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



    Ответ:

    Автор ответа: P@Ssword

    Это значит, что ("TEXT" = "TeXt") = True




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

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

    наверх


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

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