![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Veitmen |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 288 Регистрация: 10.11.2006 Где: СПБ Репутация: нет Всего: 4 |
Привет всем.
Я делаю САПР редактор электрических, долбанных. схем. Резисторы там всякие и подобная лабудень... Алгоритм такой: выбираем элемент, кликаем, он прорисовывается, при этом в БД сохраняеются его координаты и внешний ключ на таблицу всех элементов, В этой таблице его имя и его Битмап. Когда удаляю элемент, или что нибудь типа этого делаю, то удаляю элемент из БД, закрашиваю область, делаю выборку из таблицы с координатами, потом делаю выборку по внешнему ключу и загружаю картинки элемента. После этого его прорисовываю. и так пока все не прорисую. Проблема в том что если элементов не мало, то процесс перерисовки длится очень долго. Я тут подумал и решил что проще будет если динамически создавать TImage и в каждый загружать картинку, тогда перерисовку делать не придется. А можно будет работать с каждой картинкой как с отдельным объектом, а не с Canvas, как я делаю это сейчас. Короче понял я это и еще понял что всю программу почти придется переделывать. Вот и хочу спросить, может быть можно как нибудь по другому ускорить процесс перерисовки? Закрашивать только один элемент нельзя, может закраситься и другой. Хотя можно попробовать написать алгоритм который будет смотреть есть ли в закрашенной области еще элементы. Но это по моему не выход, это из гранотомета мух бить. Короче предлагайте чего нибудь. Может с памятью как нибудь поработать? Может Канвас можно сохранять, а потом его восстанавливать? Буду признателен за любую помощь. |
|||
|
||||
| Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: 14 Всего: 78 |
А может вместо TBitmap использовать TCanvas, а в таблице хранить просто координаты рисования элементов.
-------------------- Ll 2 |
|||
|
||||
| Veitmen |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 288 Регистрация: 10.11.2006 Где: СПБ Репутация: нет Всего: 4 |
Тут короче так: 1 - Таблица: ID,Type_El,Picture 2 - Таблица: ID,координаты,FK_ПЕРВОЙ_ТАБЛИЦЫ В первой храняться просто все типы элементов, во второй храняться нарисованные элементы. Рисую я их через канвас, если ты это имел ввиду. Через процедуру.
И для каждого объекта таблицы 2 вызывается эта функция. И когда их много, то все очень долго. Это сообщение отредактировал(а) Veitmen - 11.11.2006, 21:12 |
||||
|
|||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Veitmen, удобно для этого использовать компонент TImageList. Все элементы (если они одинакового размера) рисуются на одном битмапе, а затем загружаются в TImageList. Теперь к кажому элементу легко обратится по его индексу. Этот способ очень быстрый.
p.s. Если не все картинки одного размера, то можно сделать несколько TImageList, в каждом из которых будут изображения одинакового размера. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Veitmen |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 288 Регистрация: 10.11.2006 Где: СПБ Репутация: нет Всего: 4 |
Хм... А мне кажется долго не из за загрузки картинок, а их прорисовки. Вот. Даже если я буду использовать лист, то все равно каждую картинку, а их на схеме около пятидисяти минимум, надо прорисовывать отдельно.
Это все равно цикл, где берем координаты и !!КАЖДУЮ!! картику прорисовываем. Я думаю прирост если и будет то не большой. Но идею я думаю можно попробовать. Но вот беда вся в том, что моя прога может расширяться за счет бд. И очень просто. И картинку для каждого нового элемента можно указать и она сохраняется в базе. Мне это не помешает в реализации расширения БД?? Да и на безопасности,хранение картинок в папках, не скажется очень положительно. Я хочу вот что узнать, можно как нибудь сделать, ну типа бекапа моего Канваса? А потом просто загружать его? Это сообщение отредактировал(а) Veitmen - 11.11.2006, 22:06 |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Я предлагаю вообще отказаться от БД. Обращение к БД слишком медленное оно и тормозит прорисовку. Отрисовка очень быстрая...
И что тут сложного. Дорисовать картинку и все. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Veitmen |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 288 Регистрация: 10.11.2006 Где: СПБ Репутация: нет Всего: 4 |
Не соглашусь. Тогда мне придется записывать все параметры в файл. В ини например. Ну и где произойдет быстрее выборка? У меня через запрос с жестким критерием поиска, или полный поиск в ИНИ файле, со считыванием данных и всех координат?
Хотя может я не прав, но у меня такая точка зрения.ъ Да и что касается размеров битмапа, то он тоже может быть разный. Я вот все больше склоняюсь к динамическому созданию TImage и последующей загрузкой моего битмапа IMage.Picture.BItmap. Тогда вообще с каждой картинкой я смогу работать как с отдельным объектом. Как это откликнется? Это нормальное действие или нет? |
|||
|
||||
| Alexeis |
|
||||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Зачем? Если же картинки одинакового размера. Эту работу за вас делает TImageList автоматически.
Даже если и записывать координаты в ини файл, то кто мешает их считать сразу в массив и работать с ним. У вас же не 100000 различных рисунков -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
| Veitmen |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 288 Регистрация: 10.11.2006 Где: СПБ Репутация: нет Всего: 4 |
alexeis1, Да ты прав. картинки можно подогнать... Да, можно попробовать чего нить придумать.) Спасибо народ, вставили мне мозги на место!) Спасибо всем!)
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |