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

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


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

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


VBNet VBMania
Ссылки:

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

        Сергей Л.



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

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

    Вопросы:


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

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

       Нужно в строке "<--+7123456789" или "+7123456789" оставить только цифры. Можно конечно обрезанием, но кажется есть такой оператор который сам оставляет только цифры.


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

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

       Наблюдаются проблеммы с данной функцией:
    ExecuteLine = EbExecuteLine(StrPtr(sCode), 0&, 0&, Abs(fCheckOnly)) = 0 (я взял пример отсюда Visual Basic: новости сайтов, советы, примеры кодов. Выпуск 93)
    Когда я запускаю проект из окна редактора все нормально, но как только я компилю проект в exe файл и запускаю его то виндовс говорит что программа выполнила некорекную операцию и будет закрыта. Вы не подмкажете в чем туту дело?


    Автор вопроса: Дамир

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

       Столкнулся с такой проблемой. Написал программу на VB6. Установлена на 50 компьютерах. Время от времени на некоторых комп-ах возникает ошибка. Определил, что возникает она из-за того, что свойство формы ScaleHeight принимает значение 0. При попытке установить свойство формы принудительно, т.е. пишу frmDisplay.ScaleHeight = 10000, возникает ошибка. Такое ощущкение будто программа в каой-то момент перестает понимать это свойство. Лечится только переустановкой программы. Может кто-нибудь сталкивался с подобной проблемой.


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

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

       Надо ли при выходе из программы уничтожать переменные и ссылки на объект.


    Автор вопроса: 3DanD

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

       Короче, такое дело... Хочу получить хэндл окон (textbox и listbox) в чужом приложении. Для этого ставлю хук на мышь:
    hHandle = SetWindowsHookEx(WH_MOUSE, AddressOf GetMouse, App.hInstance, 0)
    Почему при переходе на другое приложение хук отключается? Даже если перейду обратно на свое, все равно не работает? Если вояможно, как это исправить? И если кто-нить янает, может, как-нибудь яамутить получение хэндла как в SpyXX?


    Автор вопроса: Sergey Vasischev

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

       Подскажите как в Access'е из VB отправлять информацию на матричный принтер, т.е. - есть ли какая-нибудь функция, вроде:
    PrintString("Hello World"), которая указанную строчку запишет в LPT-порт.


    Автор вопроса: Bullet [PCLO]

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

       Как сохранить изображение в jpg формате? Ну всмысле влом кодить, может есть у кого готовая библиотека?




    Ответы:


    Вопрос:

       Как узнать, какая раскладка клавиатуры включена в данный момент? (rus или eng). Переключать умею.

    Ответ:

    Автор ответа: Иван Зенин

    Private Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" (ByVal pwszKLID As String) As Long
    Private Sub Command_Click()
    Dim KeybLayoutName As String
    KeybLayoutName = String(9, 0)
    GetKeyboardLayoutName KeybLayoutName
    '409 for eng, 419 for rus
    MsgBox "KeyBoard Layout Number is " & CStr(CLng(Left$(KeybLayoutName, InStr(1, KeybLayoutName, Chr(0)) - 1)))
    End Sub


    Вопрос:

       Как получить полный путь к дочернему элементу в TreeView?

    Ответ:

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

    Поскольку неизвестно, в какой форме нужен выходной результат (массив, строка
    ключей и т.п.), то предлагаю процедуру, которая проходит весь нужный путь.
    Скорректируй её так, чтобы получить необходимый выходной результат. Место
    помечено.
    ' Equates to retrieving the hItem of the treeview's first item with
    ' TVM_GETNEXTITEM/TVGN_ROOT. (Treeview1.Nodes(1)
    ' or Treeview1.Nodes(1).Root do *not* necessarily return the
    ' treeview's very first node!)
    Public Function GetFirstTVNode(objTV As TreeView) As Node
       Dim nod As Node

       On Error GoTo NoNodes

       ' Will err here if there are no treeview nodes
       Set nod = objTV.Nodes(1)

       ' Get the first node's highest parent node
       Do While (nod.Parent Is Nothing) = False
         Set nod = nod.Parent '======== здесь впору вставить необходмые
    строку/строки, достраивающию результат на каждом шаге
       Loop

       ' Return the highest parent node's first sibling
       Set GetFirstTVNode = nod.FirstSibling

    NoNodes:
    End Function



    Ответ:

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

    TreeView1.selecteditem.fullpath


    Вопрос:

       Как правильно создать библиотку dll? допустим, у меня в этой библиотеке есть функция Shutdown, выключаящая комп. Как вызвать её из библиотеки?

    Ответ:

    Автор ответа: Кудрявцев Вячеслав

    В библиотеке (в начале) должно быть событие Event MyEvent() которое эта библиотека ожидает. В принципе не обязательно чтоб имя события совподало с именем твоей функции.



    Ответ:

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

    Создаешь проект ActiveX DLL в классе пишешь код своей функции, выбираешь MAKE MyClass.DLL в другом проекта выбираешь меню Preferense там ищешь свою библиотеку или указываешь на нее. Ставишь галочку. В коде проекта пишешь Dim aa as new MyClass.Class1. Потом пишешь aa.Shutdown. Или Dim aa as MyClass.Class1, Set aa=new MyClass.Class1, aa.Shutdown




    Ответ:

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

    Это чудо ПО ШАГАМ даже изложено в том же MSDN. Смотри раздел "Creating an ActiveX DLL".
    Также примеры этого даются самой МС с разных боков: "ActXDoc (ActXDoc.vbp)" & CallDlls "(CallDlls.vbp)".
    В разделе "Accessing DLLs and the Windows API" соответствующие варианты. Сколько раз говорят: читайте, читайте...




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

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

    наверх


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

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

    http://subscribe.ru/
    E-mail: ask@subscribe.ru
    Адрес подписки
    Отписаться

    В избранное