Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
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.
Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay