Переміщення зображень формою за допомогою миші
Переміщення зображень формою за допомогою миші
Зміст матеріалу
Отже, отриманий код дозволяє розмістити на формі n зображень та переміщати їх за допомогою миші. Можна задовольнитись отриманим рішенням, якби не одна страшна проблема – МЕХАННЯ.
Я не великий майстер DELPHI, і я не знаю загального способу, як перемогти мерехтіння. Загалом у мене виникло відчуття, що при переміщенні Image за формою мерехтіння не уникнути. Буду вдячний тому, хто покаже протилежне. Ну загалом застосування відомих способів, наприклад
MainForm.ControlStyle := MainForm.ControlStyle + [csOpaque];
або процедури Invalidate мені не допомогло.
Наступним моїм кроком було відвідування Майстерів Дельфі, де я прочитав статтю Михайла Христосенка "Переміщення Image'a формою під час роботи програми". Застосування методу
(Sender as TImage).SetBounds((Sender as TImage).Left + x - x0, (Sender as
TImage).Top + y - y0, (Sender as TImage).width, (Sender as TImage).height);
у процедурі Image1MouseMove, рекомендоване Михайлом призвело до зниження мерехтіння, але не позбавило його. Більше того, у дорослих програмах, таких як саме DELPHI, застосовується третій з описаних Михайлом способів - переміщення не зображення, а його рамки.
Тоді я задумався, а чи не є застосування TImage для переміщення зображення формою глухим кутом. І тут я зрозумів, що знаю компонент, на якому можна розмістити зображення, і який не мерехтить "за визначенням". Цей компонент (хай вибачать мене Майстра Дельфі) – форма.
Отже наступний проект і двох форм - FormMain і ImageForm. На ImageForm розміщений порожній Image1, який займає всю клієнтську область ImageForm. ImageForm відноситься до Available forms - ця дія не принципова, алезаощаджує під час запуску програми близько 100 кб пам'яті. Властивість BorderStyle для ImageForm встановлюємо bsNone.
Для того, щоб ImageForm переміщалася за Image1, створюємо таку процедуру: