тільки корисні матеріали
Головний акціонер 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.