![]() |
|
![]() ![]() ![]() |
|
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Ситуация такая.
На форме есть панель, где отображается некий рисунок (созданный заранее и сохраненный в формате bmp). База возможных рисунков - велика. Всегда отображается только один из них, в зависимости от установки соответствующего показателя. Например в комбобоксе 100 итемов, выбрали 1 - получили на панели рисунок 1, выбрали 54 итем - на панели отобразился рисунок соответствующий этой позиции. Пока что я решаю эту проблему помещением каждого рисунка в свой Image. При выборе из комбобокса определенного итема, нужный Image ставлю в visible=true, все остальные рисунки - visible=false. Метод неудобный, учитывая большое количество рисунков. Как бы это дело оптимизировать? Неплохо было бы создать файл ресурсов и загружать оттуда картинки всего в один Image в зависимости от выбранного итема в комбобоксе. Но в Image из файла ресурсов картинки не грузятся. Только через задание объекта Graphics::TBitmap и копирование с канвы на канву. Можно ли как-то подругому организовать вывод картинки из множества? Смежный вопрос. Надо распечатать содержимое панели, где у меня выводится рисунок. Сейчас я смотрю, какой из Image имеет visible=true - тот и печатаю. Получается довольно объемистый код, что неудобно. Жалко что панель не имеет канвы, тогда можно было бы печатать ее содержимое... Как можно проще организовать выяснение того, какой именно рисунок в данный момент прорисован на моей панели? |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 18 Всего: 135 |
Зачем отображать на панели, если для этого есть TPicture, у которого есть TPicture::LoadFromFile
ИМХО каждый раз подгружать нужный рисунок из файла более универсально, т.к. их можно будет менять "на лету" без пересборки ресурсов -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Так у меня на панели лежат Image, а у них тоже такой метод есть. Только при этом все файлы рисунков должны находиться на жестком диске. А хотелось бы чтобы все было скомпоновано в один exe файл. |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 18 Всего: 135 |
тогда можешь попробовать запихнуть все рисунки в TImageList и затем вызывать TImageList::Draw или TImageList::GetBitmap
но, всё-таки по-моему лучше держать рисунки отдельно от exe-шника. think about it ![]() -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
Нитонисе |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Так это по-моему то же самое что запихнуть их в файл ресурсов, разместить на панели всего один Image и на его канву копировать битмап из файла ресурсов соответствующий выбранному итему из комбобокса.
И чем это лучше? |
||||
|
|||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 18 Всего: 135 |
абсолютно то же самое. просто TImageList - удобная обёртка к ресурсам. Рисунки можно добавлять визуально. ну, я не знаю задачи, но, например, можно сделать разные темы (skeen'ы), выбирая тот или иной каталог с рисунками. Темы могут пополняться силами пользователя. Если ничего этого не нужно, то IMHO TImageList - оптимальное решение. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
vikaz |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 869 Регистрация: 15.2.2006 Репутация: 10 Всего: 12 |
Хм, я то думал это очевидно..... 1. Рисунки можно менять в любое время; 2. При смене рисунка не нужно перекомпилировать проект; 3. Exe файл содержит только код, что уменьшает его объем в разы; 4. Прогамма будет запускаться намного быстрее.
Это только при условии, что все картинки имеют одинаковый размер. Если они отличаются, то ImageList будет подгонять картинки под размер заданный в свойствах компоненты
Одно из здравых решений! Тем более, что из описания я понял, что Вам нужно отображать только один файл из множества. Если так, то задача решается очень просто и быстро! -------------------- ![]() Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ |
||||
|
|||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
А чем TPicture отличается от TImage? Мне не хочется иметь отдельную папку с рисунками. Все они для внутреннего пользования программы и не предполагается их изменение пользователями. То есть большой набор нужных для работы картинок. Если их хранить в отдельных файлах и вдруг какой-то из них потеряется - программа работать не будет. Потому лучше пусть все будет в exe. |
|||
|
||||
vikaz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 869 Регистрация: 15.2.2006 Репутация: 10 Всего: 12 |
Тогда нужно более точно формулировать то, что Вы хотите получить! TImage наследует TPicture! -------------------- ![]() Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ |
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Формулирую. Есть панель, где мне нужно отображать картинку. Возможных картинок - много (допустим сотня). Всегда отображается только одна картинка из всех. Какая именно картинка отображается - решается выбранным итемом из комбобокса. Как я сейчас решаю это. На каждую картинку у меня свой TImage (таким образом на панели лежит сотня имейджев). При выборе итема в комбобоксе я соответсвующий имейдж делаю visible=true, а все остальные visible=false. Код получается большой и неудобный. |
|||
|
||||
vikaz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 869 Регистрация: 15.2.2006 Репутация: 10 Всего: 12 |
а можно скриншот на это дело? Я просто понять не могу, зачем для внутреннего использования нужно 100 картинок да еще и с выбором определенной! Эти картинки все одного размера?
-------------------- ![]() Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ |
|||
|
||||
XPyCT |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 24.8.2007 Где: Moldova Репутация: 10 Всего: 10 |
Почитайте книгу С.Бобровского!
Самоучитель программирования с++ в среде Borland C++ Builder 5 А именно второй пример создание карточной игры пасьянс! там на примере показано как работать с калодой карт из 52 + 2 шт, используя компонент ImageList И все ваши вопросы отпадут! Это сообщение отредактировал(а) XPyCT - 20.3.2010, 12:59 |
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
![]() Скриншот с вариацией на эту тему. На панели размещена картинка - это расчетная схема узла (программа вообще расчетная). Сверху 13 кнопок - возможные типы узлов. При этом каждый узел имеет свои модификации, в зависимости от других настроек. В данном случае у каждого узла две модификации, таким образом всего возможно 26 различных расчетных схем. И как следствие - на панели лежит 26 имейджев, в каждый из которых загружена одна из картинок. При нажатии на кнопку программа смотрит что указывает настройка модификаций и отображает один из двух вариантов узлов, соответствующих этой кнопке. |
|||
|
||||
vikaz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 869 Регистрация: 15.2.2006 Репутация: 10 Всего: 12 |
1. ImageList Вам в помощь ну или упаковывайте все ресурс, хотя ImageList так и делает!
2. Переведите картинки из BMP, допустим в PNG, это уменьшит их объем -------------------- ![]() Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ |
|||
|
||||
Нитонисе |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Так а какой мне прок от ImageList? Я бы хотел чтобы у меня на панели был всего один Image. Значит мне нужно будет в зависимости от нажатой кнопки загружать на канву этого Image картинку из ImageList? Напрямую они грузятся туда? Если через файл ресурсов, то напрямую точно не грузится.
Они итак небольшие, по 11-12 Кб, PNG не пойдет, так как я использую сфойство Transparent=true, оно только у bmp файлов работает. |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |