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

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


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

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


VBNet VBMania
Ссылки:

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

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

       Это новый выпуск.
    Читайте!


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




    Aslof рекомендует

       Ищешь фильм?
    http://subscribe.ru/catalog/rest.cinema.filmforyou
    Сайт рассылки - http://aslof.balzer.ru/


    Внимание!

       Внимание всем, кто хочет помочь в создании на сайте VBNet справочника по Windows API! В настоящее время ведется набор команды, которая будет создавать справочник. Принимаются почти все желающие! Особо активные, приславшие большое количество описаний функций, получат призы от сайта и будут включены в список авторов справочника.
       Работа ведется следующим образом:
       Вы выбираете категорию описываемых функций и присылаете мне ее название. Я закрепляю ее за вами и высылаю специальную базу данных, в которую вы набиваете свои описания. Затем высылаете ее мне и я выкладываю на сайте общую базу. Можно описывать не всю категорию полностью, а только часть ее функций. Закрепление категории необходимо для того, чтобы не было повторений.
       Спешите, пока еще есть незанятые категории функций! Оценить как это будет выглядеть потом на сайте, можно здесь: http://www.vbnet.ru/winapi/showfunction.asp?id=6

       P.S. Реально ли сделать хороший справочник? Сейчас вас, подписчиков рассылки, более 7000 человек и если каждый опишет 1 функцию, то на сайте будет самый рульный и полный справочник по API.

       Родина Вас не забудет!

    наверх


    Какой код имеет клавиша Start?

    Вопрос:

    Подскажите, какой код у клавиши Start на клавиатуре.

    Ответ:

    Из онлайновой библиотеки MSDN :

    Platform SDK: Windows User Interface
    Virtual-Key Codes

    ....
    VK_LWIN 5B Left Windows key (Microsoft® Natural® keyboard)
    VK_RWIN 5C Right Windows key (Natural keyboard)
    ....

    Насколько я понимаю, это обе клавиши Start - левая и правая.

    Kirill

    наверх


    Как реализовать Grid, подобный окну свойств в Visual Basic?

    Вопрос:

    Как просто реализовать Grid, подобный тому, который в VB в окне свойств (с разворачивающимися в список строками, кнопками и т.д.)?

    Ответ:

    Просто не получится.
    Если нужен "продвинутый" grid, то стоит обратиться к разработчикам ActiveX компонент. Я бы посоветовал Infragistics или ComponentOne. Если говорить конкретнее, то можно использовать следующие гриды:

    Sheridan DataGrid
    ProtoView DataTable
    Infragistics UltraGrid
    Apex True DB Grid

    Каждый из них имеет свои достоинства и недостатки. Чтобы понять, какой из них подходиит лучше, нужно попробовать поработать с каждым.
    Ну, а если их не использовать, то придётся создавай свой грид. Думаю, что это потребует значительных затрат времени.

    Sergey Y. Tkachev

    наверх


    Как запустить документ Word из приложения на Visual Basic?

    Вопрос:

    Надо нажимая на кнопку, запустить документ MS Word. Как это сделать?

    Ответ:

    Dim FilePathName as String
    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    Const SW_SHOWNORMAL = 1

    FilePathName = "C:\MY_FOLDER\DOCUMENT1.DOC"
    ShellExecute Me.hwnd, vbNullString, FilePathName, vbNullString, "C:\", SW_SHOWNORMAL

    Sergey Y. Tkachev

    наверх


    Как создавать файлы справки (.hlp) ?

    Вопрос:

    Как создавать файлы справки (.hlp) ? И как сделать справку "Что это?"

    Ответ:

    Есть такая утилита фирмы Microsoft, называется Microsoft Help Workshop. Она идет в комплекте с Visual Studio 5 и Visual Studio 6. Создаешь файлы с текстом в формате rtf, при этом все линки и заголовки помечаешь особым образом, который достаточно хорошо описан в справке, а затем компилируешь их с помощью этой утилиты. Пробовал - работает.
    Чтобы сделать справку "Что это?" для контрола, нужно прописать ему свойство HelpContextID, в котором указать идентификатор раздела в справочной системе.
    Тот компилятор, о котором я говорил выше - нормальное приложение Windows. С Visual Studio 4 поставлялся немного другой, работающий в командной строке. Я долго пытался научиться с ним работать, но терпение мое скоро лопнуло. Сейчас есть нечто более модно-современное - Microsoft HTML Help Workshop. Из названия понятно, что тут rtf заменили на HTML, а сама справка будет иметь вид, очень приближенный к MSDN, а следовательно, требует Internet Explorer. Однако работать с ним ещё проще. Разобраться можно максимум за полдня. Да и скачать его с сайта Microsoft можно в любой момет (по-моему, около 3 МБ) Поставляется также с Service Pack 3 и выше.

    Sergey Y. Tkachev

    наверх


    Как работать с LPT портом на Visual Basic?

    Вопрос:

    Прошу помочь в написании кода для работы с LPT портом, необходимо: переслать байт в порт, управлять линией STROBE.

    Ответ:

    www.cepera.h1.ru . Там все посвящено устройствам подключения, не скажу что слишком просто, зато много.

    Кононенко Роман

    наверх


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

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

    Вопросы:


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

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

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


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

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

       Нужно вытащить адреса из адресной книги Аутлук Экспресс. Я нашёл в МСДН АПИ функции по этому поводу, но там такая мутатень: Кто пытался переводить, тот меня поймёт. Поэтому если у кого есть исходники на эту тему, то поделитесь пожайлуста. Или на кройняк укажите какие именно функции мне нужно использовать. Или может как-нить вытащить адреса напрямую из базы данных. Я смотрел на этот файл (вроде *.wab), но там всё зашифровано, может у кого есть код расшифровывающий этот файл. Короче поделитесь, плиз, всем чем можете.


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

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

       А реально ли сделать, чтобы к пунктам подменю добавить еще и иконки?


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

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

       Я уже спрашивал, но мне так толком и не объяснили: как все таки из VB60, а не из VBA работать с Excel документом. Чтобы иожно было и читать этот документ поячеечно и записывать в него так же.


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

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

       Каким образом можно из VB-программы открыть Excel-евский файл и запустить на выполнение макрос-VB, встроенный в этот файл.


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

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

       В VB для Excel создаю массив, заполняю его данными. Далее нужно осуществлять поиск выбранного значения по элементам массива и возвращать индекс найденного элемента массива. Хотелось бы использовать какую-либо функцию, а не перебирать сравнивая все элементы массива. Знаю, что в FoxPro существует масса функций для работы с массивами, а вот для VB что-то я не нашел.


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

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

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


    Автор вопроса: Олег

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

       Как, используя Visual Basic, можно управлять пользователями в Win2k, WinXp, например надо сделать, чтобы пользователь Гость был в группе Администраторы?


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

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

       Необходимо ввести баяу адресов, расположенную в файле .XLS, в таблицы в баяе ACCESS 2002.
    Имена листов в EXCEL соответствуют коду субъекта РФ .
    Для этого написал следующий код в VBA (ACCESS 2002).


    Public Function InpAdress()
    ' ф-ция испольяуется для ввода адресов ия файла *.XLS
    ' в таблицу Адреса
    Dim strFileName As String, qrAddress As QueryDef, rstAddress As Recordset
    Dim objAdr As Object, objSheet As Worksheet
    Dim lngChan As Long
    Dim i As Integer, m, intRow As Integer

    strFileName = FileDialog(, "Баяа данных адресов" & vbNullChar & "*.xls", _
       , "xls", "", "Выберите файл с баяой адресов", , True)
    If Len(strFileName) > 0 Then
             
             Set rstAddress = CurrentDb.OpenRecordset("Адреса")
             Set objAdr = GetObject(strFileName)
             lngChan = 0 'испольяуется для подсчета общего кол-ва введенных адресов
             With rstAddress
                 For i = 1 To objAdr.Worksheets.Count
                     intRow = 1
                     Do Until Len(objAdr.Worksheets(i).Cells(intRow, 2)) = 0 Or IsNull(Len(objAdr.Worksheets(i).Cells(intRow, 2)))
                         lngChan = lngChan + 1
                         m = SysCmd(acSysCmdSetStatus, _
                           "Обрабатывается строка (" & Str(lngChan) & ") " & Str(intRow) & ". Cубъект РФ " & Mid(objAdr.Worksheets(i).Name, 5) & " - " & objAdr.Worksheets(i).Cells(intRow, 1)) 'испольяуется для индикации процесса ввода адресов
                         .AddNew
                         .Fields("Индекс") = Left(objAdr.Worksheets(i).Cells(intRow, 2), .Fields("Индекс").Size)
                         .Fields("Город") = Left(objAdr.Worksheets(i).Cells(intRow, 1), .Fields("Город").Size)
                         .Fields("Субъект РФ") = Left(objAdr.Worksheets(i).Cells(intRow, 3), .Fields("Субъект РФ").Size)
                         .Update
                         intRow = intRow + 1
                         DoEvents
                     Loop
                 Next
             End With
             Set rstAddress = Nothing
             
             Beep
             m = SysCmd(acSysCmdSetStatus, "Ввод адресов яавершен !")
             Set objAdr = Nothing
         End If
    End If

    End Function


    Однако после ввода определенного числа адресов (чуть более 5000) ф-ция зависает, причем это не яависит от содержимого ячейки, на которой проияошло зависание. Если я меняю расположение листов в EXCEL файле, яависание происходит на другой ячейке, но после ввода того же количества адресов. В чем может быть причина ?
    Спасибо.

    P.S. Система Cel-600, ОЗУ 128 Мб, Win 98SE, Office XP


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

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

       Как в таблице (datagrid) сравнить два числовых поля?


    Автор вопроса: Роман

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

       Использую в ресурсах String Table. Там две колонки Id и Русский, в Id номера от 1 до 10, а в Русский текст. Добавляю еще колонку, но выбрать ее как Русский нельзя и как обратиться к ней не знаю, т.к. LoadResString использует только Id. Как работать со второй колонкой?




    Ответы:


    Вопрос:

       Как поменять кнопки мыши местами?

    Ответ:

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

    Private Declare Function SwapMouseButton Lib "user32" (ByVal bSwap As Long) As Long
    Private Sub Form_Load()
         'KPD-Team 1998
         'URL: http://www.allapi.net/
         'E-Mail: KPDTeam@Allapi.net
         'Swap the mouse buttons
         SwapMouseButton 1
         'Wait 10 seconds
         t = Timer
         Do: DoEvents: Loop Until Timer > t + 10
         'restore the mouse buttons
         SwapMouseButton 0
    End Sub


    Вопрос:

       Как изменить громкость?

    Ответ:

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

    В коде много интересного :)

    'This project needs a Common Dialog box, named 'CDBox'
    ' (To add the Common Dialog Box to your tools menu, go to Project->Components (or press CTRL-T)
    ' and select Microsoft Common Dialog control)
    Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
    Dim Alias As String
    Private Sub Form_Load()
         'KPD-Team 1998
         'URL: http://www.allapi.net/
         'E-Mail: KPDTeam@Allapi.net
         Const PlayTime = 10
         'Set the common dialog box' title
         CDBox.DialogTitle = "Choose your midi-file"
         'Set the filter
         CDBox.Filter = "Midi-files (*.mid)|*.mid"
         'Show the 'Open File'-dialog
         CDBox.ShowOpen
         'Extract an alias from the file
         Alias = Left$(CDBox.FileTitle, Len(CDBox.FileTitle) - 4)

         'play midi
         R% = mciSendString("OPEN " + CDBox.filename + " TYPE SEQUENCER ALIAS " + Alias, 0&, 0, 0)
         R% = mciSendString("PLAY " + Alias + " FROM 0", 0&, 0, 0)
         R% = mciSendString("CLOSE ANIMATION", 0&, 0, 0)

         'play midi for 10 secs
         t = Timer
         Do: DoEvents: Loop Until Timer > t + PlayTime

         'stop midi and close it
         R% = mciSendString("OPEN " + CDBox.filename + " TYPE SEQUENCER ALIAS " + Alias, 0&, 0, 0)
         R% = mciSendString&("STOP " + Alias, 0&, 0, 0)
         R% = mciSendString&("CLOSE ANIMATION", 0&, 0, 0)
    End Sub


    Вопрос:

       Как включить/выключить Caps Lock, Num Lock и Scroll Lock.

    Ответ:

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

    Клавиатура мигает лампочками. У меня в 98-м работала, в 2000-м - нет.

    Const VK_CAPITAL = &H14
    Const VK_NUMLOCK = &H90
    Const VK_SCROLL = &H91
    Const VK_USED = VK_SCROLL
    Private Type KeyboardBytes
          kbByte(0 To 255) As Byte
    End Type
    Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Long
    Private Declare Function GetKeyboardState Lib "user32" (kbArray As KeyboardBytes) As Long
    Private Declare Function SetKeyboardState Lib "user32" (kbArray As KeyboardBytes) As Long
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Dim kbArray As KeyboardBytes, CapsLock As Boolean, kbOld As KeyboardBytes
    Private Sub Form_Load()
         'KPD-Team 1999
         'URL: http://www.allapi.net/
         'E-Mail: KPDTeam@Allapi.net
         'Get the current keyboardstate
         GetKeyboardState kbOld
         'Hide the form
         Me.Hide
         MsgBox "Keep your eyes on the little num-, shift- and scrolllock lights on the keyboard."
         TurnOff VK_CAPITAL
         TurnOff VK_NUMLOCK
         TurnOff VK_SCROLL
         Sleep 1000
         TurnOn VK_NUMLOCK
         Sleep 100
         TurnOn VK_CAPITAL
         Sleep 100
         TurnOn VK_SCROLL
         Sleep 300
         TurnOff VK_NUMLOCK
         Sleep 100
         TurnOff VK_CAPITAL
         Sleep 100
         TurnOff VK_SCROLL
         Sleep 500
         TurnOn VK_NUMLOCK
         TurnOn VK_SCROLL
         Sleep 200
         TurnOff VK_NUMLOCK
         TurnOff VK_SCROLL
         Sleep 200
         TurnOn VK_NUMLOCK
         TurnOn VK_SCROLL
         Sleep 200
         TurnOff VK_NUMLOCK
         TurnOff VK_SCROLL
         Sleep 200
         TurnOn VK_CAPITAL
         Sleep 200
         TurnOff VK_CAPITAL
         Sleep 200
         TurnOn VK_CAPITAL
         Sleep 200
         TurnOff VK_CAPITAL
         Sleep 200
         TurnOn VK_NUMLOCK
         TurnOn VK_SCROLL
         Sleep 200
         TurnOff VK_NUMLOCK
         TurnOff VK_SCROLL
         Sleep 200
         TurnOn VK_NUMLOCK
         TurnOn VK_SCROLL
         Sleep 200
         TurnOff VK_NUMLOCK
         TurnOff VK_SCROLL
         Sleep 200
         TurnOn VK_CAPITAL
         Sleep 400
         TurnOff VK_CAPITAL
         Sleep 200
         TurnOn VK_NUMLOCK
         Sleep 100
         TurnOn VK_CAPITAL
         Sleep 100
         TurnOn VK_SCROLL
         Sleep 300
         TurnOff VK_SCROLL
         Sleep 100
         TurnOff VK_CAPITAL
         Sleep 100
         TurnOff VK_NUMLOCK
         Sleep 1000
         Unload Me
    End Sub
    Private Sub TurnOn(vkKey As Long)
         'Get the keyboard state
         GetKeyboardState kbArray
         'Change a key
         kbArray.kbByte(vkKey) = 1
         'Set the keyboard state
         SetKeyboardState kbArray
    End Sub
    Private Sub TurnOff(vkKey As Long)
         'Get the keyboard state
         GetKeyboardState kbArray
         'change a key
         kbArray.kbByte(vkKey) = 0
         'set the keyboard state
         SetKeyboardState kbArray
    End Sub
    Private Sub Form_Unload(Cancel As Integer)
         'restore the old keyboard state
         SetKeyboardState kbOld
    End Sub



    Ответ:

    Автор ответа: Василий aka Krot

       SendKeys Method
    See Also Applies To Example Specifics
    Sends keystrokes to the active application.
    expression.SendKeys(Keys, Wait)
    expression Optional. An expression that returns an Application object.
    Keys Required Variant. The key or key combination you want to send to the application, as text.
    Wait Optional Variant. True to have Microsoft Excel wait for the keys to be processed before returning control to the macro. False (or omitted) to continue running the macro without waiting for the keys to be processed.
    Remarks
    This method places keystrokes in a key buffer. In some cases, you must call this method before you call the method that will use the keystrokes. For example, to send a password to a dialog box, you must call the SendKeys method before you display the dialog box.
    The Keys argument can specify any single key or any key combined with ALT, CTRL, or SHIFT (or any combination of those keys). Each key is represented by one or more characters, such as "a" for the character a, or "{ENTER}" for the ENTER key.
    To specify characters that aren't displayed when you press the corresponding key (for example, ENTER or TAB), use the codes listed in the following table. Each code in the table represents one key on the keyboard.
    Key Code
    BACKSPACE {BACKSPACE} or {BS}
    BREAK {BREAK}
    CAPS LOCK {CAPSLOCK}
    CLEAR {CLEAR}
    DELETE or DEL {DELETE} or {DEL}
    DOWN ARROW {DOWN}
    END {END}
    ENTER (numeric keypad) {ENTER}
    ENTER ~ (tilde)
    ESC {ESCAPE} or {ESC}
    HELP {HELP}
    HOME {HOME}
    INS {INSERT}
    LEFT ARROW {LEFT}
    NUM LOCK {NUMLOCK}
    PAGE DOWN {PGDN}
    PAGE UP {PGUP}
    RETURN {RETURN}
    RIGHT ARROW {RIGHT}
    SCROLL LOCK {SCROLLLOCK}
    TAB {TAB}
    UP ARROW {UP}
    F1 through F15 {F1} through {F15}
    You can also specify keys combined with SHIFT and/or CTRL and/or ALT. To specify a key combined with another key or keys, use the following table.
    To combine a key with Precede the key code with
    SHIFT + (plus sign)
    CTRL ^ (caret)
    ALT % (percent sign)
    Example
    This example uses the SendKeys method to quit Microsoft Excel.
    Application.SendKeys("%fx")


    Вопрос:

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

    Ответ:

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

    Private Sub Form_Unload(Cancel As Integer)
         If MsgBox("Are tou sure?", vbYesNo, "Exit program") = vbNo Then Cancel = True
    End Sub



    Ответ:

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

    Private Sub Form_Unload(Cancel As Integer)
    If MsgBox("Вы действительно хотите закрыть программу?", _
        vbOKCancel + vbQuestion, "Супер-прога") = vbCancel Then Cancel = 1
    End Sub



    Ответ:

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

    Пиши в подпрограмму Form_QueryUnload:

         Msg = MsgBox ("Вы действительно хотите выйти?", vbQuestion + vb YesNo)
         If Msg = vbNo Then Cancel = 1




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

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

    наверх


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

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


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

    В избранное