TOutline - Перетащи и брось 3
Проблема заключается в том, что прежде, чем windows сможет обработать сообщение WM_MouseUp, курсор мыши передвинется дальше. Вот решение этой головоломки:
- Разрешите Windows как можно скорее обработатывать события мыши:
- Аналогично:
- Переместите вызов BeginDrag в обработчик события OmMouseMove.
OnMouseDown:
BeginDrag(False);
while ... do
begin
Application.ProccessMessages; { это позволяет Windows обработать }
{ все сообщения за один шаг }
end;
|
Комментарий:
Обратите пристальное внимание при создании цикла, если вы используете цикл типа 'while', то вы должны предусмотреть возможность выхода из него, например, при закрытии приложения, или других действий пользователя, требующих экстренного выхода из тела цикла.
OnMouseDown:
BeginDrag(False);
Application.ProccessMessages;
while ... do
begin
{ единственный шаг обработки }
end;
|
Убедитесь в правильности работы кода.