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


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

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

       Обратите внимание на раздел "Диск".
    Читайте!


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




    Диск

       Представляем новый CD от проекта "Сообщество чайников"!

       На диске размещены вопросы и ответы на них по материалам системы «Эксперт» и эхоконференций СообЧа в количестве более 9000 шт. (вместе с тем, на сайте СообЧа расположено лишь до 2000). Рассматриваются более 100 тем компьютерной деятельности. Вот приблизительные количества вопросов по самым распространенным темам:

    • железо (1800)
    • операционные системы (2200)
    • интернет (1000)
    • Delphi (700)
    • веб-программирование (600)
    • Visual Basic (500)
    • игры (500)
    • MS Office (400)
       Помимо вопросов и ответов в качестве бесплатного приложения на диске имеются:

    • Подборка электронных журналов о компьютерах Izone и AboutPC.
    • Самый необходимый софт: .NET Framework 1.1, MDAC 2.8.
    • Подборка полезных программ: тестирование железа, читкоды и уровни для игр и многое другое.
    • Подборка статей и фишек.

       Диск представляет собой минидиск с внешним диаметром 80 мм. Такой диск читается любым CD-приводом, для этого на выдвижном лотке привода имеется углубление.

       Стоимость диска (сключая почтовые расходы) - 80 рублей. Диск распространяется по почте наложенным платежом. Оплата в почтовом отделении при получении.
       Заказть диск можно здесь: http://www.vbnet.ru/vbshop/cart.asp?add=6.

    наверх


    Как ловить нажатие системных клавиш?

    Вопрос:

    Как поймать нажатия системных клавиш типа Del, Esc, F5?

    Ответ:

    Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
       MsgBox KeyCode
    End Sub


        .::Savenger::.

    vbKeyDelete, vbKeyEscape, vbKeyF5 и т.д. соответственно.

    А если хочешь хнать побольше таких констант - залезай в Object Browser и ищи это: библиотека VBRUN, Класс KeyCodeConstants

    Или в коде напиши:
    if KeyCode=VBRUN.KeyCodeConstants. (и тут выпадет списочек констант).

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

    наверх


    Как на сервере по http открыть файл?

    Вопрос:

    Как на сервере по http открыть файл и содержжимое поместить в текстбокс?

    Ответ:

    Ставь лучше не просто текстбокс а Microsoft RichTextBox, он слова переносит сам.
    И еще понадобится Microsoft Internet Transfer Control.
    А теперь пиши куда надо эту строку:

    RichTextBox1.Text = Inet1.OpenURL("http://komifree.ru/avans/", icString)

        FELIX-RUS

    наверх


    Как поменять местами слова?

    Вопрос:

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

    Ответ:

    Dim masTemp() As String
    masTemp() = Split(Text1.Text, chr$(32))
    Text1.Text = masTemp(0) & " " & masTemp(2) & " " & masTemp(1)

        .::Savenger::.

    наверх


    Как в VB осуществить считывание данных с прибора (по Com-порту)?

    Вопрос:

    Есть прибор, соединённый с компом через СОМ порт. Как в VB осуществить считывание данных с прибора?

    Ответ:

    Делал я такое. Прибор считывал даные 8 пар датчиков а я с компа забирал эти даные и рисовал графики высчитывал нагрузки и все такое (для спортсменов), основная процедура выглядит так:

    'zdesia ja tipa iniciliziruju komport
    'muzno otpravit' komandu komportu i poslat' ustroistvu komandu na peredaciu danih
    Public Sub Komand(COMport, First, Second, What)
         MSComm3.CommPort = Right(COMport, 1)
         MSComm3.Settings = "9600,N,8,1"
         MSComm3.InputLen = 0
         On Error Resume Next
         MSComm3.PortOpen = True ' Open the port.
         If Err Then
            MsgBox "Sаsaja nepriima. Pakeiskite sаsajos numeri."
            'tut vivoditsia soobsenie esli com port zaniat
            'eto bivaet esli Comport = 1 a v jom sidit mishka :)
            Exit Sub
         End If
         eil = Right(What, Len(What) - 4)
         Call Check(eil, CheckSum) 'scitaju cheksumu
         Eilute = "" 'skidivaem strochku, Eilute dolzna bit' global
         MSComm3.Output = Chr$(First) + Chr$(First) + What + Chr$(Second) + Chr$(Second) + CheckSum
         'vistavliaju komandu v komport
    End Sub
      
    'a tut mi prinimaem danie, ves fokus v tom cto v VB string mozet bit\ beskonecnim, poka ram'a hvatit :)
    'dlia cego eto nuzno? Prosto komport prinimaet hren znaet kak :) vsnisle kogda 6 bit kogda 8 i ja resil prosto
    'vigribat' iznego vsio cto est' i skladivat' v strochku a potom ejo analiziruju
    Public Sub MSComm3_OnComm()
    Dim Instring As String
         Select Case MSComm3.CommEvent 'zdem sobitija cto cto to knam prishlo
            Case comEvReceive 'prijom (ostalnie naidesh v MSDN)
                     Instring = MSComm3.Input 'hvataem skoka est' v bufere (bufer automaticiski stanovitsia pustim)
                     Eilute = Eilute & Instring 'sumiruem v beskonecnost' (ja do 1Mb prinimal)
                     l.Text = Eilute
                     a = Right(Instring, 3) 'tut ja iskal simvol konca peredaci poskolku komport nuzno zakrit' pered
    'novim k nemu obraseniem, u menia toka tak polucilos' :) mozet mozno i podrugomu no mne togda bilo ne do krasati :)
    'kak pridumal tak i sdelal :)
                     If Left(a, 1) = Chr$(3) Or (Right(a, 1) = Chr$(3) And Mid(a, 2, 1) = Chr$(3)) Then
                         MSComm3.PortOpen = False
                         Call Rashyk(Eilute) 'otpravliaju na analiz
                     End If
         End Select
    End Sub
    'tut ja dekodiruju info, neznaju kak tam u tia s usloviem no avos' prigoditsia
    Public Sub Rashyk(Eilute)
         Me.MousePointer = 0
         Eilute = Mid(Eilute, 11, Len(Eilute) - 10 - 4)
         DoEvents
         MsgBox "Viskas. Siuntimas baigtas."
         Open Text1.Text + ".SPM" For Output As #2
         Call ReadIni(WorkDir, COMport, Dist1, Dist2, Dist3, Dist4, Dist5, Dist6, Dist7, Dist8)
         Print #2, "[Irashu kiekis]"
         Print #2, kiek.Caption
         Print #2, ""
         Print #2, "[Diskretiskumas]"
         Print #2, disk
         Print #2, ""
         Print #2, "[Atstumai]"
         Print #2, Dist1
         Print #2, Dist2
         Print #2, Dist3
         Print #2, Dist4
         Print #2, Dist5
         Print #2, Dist6
         Print #2, Dist7
         Print #2, Dist8
         Print #2, ""
         Print #2, "[Duomenys]"
         f = ""
         k = 0
         For n = 1 To Len(Eilute) Step 2
             abcd = Mid(Eilute, n, 2)
             a = Left(abcd, 1)
             b = Right(abcd, 1)
             c = a
             If a = "A" Then c = 10
             If a = "B" Then c = 11
             If a = "C" Then c = 12
             If a = "D" Then c = 13
             If a = "E" Then c = 14
             If a = "F" Then c = 15
             d = b
             If b = "A" Then d = 10
             If b = "B" Then d = 11
             If b = "C" Then d = 12
             If b = "D" Then d = 13
             If b = "E" Then d = 14
             If b = "F" Then d = 15
             e = d * 16 + c
             k = k + 1
             f = f + Str(e) + ","
             If k = 3 Then
                 k = 0
                 Print #2, Left(f, Len(f) - 1)
                 f = ""
             End If
         Next n
         Close #2
         Call Grafikas(Text1.Text)
    End Sub

        Kvark

    наверх


    Как узнать размер кэш второго уровня [L2] процессора из VB в Windows XP?

    Вопрос:

    Как узнать размер кэш второго уровня [L2] процессора из VB в Windows XP?

    Ответ:

    Следующий пример выводит размер и скорость кеша L2 в Immediate (для всех процессоров в системе !). Если надо получить информацию о другой машине в сети - замените localhost на соответствующее имя.

    В Project:References надо предварительно выбрать "Microsoft WMI Scripting ... Library"

    Dim WMIService As SWbemServicesEx, Processors As SWbemObjectSet
    Dim Processor As SWbemObjectEx

    Set WMIService = GetObject("winmgmts:\\localhost\root\cimv2")
    Set Processors = WMIService.ExecQuery("Select * from Win32_Processor", ,48)
      
    For Each Processor In Processors
         With Processor
             Debug.Print String(20, "-")
             Debug.Print .Name & ", " & .CurrentClockSpeed & "MHz"
             Debug.Print "L2Cache: " & .L2CacheSize & "Kb L2Speed: " & _
             .L2CacheSpeed & "MHz"
         End With
    Next

    Но работать будет скорее всего только в XP/2K.

        Andrey Shchekin [darXeth]

    наверх


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

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

    Вопросы:


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

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

       Некоторые АПИ требуют чтобы им передали хэндл события. А как это сделать методами VB? Если я объявил событие, как извлечь его логический номер (хэндл)?


    Автор вопроса: Артем

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

       Кто знает адрес, желательно в Украине, идеал dp.ua, где можно скачать последний Service Pack для VS6? С Мелко-мягких за ночь по выделенке с полной загрузкой Flashgetа качается не более 20%, а до следующей ночи противные админы все недокачанные задания удаляют.


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

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

       Я пишу аудио плеер и мне надо узнать исполнителя, название песни и её длину.


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

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

       Как програмно свернуть окно?


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

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

       Есть форма. На ней ComboBox (поле со списком). Как при нажатии кнопки списка вывести в этом списке календарь, как в Windows 98 при поиске файлов на вкладке "Дата" между такой и такой? Если можно примерчик или ссылку.


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

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

       У меня два вопроса, касающиеся MS Access:
    1. можно ли в форме средствами VB создавать контролы (например текстбоксы). При этом следует отметить, чтобы форма находилась в режиме просмотра, а не в режиме проектирования. Т.е. хотелось бы поиметь динамически создаваемые контролы для формы в MDE (т.к. там форму нельзя открыть в режиме проектирования).

    2. В базе есть одна форма. Каким образом можно на экране открыть несколько раз эту форму. Думаю, что нужно создать класс формы. Пробовал, но ничего не получется.


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

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

       В PictureBox нарисовал несколько линий методом Line. Как мне сохранить изображение (с линиями) в .bmp файл?


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

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

       Как через VB и API управлять перемещать указатель мыши и генерировать нажатия клавиш/прокрутку колес?


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

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

       У меня возникла огромная проблема, надеюсь лучшие умы рассылки помогут мне, а то хана. Бацаю программу для работы с расписанием(проходит процесс тестирования) Когда создавал не обратил внимания на проблему, что user-type не может быть больше 32 кб
      
    Type Raspisanie
         Название_предмета(62) As String * 53
         Практика_Лекция(62) As String * 8
         Имя_преподавателей(62) As String * 50
         Дата(6) As String * 2
         Время1(8) As String * 2
         Время2(8) As String * 2
         Время3(8) As String * 2
         Время4(8) As String * 2
         Время5(8) As String * 2
         Время6(8) As String * 2
         Время7(8) As String * 2
         Время8(8) As String * 2
         Неделя As String * 10
         Месяц As String * 10
    End Type

    Я его конечно подогнал под 32 кб, но хочется что-бы Название_предмета и Имя_преподавателей были бы по больше. Прикинул типа разбить на несколько типов

    Type Raspisanie_a
         Практика_Лекция(62) As String * 8
         Дата(6) As String * 2
         Время1(8) As String * 2
         Время2(8) As String * 2
         Время3(8) As String * 2
         Время4(8) As String * 2
         Время5(8) As String * 2
         Время6(8) As String * 2
         Время7(8) As String * 2
         Время8(8) As String * 2
         Неделя As String * 10
         Месяц As String * 10
    End Type
    Type Raspisanie_b
         Имя_преподавателей(62) As String * 150
    End Type
    Type Raspisanie_c
         Название_предмета(62) As String * 150
    End Type

    И тут поперли проблемы
    Если объявлять в одной процедуре несколько переменных каждого типа пишет что суммарный размер всех переменных не должен превышать 64 кб если они static, или если dim то слишком много Dim'ов. Помогите как мне перебачить и код сильно не ломать.


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

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

       Можно ли выдернуть из файла иконку и использовать её в программе?


    Автор вопроса: Владимир

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

       При работе с базой данных появляется сообщение "Run-time error '7' Out of memory" Как можно перехватить это сообщение или же как очищать эту самую память программно?


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

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

       Проблема такая: в чужую программу посылаются данные через SendKeys, сначала посылается SendKeys "{Enter}", чтобы открыть форму, в которую посылаются данные, сгенерированные в цикле, а затем посылеатся SendKeys "{Enter}", чтобы эти данные ввести. Затем в чужой проге появляется MsgBox, сообщающий, что данные введены, в нём и состоит вся проблема, т.к., если посылать на него тоже "{Enter}", то на восьмом прогоне цикла, происходит ошиба на строке, где фокус переходит на самое первое окно чужой проги, с которой нужно открыть форму для ввода данных, но почему то MsgBox с сообщение об успешном вводе остаётся, т.е. "{Enter}" на него почему то не был послан и весь цикл запарывается.


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

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

       Нужен серверок (в виде ДЛЛ), который бы предоставлял программные средства для работы с модемом или платой с АОН. Т. е. набор номера, дозвон, принятие звонка, выдача номера звонившего и т. п.


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

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

       Как заставить компьютер влючаться и выключаться в заданное время? Безусловно такой вопрос задавался вам не раз но я не нашел код в вашей рассылке, хотя читаю ее довольно давно. Может быть я что и пропустил? Помогите пожалуйста.




    Ответы:


    Вопрос:

       Есть ли какой-нибудь грид, в поле которого можно вставлять картинку?

    Ответ:

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

    Есть msflexgrid. Вставить картинку в поле:

             with msflexgrid1
                     .row=1
                     .col=1
                     Set .CellPicture = LoadResPicture(201, vbResBitmap)
             end with


    Вопрос:

       Я тут накопал, что в VBA (Visual Basic for Applications) для Акцесса для импорта из XML в БД есть процедура ImportXML. Еще я ияобрел, что там же есть какое-то волшебное слово DoCmd, позволяющее, цитирую: "выполнять макрокоманды в процедурах Visual Basic. Для выполнения макрокоманды в программе следует включить метод объекта DoCmd в процедуру. Большинству макрокоманд соответствуют методы DoCmd, имена которых совпадают с английскими именами макрокоманд." Вопрос в следующем: Как все это перевести на нормальный VB?

    Ответ:

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

    Программа AccessToVB переводит большую часть вариантов DoCmd в обычный VB, как и другие элементы базы, типа форм, отчетов. Но обычно еще полученный код надо доводить до ума вручную.



    Ответ:

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

    А зачем? Метод DoCmd только повторяет возможности макросов в акцессе, а их используют те, кому лень набрать несколько строк с клавиатуры, или не знают, как.


    Вопрос:

       Как переключить раскладку клавиатуры на украинский язык?

    Ответ:

    Автор ответа: Sergey Y. Tkachev

    ' Установить раскладку
    Public Declare Function LoadKeyboardLayout Lib "user32" Alias _
         "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal flags As
    Long) As Long
    ' Получить текущую раскладку
    Public Declare Function GetKeyboardLayoutName& Lib "user32" Alias _
         "GetKeyboardLayoutNameA" (ByVal pwszKLID As String)

    Dim strUserKLID As Sting
    LoadKeyboardLayout "00000422", 1
    GetKeyboardLayoutName strUserKLID




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

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

    наверх


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

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