Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2014, 21:15   #1
HTTqp
Форумчанин
 
Регистрация: 20.12.2013
Сообщений: 164
По умолчанию Извлечь файл из ресурса

Подскажите что не так, как извлечь картинку на диск из ресурса. Пишу так:
Код:
function ResourceToFile(lpType, lpName, FileName: PChar): BOOL;
var
  HResInfo: HWND;
  HGlobal: HWND;
  FMemory: Pointer;
  FSize, FHandle: Integer;
  nl: Cardinal;
begin
  HResInfo := FindResource(HInstance, lpName, lpType);
  HGlobal := LoadResource(HInstance, HResInfo);
  FMemory := LockResource(HGlobal);
  FSize := SizeOfResource(HInstance, HResInfo);
  FHandle := Integer(CreateFile(FileName, GENERIC_READ or GENERIC_WRITE,
                     0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0));
  Result := WriteFile(HWND(FHandle), FMemory^, FSize, nl, nil);
  CloseHandle(HWND(FHandle));
end;
...
begin
ResourceToFile('fon','BITMAP', 'C:\fon.jpg');
end;
но после извлечения файл появляется но весит 0 байт.

файл ресурса (*.res) имеет следующий вид
Код:
fon JPEG fon.jpg
HTTqp вне форума Ответить с цитированием
Старый 22.12.2014, 21:26   #2
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Для начала сделай везде правильные типы. HWND - это handle to a window, не ресурса, не блока памяти, не файла. А дальше проверяй возвращаемые значения, смотри результат GetLastError.
Somebody вне форума Ответить с цитированием
Старый 22.12.2014, 21:29   #3
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Создаем ресурс - тип RCDATA имя JPG
(**)
Код:
var
_res: TResourceStream;
........
_res:= TResourceStream.Create(HInstance,'JPG',RT_RCDATA);
_res.SaveToFile('C:\temp.jpg');
Iron Monk вне форума Ответить с цитированием
Старый 22.12.2014, 21:30   #4
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
По умолчанию

возьми пример с этого компонента
Вложения
Тип файла: rar ResourceEditorComponents.rar (137.4 Кб, 48 просмотров)
beegl вне форума Ответить с цитированием
Старый 22.12.2014, 21:37   #5
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Выложите свой файл ресурса - кода, действительно, три строки...
Iron Monk вне форума Ответить с цитированием
Старый 22.12.2014, 21:46   #6
HTTqp
Форумчанин
 
Регистрация: 20.12.2013
Сообщений: 164
По умолчанию

Цитата:
Сообщение от Iron Monk Посмотреть сообщение
Создаем ресурс - тип RCDATA имя JPG
(**)
Код:
var
_res: TResourceStream;
........
_res:= TResourceStream.Create(HInstance,'JPG',RT_RCDATA);
_res.SaveToFile('C:\temp.jpg');
спасибо за код но надо на winapi.
Не понял выложить что, код файла *.rc?
HTTqp вне форума Ответить с цитированием
Старый 22.12.2014, 21:51   #7
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Цитата:
Сообщение от HTTqp Посмотреть сообщение
спасибо за код но надо на winapi.
Про WinApi все молчали...
Iron Monk вне форума Ответить с цитированием
Старый 22.12.2014, 22:15   #8
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
Сообщение от HTTqp Посмотреть сообщение
файл ресурса (*.res) имеет следующий вид
Код:
fon JPEG fon.jpg
И всё??? Одна строчка??? А само изображение туда забито?
Второе: вы значение FHandle проверяете? Похоже, что оно у вас всегда нулевое...

Последний раз редактировалось kropotkina-alice; 22.12.2014 в 22:19.
kropotkina-alice вне форума Ответить с цитированием
Старый 22.12.2014, 22:34   #9
HTTqp
Форумчанин
 
Регистрация: 20.12.2013
Сообщений: 164
По умолчанию

Цитата:
Сообщение от kropotkina-alice Посмотреть сообщение
И всё??? Одна строчка??? А само изображение туда забито?
Второе: вы значение FHandle проверяете? Похоже, что оно у вас всегда нулевое...
суть не в том сколько залито, я элементарно один файл не могу извлечь, я сомневаюсь что от количества что то изменится) Да забито.
Цитата:
Сообщение от kropotkina-alice Посмотреть сообщение
Второе: вы значение FHandle проверяете? Похоже, что оно у вас всегда нулевое...
поясните...
HTTqp вне форума Ответить с цитированием
Старый 22.12.2014, 23:34   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
function ResourceToFile(lpType, lpName, FileName: PChar): BOOL;
...
ResourceToFile('fon','BITMAP', 'C:\fon.jpg');
Что тип ресурса 'fon', а имя его 'BITMAP'? Верится с трудом
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
загрузка в Image JPEG-файл из ресурса casio23 Мультимедиа в Delphi 1 10.02.2012 02:23
Файл ресурса Gregor Общие вопросы Delphi 10 08.11.2010 13:13
Как открыть файл из ресурса VladimirVB Общие вопросы Delphi 5 20.08.2009 21:18
как открыть текстовый файл из ресурса{$R *.RES} в мемо1 (Delphi 7) veronika93 Помощь студентам 1 20.03.2009 08:58
Извлечение ресурса в файл JivotiK Общие вопросы Delphi 1 26.04.2007 11:48