На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual Basic: Общие вопросы
Здесь обсуждаются вопросы по языку Visual Basic 1-6 (а так же по схожим языкам, как, например, PowerBASIC).
Вопросы по Visual Basic .NET (это который входит в состав Visual Studio 2002/2003/2005/2008+, для тех, кто не в курсе) обсуждаются в разделе .NET.

Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что Вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются. Студенты, вам сюда: ПОМОЩЬ СТУДЕНТАМ!
4. Используйте теги [ code=vba ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Формулируйте свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной (и более) давности, без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта user posted image FAQ Раздела user posted image Кладовка user posted image Наши Исходники user posted image API-Guide user posted image Поиск по Разделу user posted image MSDN Library Online user posted image Google

Ваше мнение о модераторах: user posted image SCINER, user posted image B.V.
Модераторы: SCINER, B.V.
  
> Аналог DoEvents на API
    Доброго времени суток! Подскажите, пожалуйста, как мне команду DoEvents заменить API-функциями, т.е. какие API-функции надо использовать, чтобы получить тот же эффект, что и при DoEvents?
      ExpandedWrap disabled
        Private Declare Function TranslateMessage Lib "user32.dll" (ByRef lpMsg As MSG) As Long
        Private Declare Function DispatchMessage Lib "user32.dll" Alias "DispatchMessageA" (ByRef lpMsg As MSG) As Long
        Private Declare Function PeekMessage Lib "user32.dll" Alias "PeekMessageA" (ByRef lpMsg As MSG, ByVal hwnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, ByVal wRemoveMsg As Long) As Long
        Private Const PM_REMOVE As Long = &H1
         
        Private Type POINTAPI
          x As Long
          y As Long
        End Type
         
        Private Type MSG
          hwnd As Long
          message As Long
          wParam As Long
          lParam As Long
          time As Long
          pt As POINTAPI
        End Type
         
        Private Sub MyDoEvents()
          Dim AMsg As Msg
          Do While PeekMessage(AMsg, 0&, 0&, 0&, PM_REMOVE)
            TranslateMessage AMsg
            DispatchMessage AMsg
          Loop
        End Sub
        Filka, спасибо, буду пробовать!
          Filka, только DoEvents в VB6 - это функция, возвращающая число загруженных форм в проекте.
            Mikle, мне надо, чтобы при обработке сложной продолжительной задачи программа выводила на экран прогресс, например, выполнено 15%, а не повисала.
              А зачем аналог DoEvents? Чем плоха стандартная процедура?
              Объясните пожалуйста ни разу не грамотному :)
                mamonoff, я хочу сравнить скорость выполнения команды DoEvents и собственной функции. И так, в принципе, неплохо было бы знать, как это всё устроено!
                  http://bbs.vbstreets.ru/viewtopic.php?f=1&t=41820

                  Добавлено
                  Цитата mamonoff @
                  А зачем аналог DoEvents? Чем плоха стандартная процедура?
                  Объясните пожалуйста ни разу не грамотному

                  По моей ссылке - есть как раз обсуждение этого
                    Артур, спасибо!
                      Вот тебе и тест.


                      На API процентов на 20 быстрее у меня на компе выполняется.
                      Прикреплённый файлПрикреплённый файлDoeventsAPI.rar (1,96 Кбайт, скачиваний: 613)
                      Сообщение отредактировано: Seriy-Coder -
                        Seriy-Coder, спасибо большое!
                          Граждане, объясните, пожалуйста, как физически работает этот цикл.
                            Цитата salieri @
                            Граждане, объясните, пожалуйста, как физически работает этот цикл

                            "Физически":
                            PeekMesage проверяет, есть ли сообщение в очереди, и если есть, то извлекает его (PM_REMOVE).
                            TranslateMessage анализирует сообщения WM_KEYDOWN на предмет нажатия символьных клавиш и транслирует их в сообщения WM_CHAR (добавляет в очередь).
                            DspatchMessage вызывает процедуру окна, которому адресовано сообщение.
                            В итоге этот цикл обрабатывает все сообщения, имеющиеся\накопившиеся в очереди с момента предыдущего вызова
                              Не все, а только те, которые адресованы какому-то окну.
                                Цитата B.V. @
                                Не все, а только те, которые адресованы какому-то окну.

                                "Один пишем, два в уме"? ;)
                                К чему относится это замечание?
                                Если в PeekMessage параметр hWnd = NULL (как в #2), то из очереди извлекаются сообщения, адресованные всем окнам потока (в том числе и thread message c hWnd=NULL)
                                  Цитата leo @
                                  К чему относится это замечание?

                                  К тому, что утверждение
                                  Цитата leo @
                                  цикл обрабатывает все сообщения

                                  не совсем корректно. Сообщения для потока будут благополучно теряться
                                  Цитата MSDN
                                  As a general rule, messages that are not associated with a window cannot be dispatched by the DispatchMessage function. Therefore, if the recipient thread is in a modal loop (as used by MessageBox or DialogBox), the messages will be lost.
                                    Цитата B.V. @
                                    не совсем корректно. Сообщения для потока будут благополучно теряться

                                    :yes:
                                      Всем спасибо большое!

                                      Сообщения были разделены в тему "Флуд"
                                      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                      0 пользователей:


                                      Рейтинг@Mail.ru
                                      [ Script execution time: 0,0794 ]   [ 19 queries used ]   [ Generated: 16.04.24, 16:09 GMT ]