Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Почему 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.041 c
3-1079108655
Softfm
2004-03-12 19:24
2004.04.11
Работа с BDE


9-1070907249
varox
2003-12-08 21:14
2004.04.11
Помогите с DirectX OpenGl пожалуйста!!!


1-1082971123
BALU1111
2004-04-26 13:18
2004.04.11
Как запретить запуск дубликата программы?


3-1079474582
Anarki
2004-03-17 01:03
2004.04.11
Помогите найти QReport в Delphi 7


11-1068667399
Deimos
2003-11-12 23:03
2004.04.11
работа с сокетами в KOL