Як обробити подія динамічно створеного компонента stack overflow російською

Є деяка кількість динамічно створених компонентів Image, які можна переміщати по формі наступним кодом:

Питання: А як змінити позицію виділеного Image, за допомогою використання процедури:

Пробував зробити щось на зразок цього:

Але не вийшло, помилка: Incompatible types: 'TObject' and 'Class reference'

UPD: Ця проблема усунена, тепер виникла нова: процедура застосовується до останнього доданому Image. Підкажіть, будь ласка, як застосувати процедуру до Image по якому був здійснений клік? Пробував щось робити з Tag, але нічого не вийшло.

заданий 31 Січня '16 о 12:00

Вам в процедуру up потрібно передати створений вами динамічний об'єкт. тобто Image1. судячи по найменуванню методу.

У наведеному ж коді, ви намагаєтеся передати в цю процедуру клас. а не об'єкт. Ви напевно не дуже чітко розумієте різницю між класом і об'єктом, тому і допустили таку помилку. Об'єкт - екземпляр класу і ви можете створити кілька об'єктів одного і того ж класу.

Щоб навести порядок в голові і розкласти все по поличках, рекомендую вдумливо ознайомитися з заміткою: Delphi. Урок 18. Класи і об'єкти

Якщо ж говорити саме про компонентах, а не про якихось абстрактних класах, то їх прабатьком є ​​клас TComponent, що є прямим нащадком класу TPersistent. Саме походять від TComponent класи є компонентами Delphi, в тому числі тими, що відображаються на палітрі компонент.

Тобто це звичайний клас. за винятком того, що він успадковується немає від TObject. а від TComponent. І з огляду на це обставини, не може бути "динамічно створеного компонента", як звучить у вашому запитанні. Все що створено - об'єкт.

В цілому як я і писав потрібно по onClick запам'ятовуємо елемент, по FormKeyUp переміщаємо його.

Для форми встановлюємо властивість KeyPreview = True. Для того щоб події натискання клавіш спершу пересилалися формі, а потім керованого компоненту.

Підключаємо модулі, якщо їх немає для кнопки, картинки і Generic списку.

Визначаємо тип TMoveDirection з напрямком руху:

Процедура переміщення Control'a з вказівкою напрямку

Подія ImageClickEvent яке відпрацьовує при натисканні мишкою

Мій алгоритм створення та побудови елементів. До речі img.Picture.Bitmap.LoadFromFile ( 'ball_blue.bmp'); служить для відображення картинки в TImage. Ніякого навантаження не несе.

Подія FormKeyUp. яке відпрацьовує при кліці будь-якою клавішею (Не забуваємо про KeyPreview = True для форми).

Створення і знищення списку з створеними об'єктами.

Код ні на що не претендує, проста реалізація завдання. Створюйте окремі класи, не використовуйте глобальні змінні.
Прийде час і я зроблю замітку на цю тему у себе в блозі

Схожі статті