Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.48 MB
Время: 0.027 c
15-1151340491
ZeFiR
2006-06-26 20:48
2006.07.23
TFlashPlayerControl


2-1151941702
Вася
2006-07-03 19:48
2006.07.23
png не расстянуть


15-1150922919
JUS
2006-06-22 00:48
2006.07.23
Игроделы


1-1149660164
Вася
2006-06-07 10:02
2006.07.23
Подключение ккм через rs232


15-1150884033
syte_ser78
2006-06-21 14:00
2006.07.23
Гемберд или Каньон?