Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.032 c
7-1078989964
Richo
2004-03-11 10:26
2004.05.02
звонилка


14-1081261783
Soft
2004-04-06 18:29
2004.05.02
Есть ли Бог на Марсе?


4-1078770825
Labert
2004-03-08 21:33
2004.05.02
WM_DRAWITEM и WM_PAINT


6-1078992345
FireMan_Alexey
2004-03-11 11:05
2004.05.02
WinSock Async Messages


4-1078194563
Сергей Петров
2004-03-02 05:29
2004.05.02
Нехватка ресурсов под Win98.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский