Тепер напишемо обробник OnMouseDown для нашої картинки:
У цій ділянці коду перевіряється якою кнопкою натиснули на картинку. Якщо лівої, то запам'ятовуємо координати, а якщо будь-який інший, то переміщати не можна. Тепер напишемо обробник OnMouseMove для нашої картинки:
Ну і нарешті обробник OnMouseUp для нашої картинки буде таким:
Тут все дуже просто. Коли кнопка відпускається, то змінної move присвоюється значення false, щоб до наступного кліка по картинці її не можна було зрушити. Цей спосіб досить простий, як для розуміння, так і для реалізації. Але такий же алгоритм переміщення можна реалізувати трохи красивіше. У деяких компонентів, в тому числі і Image, є така класна процедура SetBounds (Left, Top, Width, Height), яка може змінювати відразу всі чотири параметра. Таким чином подія OnMouseMove можна змінити так:
Але є ще один дуже цікавий вихід: по екрану можна переміщати не саму картинку, а тільки її рамку, коли користувач вибере місце для картинки і відпустить кнопку - вона туди переміститися. Для цього нам знадобиться ще одна глобальна змінна: rec: TRect, яка буде зберігати параметри картинки. Тепер злегка змінимо обробники подій для картинки. Таким чином все в цілому буде виглядати так:
Оскільки DrawFocusRect малює рамку методом Xor, то при повторному виклику цієї функції з тими ж параметрами, рамка стирається. Цей дуже красивий метод додасть у ваші програми багато цікавого. Так що користуйтеся.