Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

DLL & PNG, GIF, JPG и т. п. [D6, D7, 95/98, 2000, XP]


Страницы:   1 2

TIF ©   (2007-06-29 18:47:00) 

Добрый вечер.

Наверное вопрос немного глуповат, но ответа на него пока не нашёл.

Итак, есть программа, форма, картинка (компонент TAdvOfficeImage и просто TImage). Туда необходимо из DLL загрузить изображение. С BMP всё легко и просто:

procedure TForm_Index.LoadImages();
//Загрузка рисунков интерфейса из 123.dll
var DLL: THandle;
begin

 DLL:=LoadLibrary('123.dll');

 Image.Picture.Bitmap.LoadFromResourceName(DLL, 'Name');
 
 FreeLibrary(DLL);

end;

Хм, а как быть с PNG, например?


Dimaxx   (2007-07-17 14:01:00) [1]


> не знаю, не чоень понятно...

А что непонятного? Кидаешь модули GraphicEx либо к своему приложению (либо в определенную папку и прописываешь путь к ним в опциях проекта) и в uses добавляешь GraphicEx.


TIF   (2007-07-17 12:27:00) [2]


> Может кто сообразит, в чём тут дело?


а? я уже замучался подбирать параметры...


> GraphicEx, не содержит компонентов. Подключаешь одноименный
> модуль и в обычный TImage можно загружать еще кучу форматов
> помимо стандартных.


не знаю, не чоень понятно...


Amoeba   (2007-07-11 16:02:00) [3]


> для остальных - ищи в нете.
>

GraphicEx, не содержит компонентов. Подключаешь одноименный модуль и в обычный TImage можно загружать еще кучу форматов помимо стандартных.


TIF   (2007-07-11 14:51:00) [4]


> тот, который этому ресурсу назначен в длл


Назначен PNG, я его и пишу - абсолютно ничего, ни ошибок, ни картинки...

Может кто сообразит, в чём тут дело?


homm   (2007-06-30 23:18:00) [5]

> Как я понял, вместо ??? нужно написать какой-то тип. Какой
> именно?

Почитай справку по FindResource, помедитируй.


Правильный Вася   (2007-06-30 20:10:00) [6]


> нужно написать какой-то тип. Какой именно?

тот, который этому ресурсу назначен в длл


TIF   (2007-06-30 14:52:00) [7]

procedure TForm1.Button1Click(Sender: TObject);
var DLL: THandle;
begin

 DLL:=LoadLibrary('123.dll');

 AdvOfficeImage1.Picture.LoadFromResourceID(DLL, FindResource(DLL, 'Test',  ???));

 FreeLibrary(DLL);

end;

Как я понял, вместо ??? нужно написать какой-то тип. Какой именно?


homm   (2007-06-29 23:31:00) [8]

Используй LoadFromResourceID, ID находится с помошью FindResource


homm   (2007-06-29 23:22:00) [9]

Хотя наверное второе. Вроде как в самом формате BMP секции содержатся сведения из заголовка BMP, потому засунуть туда что-то другое вроде нельзя.


homm   (2007-06-29 23:20:00) [10]

> AdvOfficeImage1.Picture.LoadFromResourceName(DLL, 'Test');

Это ты PNG в BMP секцию засунул, и ждешь что LoadFromResourceName правильно формат поймеет, или ты PNG засунул в секцию RCDATA и ждешь, что LoadFromResourceName сама надет рессурс, куда ты его запрятал?


Desdechado   (2007-06-29 21:31:00) [11]

Кто не идет и куда не идет?
Тебе же сказано, что для поддержки графформатов должны быть классы. Они есть в твоей библиотеке? Нет - ищи в других местах.


TIF   (2007-06-29 20:35:00) [12]

Удалено модератором


TIF   (2007-06-29 20:15:00) [13]

SOS!!!!!!!!!!!!!!!!!!

Прикол, но не идёт!

procedure TForm_Index.Button2Click(Sender: TObject);
var DLL: THandle;
begin

 DLL:=LoadLibrary('123.dll');

 AdvOfficeImage1.Picture.LoadFromResourceName(DLL, 'Test');

 FreeLibrary(DLL);

end;

Ошибок нет, но и картинки нет! Картинка - PNG


TIF   (2007-06-29 19:54:00) [14]


> Кстати, если есть исходники, можно посмотреть чего у них
> унутре.


есть


> Ставлю 10 к 1, что там пара-тройка строчек с использованием
> TRecourceStream


procedure TGDIPPicture.LoadFromResourceName(Instance: THandle; const ResName: string);
var
 Stream: TCustomMemoryStream;
begin
 if FindResource(Instance,PChar(ResName),RT_RCDATA) <> 0 then
 begin
   Stream := TResourceStream.Create(Instance, ResName, RT_RCDATA);
   try
     LoadFromStream(Stream);
   finally
     Stream.Free;
   end;
 end;
end;

Выиграл!


DiamondShark   (2007-06-29 19:48:00) [15]

А не надо.
AdvOfficeImage1.Picture.LoadFromResourceName() или AdvOfficeImage1.Picture.LoadFromResourceID() должно хватить.

Кстати, если есть исходники, можно посмотреть чего у них унутре.
Ставлю 10 к 1, что там пара-тройка строчек с использованием TRecourceStream

;)


TIF   (2007-06-29 19:37:00) [16]

> Если у него есть есть методы, типа, LoadFromStream, можно
> создать TRecourceStream для ресурсов в твоих DLL

Никогда этого не делал. TRecourceStream создать наверное смогу, но дальше - полный финиш


DiamondShark   (2007-06-29 19:23:00) [17]

Ну так и используй эти методы.


TIF   (2007-06-29 19:19:00) [18]


> что такое TAdvOfficeImage?


так, понял ошибку, даю информацию

TMS Pack 4.2 - компонент оттуда.


> Если у него есть есть методы, типа, LoadFromStream, можно
> создать TRecourceStream для ресурсов в твоих DLL и загружать
> из него.


Есть вот что:

AdvOfficeImage1.Picture.LoadFromStream();

AdvOfficeImage1.Picture.LoadFromResourceName();

AdvOfficeImage1.Picture.LoadFromResourceID();


DiamondShark   (2007-06-29 19:12:00) [19]


> Вот есть у меня компонент TAdvOfficeImage, может загружать
> картинки в таких форматах, а как его направить на DLL?

А, по-твоему, все должны знать, что такое TAdvOfficeImage?

Если у него есть есть методы, типа, LoadFromStream, можно создать TRecourceStream для ресурсов в твоих DLL и загружать из него.


TIF   (2007-06-29 19:06:00) [20]


> А при чём тут DLL?


из неё нуно загрузить фото в этих форматах


> Просто подключить соответствующие компоненты/классы, которые
> умеют обращаться с такими форматами графики. Для jpeg есть
> встроенный, для остальных - ищи в нете.


В смысле компоненты? Вот есть у меня компонент TAdvOfficeImage, может загружать картинки в таких форматах, а как его направить на DLL?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо