скрыть

скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Google  
 

TOutline - Перетащи и брось 3



Проблема заключается в том, что прежде, чем windows сможет обработать сообщение WM_MouseUp, курсор мыши передвинется дальше. Вот решение этой головоломки:

  1. Разрешите Windows как можно скорее обработатывать события мыши:

  2. OnMouseDown:
    BeginDrag(False);
    while ... do
    begin
    Application.ProccessMessages; { это позволяет Windows обработать }
    { все сообщения за один шаг }
    end;
    

    Комментарий:

    Обратите пристальное внимание при создании цикла, если вы используете цикл типа 'while', то вы должны предусмотреть возможность выхода из него, например, при закрытии приложения, или других действий пользователя, требующих экстренного выхода из тела цикла.

  3. Аналогично:

  4. OnMouseDown:
    BeginDrag(False);
    Application.ProccessMessages;
    while ... do
    begin
    { единственный шаг обработки }
    end;
    

    Убедитесь в правильности работы кода.

  5. Переместите вызов BeginDrag в обработчик события OmMouseMove.





Copyright © 2004-2018 "Delphi Sources". Delphi World FAQ


Delphi 10.1 Berlin

Delphi 10.1 Berlin — самый быстрый способ создавать и обновлять интенсивно работающие с данными, распределенные и сильно взаимодействующие приложения с развитым и визуально привлекательным пользовательским интерфейсом для Windows 10, Mac, мобильных устройств, IoT и других платформ.



Группа ВКонтакте   Facebook   Ссылка на Twitter