Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/43: Рейтинг темы: голосов - 43, средняя оценка - 4.74
0 / 0 / 0
Регистрация: 12.04.2007
Сообщений: 3

Подключение файлов рисунков в исполняемый файл

12.04.2007, 22:03. Показов 8426. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Решил сделать с помощью компонента Image новую кнопку.
Кнопка должна иметь три состояния:
1) Не выделена (мышь не на ней)
2) Выделена, но не нажата
3) Нажата
Реализация удалась, но только приходится каждый раз подгружать картинки (различные состояния кнопки) из отдельной папки. Дак вот, хотелось бы узнать как можно сразу включить их в исполняемый файл, чтобы не нужно было при переносе ехе-шника на другой комп, переносить еще и папку с рисунками.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.04.2007, 22:03
Ответы с готовыми решениями:

Как включить txt файл в исполняемый файл?
Подскажите плиз как решить проблему, суть такова: в txt файле имеется таблица (разделитель - знак табуляции). Требуется зашить её внутрь...

Включить в исполняемый файл бинарный файл
Собственно задача такая - есть некая программа которая пишет BIN файл во внешнее устройство. Но пользователи иногда путают файлы при выборе...

Полноценный исполняемый файл
Доброго времени суток! Какие настройки в C++ Builder XE2 надо изменить, чтобы полученный .exe файл запускался на компах без билдера?

14
Администратор
 Аватар для mik-a-el
87848 / 53169 / 249
Регистрация: 10.04.2006
Сообщений: 13,764
13.04.2007, 10:12
Цитата Сообщение от Misty_head
Дак вот, хотелось бы узнать как можно сразу включить их в исполняемый файл, чтобы не нужно было при переносе ехе-шника на другой комп, переносить еще и папку с рисунками.
Добавь их в ресурсы.
Вручную в блокноте создаём файл с именем, например, "resource.rc".
Внутри формат такой:
[имя_ресурса_без_пробелов] [тип_ресурса_без_пробелов] "[имя файла]"

В него пишем, например:
BOLSHOI_FILE BIG_FILES "bigfile.txt"

Подключаем файл .rc к программе (Shift + F11 а там выбираем наш файл).

А где-то в программе:

Code
1
2
3
4
5
6
TResourceStream *res_stream = new TResourceStream(0,              // берём из нашего exe
                                                  "BOLSHOI_FILE", // имя ресурса
                                                  "BIG_FILES"     // тип ресурса
                                                  );
res_stream->SaveToFile("big_file.bin");
delete res_stream;
Таким образом, получаем наш "bigfile.txt", сохранённый под именем "big_file.bin".

Естественно, лучше сделать обработку исключений.
0
0 / 0 / 0
Регистрация: 12.04.2007
Сообщений: 3
14.04.2007, 22:01  [ТС]
Цитата Сообщение от mik-a-el Посмотреть сообщение
Таким образом, получаем наш "bigfile.txt", сохранённый под именем "big_file.bin".
Я все сделал... а теперь как мне обратиться к этим рисункам из программы?
Раньше я писал так: Image1->Picture->LoadFromFIle("close_butt_01.jpg")
А теперь как писать?
0
Администратор
 Аватар для mik-a-el
87848 / 53169 / 249
Регистрация: 10.04.2006
Сообщений: 13,764
16.04.2007, 10:01
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 //Вариант 1 - загрузка функцией LoadFromResourceName()
 Image1->Picture->Bitmap->LoadFromResourceName
                           ((int)HInstance,"Bitmap1");
 //Вариант 2 - загрузка функцией LoadImage()
 HBITMAP hBmp=LoadImage(GetModuleHandle(NULL),
                     "Bitmap1",IMAGE_BITMAP,0,0,
                     LR_COPYFROMRESOURCE | LR_DEFAULTCOLOR | 
                     LR_CREATEDIBSECTION);
 if(hBmp == 0) 
  ShowMessage("Картинка не загружена");
 else
  Image1->Picture->Bitmap->Handle=hBmp;
 
 //Вариант 3 - через использование TBitmap
 Graphics::TBitmap* ptBitmap;
 ptBitmap = new Graphics::TBitmap();
 ptBitmap->LoadFromResourceName((int)HInstance,"Bitmap1");
 Image1->Width=ptBitmap->Width;
 Image1->Height=ptBitmap->Height;
 //И отобразить несколькими способами
 // a).
 Image1->Picture->Bitmap->Assign((TPersistent*)ptBitmap);
 // b).
 BitBlt(Image1->Canvas->Handle,0,0,ptBitmap->Width,ptBitmap->Height,
          ptBitmap->Canvas->Handle,0,0,SRCCOPY);
 // c).
 Image1->Canvas->Draw(0,0,ptBitmap);
0
0 / 0 / 0
Регистрация: 12.04.2007
Сообщений: 3
16.04.2007, 20:43  [ТС]
Короче, если кому интересен окончательный вариант, то вот как все получилось...

Через блокнот создал файл "NewButtonRes.rc" со следующим содержимым:

BUTTON_CONDIT1 RT_BITMAP "button_condit1.bmp"
BUTTON_CONDIT2 RT_BITMAP "button_condit2.bmp"
BUTTON_CONDIT3 RT_BITMAP "button_condit3.bmp"

(Прим.: вышеупомянутые файлы должны находиться в той же дирректории, что и программа).

После этого подключил файл "NewButtonRes.rc" к проекту (Shift + F11).
Затем в необходимом участке кода прописал (без комментов):

