Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2015, 22:28   #1
Тоба
Пользователь
 
Регистрация: 16.05.2011
Сообщений: 86
По умолчанию Много TImage - при перемещении тормоза

Здравствуйте,
Вообщем "допиливаю напильником" свои пазлы.
Есть один нюанс:
Если картинка разбивается на большое количество ячеек(TImage-в них png-шки), то при перемещении мышью(по сэндеру) текущего TImage явные тормоза.
Если картинка разбивается где-то до 300-400 ячеек - ещё вроде терпимо, а на большее кол-во уже фигня.
Вообщем, чем большее ТИмеджей, тем тормознутей они таскаются.
Пробовал деактивировать все кроме текущего(который перемещаем) - не помогает, и ещё некоторые способы - короче тормоза
Есть ли какое-нибудь решение этой беды.
Тоба вне форума Ответить с цитированием
Старый 09.10.2015, 23:06   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,647
По умолчанию

Надо на канве рисовать, а не городить огород с тысячами имеджей.
Arigato на форуме Ответить с цитированием
Старый 09.10.2015, 23:16   #3
Тоба
Пользователь
 
Регистрация: 16.05.2011
Сообщений: 86
По умолчанию

А как тогда узнать по какому кликнули, один может нарисоваться поверх другого, они ж при разбитии рандомно раскидываются(в твоём случае будут рисоваться)
Тоба вне форума Ответить с цитированием
Старый 09.10.2015, 23:45   #4
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,647
По умолчанию

Так каждая пазла в своей ячейке? Тогда определить можно посредством простого расчета координат.
Arigato на форуме Ответить с цитированием
Старый 09.10.2015, 23:48   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Да, рисовать на канвас. И 400 пазл по-моему запредельно, пол дня собирать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 10.10.2015, 00:19   #6
Тоба
Пользователь
 
Регистрация: 16.05.2011
Сообщений: 86
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
Тогда определить можно посредством простого расчета координат.
Каким образом.
Попался пользователь псих с кучей свободного времени
Выбрал сложный уровень, в реальном времени показывается на сколько ячеек будет разбито изображение.
Изображение, допустим разбилось на 700 ячеек(пазликов)
В моём случае- динамически создаётся аналогичное кол-во TImage
Все 700 рандомно раскидались по форме + перевернулись на 90..270 градусов, размеры всех ячеек одинаковые, кроме последнего правого рядя и самого нижнего.
Мы можем кликнуть на любой, левой кнопкой - таскаем, правой - поворачиваем.
Если все 700 нарисовать на канве(не важно какой(формы, битмапа...))
Один, а то и более может нарисоваться сверху другого, точно по тем же координатам и всё - ку-ку, как его выбрать, перевернуть, если его пиксели перерисованы другой ячейкой.
Если бы все рисовались отдельно друг от друга, то не вопрос - координаты + ширина и высота каждого будут лежать в массиве, щёлкнул мышью по нарисованному, проверил координаты, ага это такой-то,... ассигнул в единственный TImage и таскай себе.

Цитата:
Сообщение от Аватар Посмотреть сообщение
Да, рисовать на канвас. И 400 пазл по-моему запредельно, пол дня собирать
Ну у пользователя есть выбор, он может разбить картинку на 4 ячейки а может и на 800(при этом размер каждой ячейки будут примерно 40х40 px)
................................... ................................... .............................
Вариант с канвой вроде как и логичный, но ИМХО не подойдёт.

Последний раз редактировалось Stilet; 10.10.2015 в 08:34.
Тоба вне форума Ответить с цитированием
Старый 10.10.2015, 01:17   #7
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,894
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Да, рисовать на канвас. И 400 пазл по-моему запредельно, пол дня собирать
Вроде слыхал когда-то, что некоторые психотерапевты советуют.
northener вне форума Ответить с цитированием
Старый 10.10.2015, 03:47   #8
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

Цитата:
Один, а то и более может нарисоваться сверху другого, точно по тем же координатам и всё - ку-ку, как его выбрать, перевернуть, если его пиксели перерисованы другой ячейкой.
А если у вас куча TImage то типа не рисуются один сверху другого что ли? А как тогда, м?))

Массив/списка записей/классов в которых координаты, TGraphic, и прочее. Пробегаете по массиву. Вызываете функцию проверяющую HitTest, если попалось - прерываете цикл, запоминаете на кого тыкнули, если надо перемещаете в начало массива/списка.
Ничего сложного по сути.
ResourceSpace вне форума Ответить с цитированием
Старый 10.10.2015, 04:05   #9
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

По поводу перетаскивания нарисованных на канве объектов - тыкай сюда.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 10.10.2015, 19:18   #10
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,647
По умолчанию

Цитата:
Сообщение от Тоба Посмотреть сообщение
Каким образом.
Если у вас ячейки могут быть в произвольных координатах (не в сетке), то это получается набор спрайтов. Заводите динамический массив или список, для каждой ячейки сохраняете координаты, размеры, картинку. Отрисовывается все это перебором и выводом на BitMap, который после отрисовки визуализируется на форме (рисовать сразу на форме не советую, будет не быстрее кучи имеджей).

Определить ячейку куда кликнули аналогичным образом - пробежаться по всем и посмотреть, в какую область попадают координаты мышки. Только цикл не от начала к концу, а от конца к началу.

Случай, когда одна ячейка перекрывает другую. Советую ту ячейку, которую двигает пользователь, перемещать в конец списка, тогда она всегда будет сверху (если рисовать от начала к концу). Если она полностью перекрыла нижнюю ячейку (что маловероятно, это еще постараться надо), тогда это проблемы пользователя, он всегда может сдвинуть верхнюю ячейку и получить доступ к нижней.

Если надо реализовать прилипание ячеек друг к другу, то тут тоже ничего сложного, такой же цикл по всем ячейкам и поиск той, которая находится на заданном для прилипания расстоянии.
Arigato на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Мерцание панельки, при перемещении. stalker1995s Общие вопросы Delphi 12 04.08.2013 15:04
Много TImage bunukar Помощь студентам 13 12.04.2011 11:31
Перезапись при копировании/перемещении Shouldercannon Общие вопросы Delphi 4 12.09.2010 02:32
Моргает label при перемещении Maxs Компоненты Delphi 21 26.11.2009 19:57
Процедура при перемещении формы Alex Cones Общие вопросы Delphi 7 28.07.2009 09:11