Форум: "Начинающим";
Текущий архив: 2007.08.12;
Скачать: [xml.tar.bz2];
ВнизDLL & PNG, GIF, JPG и т. п. Найти похожие ветки
← →
TIF © (2007-06-29 18:47) [0]Добрый вечер.
Наверное вопрос немного глуповат, но ответа на него пока не нашёл.
Итак, есть программа, форма, картинка (компонент 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, например?
← →
Германн © (2007-06-29 19:00) [1]А при чём тут DLL?
← →
Desdechado © (2007-06-29 19:03) [2]Просто подключить соответствующие компоненты/классы, которые умеют обращаться с такими форматами графики. Для jpeg есть встроенный, для остальных - ищи в нете.
← →
TIF © (2007-06-29 19:06) [3]
> А при чём тут DLL?
из неё нуно загрузить фото в этих форматах
> Просто подключить соответствующие компоненты/классы, которые
> умеют обращаться с такими форматами графики. Для jpeg есть
> встроенный, для остальных - ищи в нете.
В смысле компоненты? Вот есть у меня компонент TAdvOfficeImage, может загружать картинки в таких форматах, а как его направить на DLL?
← →
DiamondShark © (2007-06-29 19:12) [4]
> Вот есть у меня компонент TAdvOfficeImage, может загружать
> картинки в таких форматах, а как его направить на DLL?
А, по-твоему, все должны знать, что такое TAdvOfficeImage?
Если у него есть есть методы, типа, LoadFromStream, можно создать TRecourceStream для ресурсов в твоих DLL и загружать из него.
← →
TIF © (2007-06-29 19:19) [5]
> что такое TAdvOfficeImage?
так, понял ошибку, даю информацию
TMS Pack 4.2 - компонент оттуда.
> Если у него есть есть методы, типа, LoadFromStream, можно
> создать TRecourceStream для ресурсов в твоих DLL и загружать
> из него.
Есть вот что:
AdvOfficeImage1.Picture.LoadFromStream();
AdvOfficeImage1.Picture.LoadFromResourceName();
AdvOfficeImage1.Picture.LoadFromResourceID();
← →
DiamondShark © (2007-06-29 19:23) [6]Ну так и используй эти методы.
← →
TIF © (2007-06-29 19:37) [7]> Если у него есть есть методы, типа, LoadFromStream, можно
> создать TRecourceStream для ресурсов в твоих DLL
Никогда этого не делал. TRecourceStream создать наверное смогу, но дальше - полный финиш
← →
DiamondShark © (2007-06-29 19:48) [8]А не надо.
AdvOfficeImage1.Picture.LoadFromResourceName() или AdvOfficeImage1.Picture.LoadFromResourceID() должно хватить.
Кстати, если есть исходники, можно посмотреть чего у них унутре.
Ставлю 10 к 1, что там пара-тройка строчек с использованием TRecourceStream
;)
← →
TIF © (2007-06-29 19:54) [9]
> Кстати, если есть исходники, можно посмотреть чего у них
> унутре.
есть
> Ставлю 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;
Выиграл!
← →
TIF © (2007-06-29 20:15) [10]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 20:35) [11]Удалено модератором
← →
Desdechado © (2007-06-29 21:31) [12]Кто не идет и куда не идет?
Тебе же сказано, что для поддержки графформатов должны быть классы. Они есть в твоей библиотеке? Нет - ищи в других местах.
← →
homm © (2007-06-29 23:20) [13]> AdvOfficeImage1.Picture.LoadFromResourceName(DLL, "Test");
Это ты PNG в BMP секцию засунул, и ждешь что LoadFromResourceName правильно формат поймеет, или ты PNG засунул в секцию RCDATA и ждешь, что LoadFromResourceName сама надет рессурс, куда ты его запрятал?
← →
homm © (2007-06-29 23:22) [14]Хотя наверное второе. Вроде как в самом формате BMP секции содержатся сведения из заголовка BMP, потому засунуть туда что-то другое вроде нельзя.
← →
homm © (2007-06-29 23:31) [15]Используй LoadFromResourceID, ID находится с помошью FindResource
← →
TIF © (2007-06-30 14:52) [16]procedure TForm1.Button1Click(Sender: TObject);
var DLL: THandle;
begin
DLL:=LoadLibrary("123.dll");
AdvOfficeImage1.Picture.LoadFromResourceID(DLL, FindResource(DLL, "Test", ???));
FreeLibrary(DLL);
end;
Как я понял, вместо ??? нужно написать какой-то тип. Какой именно?
← →
Правильный Вася (2007-06-30 20:10) [17]
> нужно написать какой-то тип. Какой именно?
тот, который этому ресурсу назначен в длл
← →
homm © (2007-06-30 23:18) [18]> Как я понял, вместо ??? нужно написать какой-то тип. Какой
> именно?
Почитай справку по FindResource, помедитируй.
← →
TIF © (2007-07-11 14:51) [19]
> тот, который этому ресурсу назначен в длл
Назначен PNG, я его и пишу - абсолютно ничего, ни ошибок, ни картинки...
Может кто сообразит, в чём тут дело?
← →
Amoeba © (2007-07-11 16:02) [20]
> для остальных - ищи в нете.
>
GraphicEx, не содержит компонентов. Подключаешь одноименный модуль и в обычный TImage можно загружать еще кучу форматов помимо стандартных.
← →
TIF © (2007-07-17 12:27) [21]
> Может кто сообразит, в чём тут дело?
а? я уже замучался подбирать параметры...
> GraphicEx, не содержит компонентов. Подключаешь одноименный
> модуль и в обычный TImage можно загружать еще кучу форматов
> помимо стандартных.
не знаю, не чоень понятно...
← →
Dimaxx © (2007-07-17 14:01) [22]
> не знаю, не чоень понятно...
А что непонятного? Кидаешь модули GraphicEx либо к своему приложению (либо в определенную папку и прописываешь путь к ним в опциях проекта) и в uses добавляешь GraphicEx.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.08.12;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.043 c