Текущий архив: 2006.07.23;
Скачать: CL | DM;
Вниз
загрузка картинки из DLL Найти похожие ветки
← →
Creative_ltd (2006-06-07 12:49) [0]использовала стандартный пример для хранения ресурсов с ДЛЛ (все, кто с ДЛЛ работает, его наверное знают):
procedure TForm1.Button1Click(Sender: TObject);
var
h: THandle;
Icon: THandle;
begin
h := LoadLibrary("RESTEST.DLL");
if h <= BadDllLoad then
ShowMessage("Bad Dll Load")
else
begin
Icon := LoadIcon(h, "ICON_1");
DrawIcon(Form1.Canvas.Handle, 10, 10, Icon);
FreeLibrary(h);
end;
end;
А можно ли грузить из ДЛЛ не только иконки, но и картинки в формате bmp? Я написала вот тако код, но похоже он не работает, по крайней мере ничего не происходит. Не могли бы указать мне, в чем я ошиблась?procedure TForm1.Button1Click(Sender: TObject);
var
h: THandle;
Icon: THandle;
B: TBitmap;
begin
B:=TBitmap.Create;
h := LoadLibrary(RESTEST.dll");
if h <= BadDllLoad then
ShowMessage("Bad Dll Load")
else
begin
B.Handle:= LoadBitmap(h, "BITMAP1");
Form1.Canvas.Draw(10,10, B);
FreeLibrary(h);
end;
end;
← →
esVer (2006-06-07 14:59) [1]var
bm: TBitmap;
begin
bm := TBitmap.Create;
bm.LoadFromResourceName(HInstance, "BITMAP1");
...
bm.Free;
← →
Creative_ltd (2006-06-07 15:20) [2]спасибо
возникла еще одна проблема: если грузить картинки непосредственно из файла - они отображаются один в один как в графическом редакторе. Если же хранить их в файле ресурсов - они теряют большую часть цветов. Как избежать этого?
← →
Starik (2006-06-08 09:15) [3]>>Как избежать этого?
Избежать, говоришь, надо? Ну так давай избежим. Если ты, конечно, не против поработать ручками.
Сама проблема кроется в том, что у дельфи гнилой редактор ресурсов. Именно он не дает поддержку ресурсов больше определенного кол-ва цветов. Значит, его надо послать и создавать свои ресурсные файлы самому.
Первый шаг заключается в том, что нужно подготовить все необходимые битмапы для будущего ресурса. Нарисуй их, сохрани все в одну папку.
Затем создай в этой же папке просто текстовый документ. Переименуй его в BITMAPS.RC
Это скрипт-файл для компиляции ресура. Открой его в блокноте и напиши там следующее:
B1 BITMAP MYBMP1.BMP
B2 BITMAP MYBMP2.BMP
...
Bn BITMAP MYBMPn.BMP
важно - все писать БОЛЬШИМИ БУКВАМИ. Не знаю почему, но знаю, что надо.
Что здесь такое? B1, B2 и т.д. - это идентификаторы твоих битмапов в ресурсе. Именно по этим именам ты в будущем будешь вызывать их из длл-ки.
BITMAP - это указывает тип ресурса.
ну и последний параметр скрипт-строки указывает собственно имя файла, который будет загружен.
Далее полезай в папку C:\Program Files\Borland\Delphi7\Bin
вытаскивай оттуда файл brcc32.exe и копируй его туда же, где у тебя лежат битмапы и ресурс-скрипт.
Создай в этой же папке еще один текстовый документ, переименуй его в START.BAT.
Открой в блокноте и напиши одну единственную строчку:
brcc32 BITMAPS.RC
Сохрани и закрой. Теперь просто дважды щелкни по этому БАТу - он скомпилирует тебе твой ресурсный файл, который ты и будешь цеплять к длл-ке.
Код длл-ки:
library MULTYRES;
{$R BITMAPS.res}
begin
end.
А вот код твоего проекта, который будет грузить твою библиотеку с ресурсами:
var
h: THandle;
B : TBitmap;
begin
h := LoadLibrary("MULTYRES.DLL");
b := TBitmap.Create;
if h <= 32 then
ShowMessage("Bad Dll Load")
else
begin
b.LoadFromResourceName(h, "B1");
Image1.Picture.Bitmap.Assign(b);
FreeLibrary(h);
end;
Соответственно, на форме должен лежать уже готовый Image1 : TImage.
var
h: THandle;
B : TBitmap;
begin
h := LoadLibrary("MULTYRES.DLL");
b := TBitmap.Create;
if h <= 32 then
ShowMessage("Bad Dll Load")
else
begin
b.LoadFromResourceName(h, "B1");
Image1.Picture.Bitmap.Assign(b);
FreeLibrary(h);
end;
Соответственно, на форме у тебя уже должен лежать готовый Image1 : TImage.
А вообще мой тебе совет - написала бы ты свой ресурс-эдитор на основе того, что я тебе наговорил.
← →
Starik (2006-06-08 13:02) [4]Кста кто ответит на вопрос - а почему делфевый ресэдит такой кривой, что не держит больше 256 цветов, не вставляет музыку и т.д.? Борладн обленился? Или какие-то серьезные причины е?
Страницы: 1 вся ветка
Текущий архив: 2006.07.23;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.014 c