/*1*/Graphics::TBitmap *ptBitmap;
/*2*/ptBitmap=new Graphics::TBitmap();
/*3*/TResourceStream* ptRes =
/*4*/ new TResourceStream((int)HInstance, "BUTTON_CONDIT1","RT_BITMAP");
/*5*/ptBitmap->LoadFromStream(ptRes);
/*6*/Image_Button->Picture->Assign((TPersistent*)ptBitmap);
/*7*/delete ptRes;
/*8*/delete ptBitmap;

Но если как в моем случае необходимо использовать смену изображения очень часто (например, каждый раз при наведении на "кнопку"), то лучше задать *ptBitmap как глобальный параметр, что бы не удалять его после каждого наведения. Тогда можно инициализировать его лишь однажды и в последующих применениях исключить строки 1, 2, 8 из вышеупомянутого кода. Что я и сделал. Вот собственно и...

P.S: mik-a-el, спасибо за помощь.

Тему можно закрывать.
0
 Аватар для petruchodd
129 / 126 / 22
Регистрация: 23.06.2009
Сообщений: 700
11.06.2010, 18:58
Достал с архивов эту тему ((( . у меня в 6ом билдере не получается сделать (( компилится без ошибок . но пишет что "ресурс "такойто" не найден" хотя если верить тому как описано он создается четко!
в чем может быть трабла (((?

Добавлено через 8 минут
Цитата Сообщение от mik-a-el Посмотреть сообщение
Image1->Picture->Bitmap->LoadFromResourceName
* * * * * * * * * * * * * *((int)HInstance,"Bitmap1");
имея такую запись ( BOLSHOI_FILE RT_BITMAP "bigfile.bmp" ) ... что нада подставить в "Bitmap1" ...

Подскажите пожалуйста.
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
11.06.2010, 23:49
Misty_head, почитайте эту тему, может пригодится: https://www.cyberforum.ru/cpp-... 27736.html
0
 Аватар для petruchodd
129 / 126 / 22
Регистрация: 23.06.2009
Сообщений: 700
12.06.2010, 00:42
да он писал в 2007ом году )) это я этот архивчик поднял xD
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
12.06.2010, 15:52
Ещё можешь тут посмотреть: Изменение glyph'а во время работы программы
В посте #18 конкретный пример. Без ковыряния ручками в файлах ресурсов (хотя уметь работать с ресурсами тоже полезно)
1
 Аватар для petruchodd
129 / 126 / 22
Регистрация: 23.06.2009
Сообщений: 700
13.06.2010, 00:39
спасибо конечено, но это не то (
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
13.06.2010, 08:36
Цитата Сообщение от petruchodd Посмотреть сообщение
спасибо конечено, но это не то (
Как это не то? Создаёшь на форме компонент (в дизайнере) TImageList. В дизайнере же затаскиваешь туда картинки. В итоге, насколько я понял, сгенерится тот же код, если бы всё это ручками делать с файлом ресурсов. Во всяком случае картинка в exe'шник запрятана и не нужно с ней в виде отдельного файла работать
0
 Аватар для petruchodd
129 / 126 / 22
Регистрация: 23.06.2009
Сообщений: 700
24.06.2010, 22:01
Ну либо я что то не так делал . Но всунув туда картинку, они становятся маленькие -_- а у меня они разного размера ( аля разметка веб сайта). В папке хранить конечно можно... но нужно ж повышать свой уровень а это пока не получается (
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
24.06.2010, 22:16
Во как... не думал, что они все к одному размеру приводятся
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
24.06.2010, 22:19
petruchodd, хе-хе...

А в инспекторе объектов не пробовали изменить такие замечательные параметры, как Heigth и Width ? ...
Наверное их умные люди просто так придумали...

Цитата Сообщение от Evg Посмотреть сообщение
Во как... не думал, что они все к одному размеру приводятся
Можно объявить размер побольше, а потом делать дорисовку с маской прозрачности...
Не очень легко, но тем не менее, можно.

Цитата Сообщение от petruchodd Посмотреть сообщение
В папке хранить конечно можно... но нужно ж повышать свой уровень а это пока не получается (
Я вам на первой странице кинул ссылку на тему, где всё подробно расписал! Чем плох метод? Или так уровень повысить не получается?
0
 Аватар для petruchodd
129 / 126 / 22
Регистрация: 23.06.2009
Сообщений: 700
24.06.2010, 22:28
Цитата Сообщение от MikeSoft Посмотреть сообщение


Я вам на первой странице кинул ссылку на тему, где всё подробно расписал! Чем плох метод? Или так уровень повысить не получается?
Вы имеете ввиду хранить в dll ?эту ссылку ? Если это та ссылка, то зайти по той же ссылке, можна увидеть что я и там не смог решить свою проблему (( мое последнее сообщение так и осталось без внимания .
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.06.2010, 22:28
Помогаю со студенческими работами здесь

Сохранение рисунков в файл
Как с PaintBox1->Canvas сохранить нарисованную картинку в файл?

Записывать текст в исполняемый файл
В программе есть текстовая форма (Memo1 ) нужно чтобы после выключении программы все изменения текста записывались в exe-файл (т.е. не...

Не могу создать исполняемый файл
Здравствуйте. Прошу прощения за столь нубский вопрос. Но как создать исполняемый файл в компиляторе Open Watcom? В бэйсике и паскале всё...

Как добавить файлы в исполняемый файл?
Есть 165 txt файлов. Как эти все файлы запихнуть в один exe'шник программы.

Компилировать проэкт в один исполняемый файл
Ребята, подскажите какие опции нужно выставить в свойствах проекта что бы в исполняемый файл компилировались все необходимые библиотеки,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru