Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помогите извлечь иконку из ресурса 
V
    Опции темы
BLACK_KOT
Дата 16.5.2009, 02:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 20.12.2006

Репутация: нет
Всего: -1



Код

program Project1;

{$R 1.res}

uses
  windows;



function ExtractToFile(ResType, ResName, ResNewName : PChar) : boolean; stdcall;
var
  H  : THandle;
  LR : HGLOBAL;
  mem: Pointer;
  FH : THandle;
  wr : Cardinal;
begin
  H      := 0;
  Result := False;
  H := FindResource(HInstance, ResName, ResType);
  if (H = 0) then Exit;
  LR := LoadResource(HInstance, h);
  if (LR = 0) then Exit;
  mem := LockResource(LR);
  FH := CreateFile(ResNewName, GENERIC_WRITE, 0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,0);
  if (FH = 0) then Exit;
  Result := WriteFile(FH, mem^, SizeofResource(HInstance, H), wr, nil);
  CloseHandle(FH);
  UnLockResource(LR);
end;




begin
ExtractToFile('ICON','ICON_0','C:\1.ico')
end.




в ресурсе иконка. код не работает. вероятно я тип ресурса не правильно написал. поправте пожалуйсто! и мож кто знает напишите извесные вам типы ресурсов!


--------------------
                       .. я - демо версия Бога от Microsoft..
PM MAIL   Вверх
Keeper89
Дата 16.5.2009, 03:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 14
Всего: 58



BLACK_KOT, зачем так много буков в коде?
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  MinIcon : TIcon;
begin
 MinIcon := TIcon.Create;
 try
  try
    MinIcon.Handle := LoadIcon(hInstance, 'MAINICON');
    MinIcon.SaveToFile('C:\1.ico');
    Showmessage('Иконка успешно извлечена!');
  except
    Showmessage('Ошибка в процессе извлечения иконки!');
  end;
 finally
  MinIcon.Free;
 end;
end;




--------------------
PM MAIL WWW   Вверх
BLACK_KOT
Дата 16.5.2009, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 20.12.2006

Репутация: нет
Всего: -1



а файл я в ресурсы кинул. как мне его извлечь? на winapi чтоб.

Код

program Project1;

{$R 1.res}

uses
  windows;


function ExtractToFile(ResType, ResName, ResNewName : PChar) : boolean; stdcall;
var
  H  : THandle;
  LR : HGLOBAL;
  mem: Pointer;
  FH : THandle;
  wr : Cardinal;
begin
  H      := 0;
  Result := False;
  H := FindResource(HInstance, ResName, ResType);
  if (H = 0) then Exit;
  LR := LoadResource(HInstance, h);
  if (LR = 0) then Exit;
  mem := LockResource(LR);
  FH := CreateFile(ResNewName, GENERIC_WRITE, 0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,0);
  if (FH = 0) then Exit;
  Result := WriteFile(FH, mem^, SizeofResource(HInstance, H), wr, nil);
  CloseHandle(FH);
  UnLockResource(LR);
end;




begin
ExtractToFile('RT_RCDATA','rcdata_0','C:\1.doc')
end.


функцию ExtractToFile я здесь, на форуме нашёл. ток у меня она чтот не катит


--------------------
                       .. я - демо версия Бога от Microsoft..
PM MAIL   Вверх
Keeper89
Дата 16.5.2009, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 14
Всего: 58



BLACK_KOT, прикрепил проект.
* Доп. ресурсный файл содержит документ Word.

Присоединённый файл ( Кол-во скачиваний: 15 )
Присоединённый файл  Project1.rar 196,56 Kb


--------------------
PM MAIL WWW   Вверх
BLACK_KOT
Дата 16.5.2009, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 20.12.2006

Репутация: нет
Всего: -1



я те про фому, ты мне про ерёму!

я жговорю - на winapi надо мне. 

а в твоём примере используется   TResourceStream - а значит придётся подключать модуль classes - размер проги в 8 раз увеличивается.
а из положения вышел следущим образом:
Код

program Project1;

{$R 1.res}

uses
  windows;

var k:hkey;


function ExtractToFile(ResName, ResNewName : PChar) : boolean; stdcall;
var
  H  : THandle;
  LR : HGLOBAL;
  mem: Pointer;
  FH : THandle;
  wr : Cardinal;
begin
  H      := 0;
  Result := False;
  H := FindResource(HInstance, ResName, RT_RCDATA); // - тип ресурса подставил напрямую.
//а раньше вместо типа здесь была строковая переменная.
  if (H = 0) then Exit;
  LR := LoadResource(HInstance, H);
  if (LR = 0) then Exit;
  mem := LockResource(LR);
  FH := CreateFile(ResNewName, GENERIC_WRITE, 0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,0);
  if (FH = 0) then Exit;
  Result := WriteFile(FH, mem^, SizeofResource(HInstance, H), wr, nil);
  CloseHandle(FH);
  UnLockResource(LR);
end;




begin
ExtractToFile('RCDATA_0','C:\1.doc');

beep(954,100);
end.


Это сообщение отредактировал(а) BLACK_KOT - 16.5.2009, 16:28


--------------------
                       .. я - демо версия Бога от Microsoft..
PM MAIL   Вверх
Keeper89
Дата 16.5.2009, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 14
Всего: 58



вот тебе про Фому:
Код

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;

procedure TForm1.Button2Click(Sender: TObject);
begin
  ResourceToFile('DOC', 'MYWORD', 'C:\1.doc');
end;


Это сообщение отредактировал(а) Keeper89 - 16.5.2009, 18:26


--------------------
PM MAIL WWW   Вверх
BLACK_KOT
Дата 17.5.2009, 05:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 20.12.2006

Репутация: нет
Всего: -1



благодарю


--------------------
                       .. я - демо версия Бога от Microsoft..
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0478 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.