Форум: "Потрепаться";
Текущий архив: 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.037 c