![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
DLL & PNG, GIF, JPG и т. п. [D6, D7, 95/98, 2000, XP]
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?