Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Ваш интернет-бизнес" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
← Декабрь 2005 → | ||||||
2
|
4
|
|||||
---|---|---|---|---|---|---|
5
|
6
|
7
|
8
|
9
|
10
|
|
12
|
13
|
14
|
15
|
16
|
18
|
|
19
|
20
|
21
|
22
|
23
|
25
|
|
26
|
27
|
28
|
29
|
30
|
31
|
Статистика
-1 за неделю
ExCode.ru - программирование на высоком уровне - выпуск 20
Информационный Канал Subscribe.Ru |
ExCode.ru - программирование на высоком уровне | ||||||||||||||||||||
Выпуск №20 ( 2005.12.11 )
|
||||||||||||||||||||
Здравствуйте, уважаемые подписчики!Сегодня уже 11 декабря, а это значит, что наш конкурс все еще продолжается. К сожалению участников не так много как хотелось бы. Вот они:
Alias MAYA - полная коллекция Autodesk 2006 Borland JBuilder 2006 + Premium tools для Windows,Linux и Solaris Red Hat Enterprise Linux Интернет 2006 Математика и статистика Полная коллекция программ от Macromedia Программы для WEB-дизайна Профессиональное создание анимации Суперколлекция текстур - 1100 штук Лидер продаж: Microsoft Visual Studio 2005.NET Цена одного DVD - 300 руб. Доставка по всей России. |
||||||||||||||||||||
Новости копьютерного мира:
|
||||||||||||||||||||
Статья номера:
Перемещение изображения по форме с помощью мышиАвтор: Ижогин Ян Валерьевич
Во время работы над одной программой предо мной встала задача организации перемещения нескольких изображений пользователем с помощью мыши. Я не крутой мастер DELPHI, и найденное мною решение не претендует на полноту, его недостатки я рассмотрю ниже, но я надеюсь, что опыт, приобретённый при решении будет полезен читателю. Итак, задача. На форме размещены несколько изображений, загружаемых из внешних файлов (их имена 1.bmp, 2.bmp и т.д.). Изображения должны быть перемещаемыми с помощью мыши. Первое решение, пришедшее мне в голову - это решение "в лоб". Разместив на форме несколько Image, заставим их перемещаться вместе с мышью. Разместим на форме в нужных нам местах несколько (n) пустых Image, присвоим их свойству Tag значения от 1 до n - это пригодится при создании массива из них. Объявим следующие переменные:
Для первого из наших Image создадим обработчики следующих событий
Обратите внимание, что перемещается не Image1, а Sender. Созданные нами процедуры будут применены для обработки перемещений всех изображений на форме. Для этого в процедуре создания формы запишем все Image на форме в массив Pic
Итак, полученный код позволяет разместить на форме n изображений и перемещать их с помощью мыши. Можно удовлетвориться полученным решением,если бы не одна страшная проблема - МЕРЦАНИЕ. Я не большой мастер DELPHI, и я не знаю общего способа, как победить мерцание. Вообще, у меня возникло ощущение, что при перемещеннии Image по форме мерцания не избежать. Буду благодарен тому, кто покажет обратное. Ну в общем применение известных способов, например
или процедуры Invalidate мне не помогло. Следующим моим шагом было посещение Мастеров Дельфи, где я прочёл статью Михаила Христосенко "Перемещение Image'a по форме во время работы программы". Применение метода
в процедуре Image1MouseMove, рекомендованое Михаилом привело к снижению мерцания, но не избавило от него. Более того, в взрослых программах, таких как например само DELPHI,применяется третий из описанных Михаилом способов - перемещение не изображения, а его рамки. Тогда я задумался, а не является ли применение TImage для перемещения изображения по форме тупиком. И тут я понял, что знаю компонент, на котором можно разместить изображение, и который не мерцает "по определению". Этот компонент (да простят меня Мастера Дельфи) - форма. Итак следующий проект состоит из двух форм - FormMain и ImageForm. На ImageForm размещён пустой Image1, занимающий всю клиентскую область ImageForm. ImageForm относится к Available forms - это действие не принципиально, но экономит во время запуска приложения около 100 кб памяти. Свойство BorderStyle для ImageForm устанавливаем bsNone. Для того, чтобы ImageForm перемещалась за Image1 создаём следующую процедуру:
На этом работа над ImageForm заканчивается. Возвращаемся к FormMain. Сделаем следующие объявления
Теперь нам нужно создать массив Fa, разместить его на форме и заполнить его изображениями. Всё это делается вручную - фокус с Tag тут уже не пройдёт. Делать это лучше не во время создания формы, а например во время активации.
Другой вариант - разместить на форме Timer с незначительным интервалом и разместить вышеприведённый код в процедуре OnTimer, указав в конце Timer1.Enabled:=false; Последний штрих - установите "Отображать содержимое окна при его перетаскивании" с помощью следующей процедуры
В FormCreate включите следующее
Ура! В созданная таким образом программе перемещаемые изображения не мерцают. Однако объём памяти, занимаемый ею во время работы весьма велик. Программа состоящая из вышеприведённых процедур занимает на диске около 400 кб, а в ОП - порядка 2 мб. Попробую поискать менее ресурсоёмкое решение. Ну вот и всё. Надеюсь, вам понравится. Обругать меня вы можете по адресу yanval@yandex.ru C Уважением. Ян Валерьевич. Новые статьи на сайте ExCode.ru: |
||||||||||||||||||||
Subscribe.Ru
Поддержка подписчиков Другие рассылки этой тематики Другие рассылки этого автора |
Подписан адрес:
Код этой рассылки: comp.soft.prog.excode Архив рассылки |
Отписаться
Вспомнить пароль |
В избранное | ||