Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

Почему LoadFromResourceName не грузит?   Найти похожие ветки 

 
Knight ©   (2004-03-13 01:24) [0]

есть
BMP:=TBitMap.Create;
BMP.LoadFromResourceName(HInstance,"BITMAP1");
...

Но выскакивает ошибка, что ресурс не найден.


 
reticon ©   (2004-03-13 02:05) [1]

при создании ресурса (например, в Image Editor) имя ресурса должно быть в верхнем регистре.


 
reticon ©   (2004-03-13 02:14) [2]

ну а в коде уже не принципиально, например,


BMP.LoadFromResourceName(HInstance,"Bitmap1");
BMP.LoadFromResourceName(HInstance,"BITMAP2");
BMP.LoadFromResourceName(HInstance,"bitMap3");


 
Knight ©   (2004-03-13 09:08) [3]


> reticon ©   (13.03.04 02:05) [1]
> при создании ресурса (например, в Image Editor) имя ресурса
> должно быть в верхнем регистре.

Помню... ступал на эти грабли... но щас в ресурск, как в примере и не работает.


 
MBo ©   (2004-03-13 09:32) [4]

покажи RC-файл


 
Юрий Зотов ©   (2004-03-13 09:49) [5]

И еще - Вы в какой res-файл битмап засовываете? Если в основной (имя_проекта.res), то он обновляется при каждой перекомпиляции и битмапа там не будет. Надо использовать отдельный файл и директиву $R.


 
Knight ©   (2004-03-13 10:30) [6]

> Юрий Зотов ©   (13.03.04 09:49) [5]
> И еще - Вы в какой res-файл битмап засовываете? Если в
> основной
> (имя_проекта.res), то он обновляется при каждой перекомпиляции
> и битмапа там не будет.
В основной... но после перекомпиляции открывал... есть там битмап.

> Надо использовать отдельный файл
> и директиву $R.
Попробую, хотя странно, что из основного не берёт.


 
Knight ©   (2004-03-13 10:45) [7]

А из другого и правда грузится... странно всё это %)

Кстати, до кучи... может подкините небольшой пример с callback-процедурой на паскале?


 
Юрий Зотов ©   (2004-03-13 10:59) [8]

> Knight ©   (13.03.04 10:30) [6]
> странно, что из основного не берёт.

Не в том, дело, что "не берет", а в том, что в основном RES никаких Ваших битмапов просто не будет.

Вы добавили этот битмап ручками, через Image Editor. ОК, теперь он там есть, и Вы нажимаете F9. Что происходит далее?

Прежде, чем будет построен новый EXE, Delphi должна перекомпилировать основной RES, чтобы в этот новый EXE линковщик вставил уже обновленные ресурсы.

Но ведь для Delphi нигде нет указаний о том, что в основной RES она должна добавить какой-то там Ваш битмап? Нет. Поэтому она ничего и не добавляет - а в результате старый RES с Вашими добавлениям затирается и заменяется новым, в котором никаких Ваших битмапов уже нет. Соответственно, не будет их и в EXE.

Вот поэтому и нужно использовать отдельный RES - ведь в его RC мы явно указываем, что именно в него должно быть включено, а директива $R заставляет линковщик включить наши ресурс в EXE.


 
Юрий Зотов ©   (2004-03-13 11:09) [9]

Callback - это не просто. А ОЧЕНЬ просто.

type
 TCallback = procedure(Data: pointer);

procedure A(Proc: TCallback; Data: pointer);
begin
 ...
 Proc(Data);
 ...
end;

procedure B(Data: pointer);
begin
 ...
end;

procedure C;
var
 P: pointer;
begin
 ...
 A(@B, P);
 ...
end;


 
Knight ©   (2004-03-13 11:29) [10]

>> Юрий Зотов ©   (13.03.04 10:59) [8]

> Вы добавили этот битмап ручками, через Image Editor. ОК,
> теперь он там есть, и Вы нажимаете F9. Что происходит далее?

> в результате старый RES с Вашими добавлениям затирается и
> заменяется новым, в котором никаких Ваших битмапов уже нет.
А потом я открываю Image Editor-ом этот "новый" RES и вижу там свой BITMAP1... почему?


 
Юрий Зотов ©   (2004-03-13 14:07) [11]

Действительно так. Что ж, значит мои представления об этом механизме не соответствуют действительности. Но факт - если в главный RES добавлены пользовательские ресурсы, то в EXE они не подтягиваются. Возможно, просто потому, линковщик их не включает.


 
Anatoly Podgoretsky ©   (2004-03-13 14:47) [12]

Как бы там не было - не добавляй ресурсы в главный ресурс, он не для тебя и компилятор имеет право делать с ним, что хочет, а ты только надеяться будет или нет.


 
VMcL ©   (2004-03-13 15:04) [13]

>>Knight ©  (13.03.04 11:29) [10]

Если изменять res-файл проекта после того как проект открыт в среде Delphi, то даже при билде берется образ res-файла из опер. памяти. Нужно переоткрыть проект. Может в этом проблема?

P.S. AFAIK, Delphi при перекомпиляции/билде не удаляет и не изменяет ресурсы res-файл проекта, кроме Version Info, MAINICON и т.п. Но все-таки, ИМХО, лучше дополнительные ресурсы подключать через дополнительный rc/res-файл.


 
Anatoly Podgoretsky ©   (2004-03-13 15:07) [14]

И проект.res о котором мы и говорим


 
Knight ©   (2004-03-13 18:10) [15]

Раз дополнительный... пусть будет дополнительный. Всем спасибо :)

А вопрос про callback, если не получится, то в другую ветку вынесу... чё-то Enum никак не срабатывает, вроде всё правильно.


 
Юрий Зотов ©   (2004-03-13 18:14) [16]

> Knight ©   (13.03.04 18:10) [15]

Если делаете callback  для функции API - не забудьте, что он должен быть с stdcall.


 
Knight ©   (2004-03-13 18:20) [17]

Делал ведь когда-то Enum по Desktop"у и работало... просто что-то упустил... Щас буду разбираться где именно...



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.041 c
1-1082390271
Torin
2004-04-19 19:57
2004.04.11
Free


6-1076240763
ExZ
2004-02-08 14:46
2004.04.11
WinSock2


3-1081528134
iov13
2004-04-09 20:28
2004.04.11
MSSQL & ADO


1-1082696065
New_Delpher
2004-04-23 08:54
2004.04.11
Подскажите ссылки на статьи как создавать мастера в Delphi.


1-1079983962
Maxwell
2004-03-22 22:32
2004.04.11
Про динамическую память





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский