Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > TGraphicClass по расширению


Автор: Illusion Dolphin 7.12.2004, 16:43
Необходимо загрузить файл, который является по умолчанию графическим, но может и быть немного видоизменённым мною (зашифрован, например), который я сначала думаю азгрущать в поток, потом же его расшифровывать по мере необходимости, но возникла проблема загрузки из стрима в TGraphic.

В модуле graphics дано следующее определение загрузки с файла:

Код

procedure TPicture.LoadFromFile(const Filename: string);
var
 Ext: string;
 NewGraphic: TGraphic;
 GraphicClass: TGraphicClass;
begin
 Ext := ExtractFileExt(Filename);
 Delete(Ext, 1, 1);
 GraphicClass := FileFormats.FindExt(Ext); //нужно ЭТО
 if GraphicClass = nil then
   raise EInvalidGraphic.CreateFmt(SUnknownExtension, [Ext]);

 NewGraphic := GraphicClass.Create;
 try
   NewGraphic.OnProgress := Progress;
   NewGraphic.LoadFromFile(Filename);
 except
   NewGraphic.Free;
   raise;
 end;
 FGraphic.Free;
 FGraphic := NewGraphic;
 FGraphic.OnChange := Changed;
 Changed(Self);
end;

Пока всё упирается в FileFormats.FindExt(Ext) - FileFormats это внутрення переменная в модуле TGraphic, и обойти не получается. Помогите одним словом найти функцию типа GetGraphicClass(Ext : String) : TGraphicClass.

Автор: p0s0l 18.12.2004, 01:26
Странно, что такой функции нет...

Как проблему решил ? (если решил...)

Автор: Illusion Dolphin 19.12.2004, 10:52
[/quote]
Как проблему решил ? (если решил...)
[quote]
Пришлось решать, но как получается иногда в таких случаях - совсем некрасиво. Долгие попытки что-нибудь гибкое сделать пришли к выводу, что раз в скомпилированой проге других форматов не будет (если не делать собственную систему плугинов, есна), то можно всё-таки сделать около 30 условий типа
if ext='psd' then result:=TPSDImage... Хотя можно было по сути взять, да и сделать модуль graphicsx.pas, в котором всё будет от обычного graphics, по FileFormats будет виден для других модулей. Может проблему можно было решить с помощью RTTI (по крайней мере в каждом объекте TPicture ести ссылка на FileFormats), но я не пробовал...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)