Delphi уроки drag & drop, вчимося перетягувати картинку за формою

тільки корисні матеріали

Головний акціонер Alibaba став найбагатшою людиною в Китаї
статті

Microsoft почала закрите тестування Office 16
статті

Фахівці знайшли діри в безпеці Windows 8.1
статті

У московському метро з'явиться єдина мобільна мережа
статті

eBay буде приймати Bitcoin
статті

Vivitek представила «шкільний» проектор D755WTIR
статті

У Твіттері з'явилася кнопка «Купити»
статті

«Яндекс.Новини» тепер можна переглядати і на iPhone
статті

У цьому уроці будемо вчитися за допомогою мишки перетягувати за формою компонент Image.

1. Створюємо новий проект на форму кидаємо компонент Image з закладки Additional. Відразу завантажте в image яку ні будь картинку!

2. Для початку давайте визначимося з тим яким чином користувач буде переміщати об'єкт по формі. Я пропоную зробити так: якщо натиснута кнопка мишки і утримується клавіша Ctrl то можемо перетягувати. Для цього на компоненті Image створюємо обробник подій OnMouseDown, в якому пропишемо ось такий рядок

if ssCtrl in Shift then Image1.BeginDrag (True);

Т.е при натисканні кнопки мишки перевіряємо умову: якщо натиснута клавіша CTRL то можемо перетягувати

Під час перетягування компонента Image над формою, а також при відпуску кнопки, у Форми виникає подія:
OnDragOver - В якому ми повинні сказати формі чи прийме вона даний елемент (В нашому випадку Image)

Отже, створимо на формі обробник подій OnDragOver і в ньому пропишемо ось такий рядок

Accept: = (Source is TImage); // Дозволяємо приймати компонент Image

3. Тепер нам залишилося лише повідомити програмі що потрібно робити, коли користувач відпустив кнопку тобто завершив перетягування. Для цих цілей існує подія OnDragDrop В обробник цієї події передаються параметри Source (об'єкт-джерело) і X і Y координати курсору. Загалом створюємо обробник подій OnDragDrop на формі і між begin. end пишемо:

if Source is TImage then // Якщо перетягуємо компонент Image то
begin
TImage (Source) .Left: = X; // Перемістити компонент Image в координати // курсору по X
TImage (Source) .Top: = Y; // Перемістити компонент Image в координати // курсору по Y
end;

Ось і все можите запускатися. Якщо хто не зрозумів навіщо потрібна така функція, наведу простий приклад - це все рівно що використовувати пам'ятники з граніту і мармуру тут начебто важкі, але в той же час без них не як не обійтися. те ж саме і в сучасній програмі без перетягування (DragDrop) нікуди!

P.S. Повний код прикладу:

procedure TForm1.FormDragDrop (Sender, Source: TObject; X, Y: Integer);
begin
if Source is TImage then
begin
TImage (Source) .Left: = X;
TImage (Source) .Top: = Y;
end;
end;

procedure TForm1.FormDragOver (Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept: = (Source is TImage);
end;

procedure TForm1.Image1MouseDown (Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if ssCtrl in Shift then Image1.BeginDrag (True);
end;

До зустрічі Delphi Expert.ru.