Форум: "Основная";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
ВнизЗагрузка BMP из ресурсов в компоненте Найти похожие ветки
← →
Yevgeniy (2004-04-14 10:46) [0]Уважаемые Мастера. Ответьте, пожелуйста, на вопрос. Я создал свой компонент. В нем мне нужно использовать картинку BMP. Как загружать эту картинку из файла ресурсов компонента. Заранее благодарю.
← →
Юрий Зотов © (2004-04-14 10:57) [1]LoadBitmap
← →
Yevgeniy (2004-04-14 13:56) [2]Тогда как в LoadBitmap передать указатель на файл ресурсов компонента, а не работающего приложения. И если можно объясните как потом работать с HBITMAP, который возвращает данная функция.
← →
TUser © (2004-04-14 13:59) [3]Главное, чтобы размер картинки был меньше 50 метров ^)
← →
Yevgeniy (2004-04-14 14:02) [4]Да это совсем маленькая картиночка. Может я что-то не так делаю. Но мне нужно просто использовать какой-то BMP файл в своем компоненте. Как его засунуть внутрь и как его потом использовать, чтобы при инсталляции компонента болше не нужна была картинка на диске.(Чтобы не поставлять картинку вместе с компонентом). Заранее благодарю всех ответивших.
← →
Yevgeniy (2004-04-14 14:14) [5]Ну что, мастера, Ответит мне кто-нибудь или нет. Пожалуйста!
← →
TUser © (2004-04-14 14:17) [6]Так, неважно в компоненте ты грузишь, или еще как. TResourceSream, LoadFromStream, например
← →
Reindeer Moss Eater © (2004-04-14 14:21) [7]Тогда как в LoadBitmap передать указатель на файл ресурсов компонента, а не работающего приложения.
Ресурсы компонента если он используется программой компилируются в ресурсы работающего приложения.
← →
Yevgeniy (2004-04-14 14:25) [8]
> Ресурсы компонента если он используется программой компилируются
> в ресурсы работающего приложения.
А вот и не компилируются они в ресурсы приложения. Я только если сам засуну эту картинку в ресурсы приложения, то могу ее найти. Иначе говорит, что не может найти в файле ресурсов мою картинку. При этом в ресурсах компонента она есть.
← →
Reindeer Moss Eater © (2004-04-14 14:30) [9]Тогда расскажи что ты понимаешь под термином "ресурсы
компонента"
Я под этим понимаю xxx.res файл на который есть ссылка в одном из модулей компонента
{$R xxx.res}
← →
Reindeer Moss Eater © (2004-04-14 14:32) [10]Возможно {$R xxx.res} находится в модуле, который компилируется только в designtime пакет и не компилируется в runtime пакет.
Тогда его конечно не будет в ресурсах exe
← →
Юрий Зотов © (2004-04-14 14:43) [11]> Yevgeniy
Сначала Вы спросили - как загрузить. Если человек спрашивает, как ЗАГРУЗИТЬ ресурс, то надо полагать, что он его уже создал и подключил. Поэтому ответ - LoadBitmap.
Ан, нет, оказывается еще ничего не создано. И следует новый вопрос, причем его формулировка свидетельствует о непонимании того, что такое ресурсы. Стало быть, ответив и на этот вопрос, следует ожидать нового - и т.д. Или уж сразу написать лекцию на несколько страниц.
Писать лекцию вряд ли кто станет, поэтому, если действительно хотите понять, что такое ресурсы и как с ними работать - читайте документацию. А сейчас запустите ImageEditor, создайте файл ресурсов, запихните в него свою картинку, подключите к компоненту директивой $R и используйте LoadBitmap.
← →
Yevgeniy (2004-04-15 09:19) [12]Действительно ресурс я уже создал и подключил. Когда я использую LoadBitmap мне нужно передать в него 2 параметра
HINSTANCE Instance, // handle of application instance
LPCTSTR lpBitmapName // address of bitmap resource name
Со вторым параметром вопросов нет, а вот первый непонятен.
Если я пишу LoadBitmap(HInstance,"NAME"); , то Картинка ищется в ресурсе приложения, а не моего компонента, который использован в этом приложении. Как в эту функцию передать ссылку на ресурс компонента?
← →
Reindeer Moss Eater © (2004-04-15 09:23) [13]Если я пишу LoadBitmap(HInstance,"NAME"); , то Картинка ищется в ресурсе приложения, а не моего компонента, который использован в этом приложении.
И где по твоему находится ресурс компонента использованного в приложении?
← →
Reindeer Moss Eater © (2004-04-15 09:25) [14]Пост № 10 читал?
← →
Yevgeniy (2004-04-15 09:28) [15]Может загвоздка действительно в посте N10. Но у моего компонента всего один модуль.
← →
Reindeer Moss Eater © (2004-04-15 09:35) [16]Открой редактором ресурсов свое приложение и найди ресурс компонента. Если он там есть - ищи проблему в имени которое указываешь для загрузки или типе самого ресурса.
Если ресурса в приложении не найдешь - значит в модуле компонента нет директивы $R
← →
Yevgeniy (2004-04-15 09:53) [17]В модуле директива есть. Все работает, если я запускаю свою программу пока нахожусь в каталоге, где лежит компонент. Если я запускаю программу из другого каталога, например каталога где лежит само приложение, то не может найти ресурс. Как я понимаю ресурс приложения имеет то же имя, как и само приложение, только с разрешением .RES. Так вот, после компиляции приложения в файле ресурсов моегно ресурса не появляется.
← →
Юрий Зотов © (2004-04-15 09:56) [18]> Yevgeniy (15.04.04 09:19) [12]
> Картинка ищется в ресурсе приложения, а не моего компонента,
> который использован в этом приложении. Как в эту функцию
> передать ссылку на ресурс компонента?
Как по-Вашему, что такое "ресурс компонента"?
Во время исполнения приложения никаких ресурсов компонентов уже не существует. А существуют именно ресурсы самого приложения, в которое эти компоненты закомпилированы. И поэтому первым параметром надо указывать именно HInstance.
Если RES-файл создан и подключен директивой $R, но ресурс, тем не менее, не находится, причина может быть в том, что имена ресурсов чувствительны к регистру. В LoadBitmap надо писать имя ресурса ТОЧНО так, как оно указывалось при создании RES-файла. Обычно используют верхний регистр.
← →
Reindeer Moss Eater © (2004-04-15 09:58) [19]Как по-Вашему, что такое "ресурс компонента"?
Уже спрашивал. Молчит как партизан.
← →
Yevgeniy (2004-04-15 10:01) [20]По моему ресурс компонента Это файл ИмяКомпонента.DCR а также любой другой подключенный файл *.RES подключенный к нему директивой {$R имя.RES}. Вот.
← →
Reindeer Moss Eater © (2004-04-15 10:03) [21]До того как нажал F9 это так.
А сразу после - уже не так.
Ресурсы компилируются в исполняемый файл.
Ты,кстати, нашел в приложении свой ресурс редактором ресурса?
Или будем на кофейной гуще гадать?
← →
Yevgeniy (2004-04-15 10:06) [22]Нашел я файл редактором. Там еcть ICON и VERSION и больше ничего. Никаких BITMAP там не появляется после компиляции.
← →
Yevgeniy (2004-04-15 10:08) [23]Если я вручную добавляю туда нужную картинку, то все работает. Но не могу же я в любой проект, где использую этот компонент вручную картинку добавлять.
← →
Reindeer Moss Eater © (2004-04-15 10:11) [24]Никаких BITMAP там не появляется после компиляции.
Что-то ты темнишь. Нет даже битмапов стандартных bbAbort bbCancel bbOk и т.д. ?
← →
Reindeer Moss Eater © (2004-04-15 10:14) [25]Если я вручную добавляю туда нужную картинку, то все работает. Но не могу же я в любой проект, где использую этот компонент вручную картинку добавлять.
Директивы {$R } достаточно. Не надо никаких ручных добавлений.
Но если идет речь про ресурс компонента, надо строго соблюдать соглашение о регистре имен ресурсов в RC файлах.
А после этого строго соблюдать регистр имени ресурса при загрузке в рантайм
← →
Юрий Зотов © (2004-04-15 10:26) [26]Кажется, я догадался. Евгений, не добавляйте Вашу картинку в основной ресурсный файл "Имя_проекта.res". Создайте ОТДЕЛЬНЫЙ Res-файл, вставьте картинку в него и подключите этот файл СВОЕЙ директивой $R.
Если не поможет, то опишите подробно и по шагам, что и как Вы делаете. Конкретно, с указанием имен файлов и пр. А то мы тут действительно гаданием на кофейной гуще занимаемся.
← →
Reindeer Moss Eater © (2004-04-15 10:37) [27]project1.res каждый раз пересоздавался при компиляции - так это естествеено.
Если модули проекта не содержали ссылки на .res с ресурсом, то и в project1.res этот ресурс не попадал.
Автору надо просто указать в uses имя pas файла в котором ссылка на ресурс компонента.
← →
Reindeer Moss Eater © (2004-04-15 10:38) [28]Хотя у него весь компонент в одном модуле и значит он есть в uses.
Остается одно:
имя ресурса в файле-скрипте ресурса указано неверно. Например в нижнем регистре
← →
Yevgeniy (2004-04-16 13:25) [29]Всем отвечающим большое спасибо. Кажется получилось.
Теперь другая проблема. А почему в файл ресурсов можно только 256 цветную картинку добавлять. А если мне нужна полноцветная, то что делать?
← →
Reindeer Moss Eater © (2004-04-16 13:27) [30]RC_DATA
← →
Yevgeniy (2004-04-16 13:32) [31]Что RC_DATA?
← →
Reindeer Moss Eater © (2004-04-16 13:33) [32]То RC_DATA
← →
Yevgeniy (2004-04-16 13:35) [33]Я не знаю что нужно делать с RC_DATA и с чем это едят.
← →
Reindeer Moss Eater © (2004-04-16 13:36) [34]Тогда довольствуйся 256 цветными битмапами
← →
Yevgeniy (2004-04-16 13:39) [35]Спасибо,конечно, совет, но лучше бы ты помог, если знаешь.
← →
Yevgeniy (2004-04-16 13:41) [36]Может HELP какой подскажешь
← →
Reindeer Moss Eater © (2004-04-16 13:45) [37]но лучше бы ты помог, если знаешь.
А то что начнется?
fResource:=FindResource(hInstance,"my_16_million_colors_picture", RT_RCDATA);
hResource:=LoadResource(hInstance,fResource);
ASize:=SizeOfResource(hInstance,fResource);
pData := LockResource(hResource);
fStream.WriteBuffer(pData^,ASize);
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.037 c