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

Вниз

загрузка картинки из 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.012 c
5-1134783321
FrykT
2005-12-17 04:35
2006.07.23
Скролл у наследника TCustomControl


3-1148137898
wirg
2006-05-20 19:11
2006.07.23
Подскажите как исправить название в заголовке Грида


6-1133173673
shadowonline
2005-11-28 13:27
2006.07.23
Передача картинки через Socket


2-1151756938
простак
2006-07-01 16:28
2006.07.23
маленький вопросик про Memo


2-1152036071
Geonew
2006-07-04 22:01
2006.07.23
Таблица





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