unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Graphics, Forms, MMSystem, ShellAPI, Classes,
  Controls, StdCtrls, ComCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Animate1: TAnimate;
    btnAVIplay: TButton;
    btnBMP: TButton;
    btnICON: TButton;
    btnCURSOR: TButton;
    btnWAV: TButton;
    Image1: TImage;
    btnANICURSOR: TButton;
    btnHTML: TButton;
    btnMYPROGRAMM: TButton;
    btnSTRING: TButton;
    btnFONT: TButton;
    procedure btnAVIplayClick(Sender: TObject);
    procedure btnBMPClick(Sender: TObject);
    procedure btnICONClick(Sender: TObject);
    procedure btnCURSORClick(Sender: TObject);
    procedure btnWAVClick(Sender: TObject);
    procedure btnANICURSORClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure btnHTMLClick(Sender: TObject);
    procedure btnMYPROGRAMMClick(Sender: TObject);
    procedure btnSTRINGClick(Sender: TObject);
    procedure btnFONTClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}
{$R Resourse\MYRES.RES} //Подключаем файл с ресурсами

procedure TForm1.btnAVIplayClick(Sender: TObject);
begin
 //Проигрываем .avi файл из ресурсов
 Animate1.ResName:='MYAVI';
 Animate1.Active:=True;
end;

procedure TForm1.btnBMPClick(Sender: TObject);
begin
 //Загружаем в Image1 изображение BMP
 Image1.Picture.Bitmap.Handle:=LoadBitmap(hInstance, 'MYBITMAP');
end;

procedure TForm1.btnICONClick(Sender: TObject);
begin
 //Загружаем в Image1 значок
 Image1.Picture.Icon.Handle:=LoadIcon(hInstance,'MYICON');
end;

procedure TForm1.btnCURSORClick(Sender: TObject);
begin
 //Загружаем курсор из ресурсов...
 Screen.Cursors[1]:=LoadCursor(hInstance,'MYCURSOR');
 //...и используем его
 Screen.Cursor:=1;
end;

procedure TForm1.btnWAVClick(Sender: TObject);
begin
 //Проигрываем wav файл из ресурсов
 PlaySound('MYWAVE', HInstance, SND_RESOURCE);
end;

//Процедура сохранения ресурсов в файл(ы)
procedure ExtractRes(ResType,ResName,ResNewName:String);
var
 Res:TResourceStream;
begin
 Res:=TResourceStream.Create(Hinstance,Resname,Pchar(ResType));
 Res.SavetoFile(ResNewName);
 Res.Free;
end;

procedure TForm1.btnANICURSORClick(Sender: TObject);
var
 WorkDir: String;
begin
 //Устанавливаем текущий каталог
 SetCurrentDir(WorkDir);
 //Сохраняем как файл в текущем каталоге анимированный
 //курсор под именем MyAniCursor.ani
 ExtractRes('ANICURSOR', 'MYANICURSOR', WorkDir+'MyAniCursor.ani');
 //Загружаем курсор из файла...
 Screen.Cursors[1]:=LoadCursorFromFile(PChar(WorkDir+'MyAniCursor.ani'));
 //...и используем его
 Screen.Cursor:=1;
end;

procedure TForm1.btnHTMLClick(Sender: TObject);
var
 WorkDir: String;
begin
 //Устанавливаем текущий каталог
 SetCurrentDir(WorkDir);
 //Сохраняем как файл в текущем каталоге .htm документ
 //под именем Readme.htm...
 ExtractRes('HTML', 'MYHTML', WorkDir+'Readme.htm');
 //Извлекаем из ресурсов также изображение,
 //которое будет отображено в файле Readme.htm
 ExtractRes('MYFOLDER', 'BUFFANDWILL', WorkDir+'willbuff.jpg');
 //...и запускаем файл Readme.htm
 ShellExecute(Form1.Handle, nil, PCHar(WorkDir+'Readme.htm'), nil, nil, SW_SHOW);
end;

procedure TForm1.btnMYPROGRAMMClick(Sender: TObject);
var
 WorkDir: String;
begin
 //Устанавливаем текущий каталог
 SetCurrentDir(WorkDir);
 //Сохраняем как файл в текущем каталоге .exe файл
 //под именем Rebt.exe...
 ExtractRes('MYFOLDER', 'MYPROGRAMM', WorkDir+'Rebt.exe');
 //...и запускаем его
 ShellExecute(Form1.Handle, nil, PCHar(WorkDir+'Rebt.exe'), nil, nil, SW_SHOW);
end;

procedure TForm1.btnSTRINGClick(Sender: TObject);
var
 buffer: array[0..255] of Char;
begin
 //Загружаем из ресурса типа STRING строку с идентификатором 1...
 Loadstring(hinstance, 1, @buffer, 255);
 //...и показываем её в заголовке программы
 Form1.Caption := StrPas(buffer);
end;

procedure TForm1.btnFONTClick(Sender: TObject);
var
 WorkDir: String;
begin
 //Устанавливаем текущий каталог
 SetCurrentDir(WorkDir);
 //Сохраняем как файл в текущем каталоге шрифт
 //под именем Bloodcyr.ttf
 ExtractRes('MYFOLDER', 'MYFONT', WorkDir+'Bloodcyr.ttf');
 //Добавляем шрифт в таблицу Windows
 AddFontResource(PChar('Bloodcyr.ttf'));
 //Посылаем сообщение об изменении шрифтов...
 SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0);
 //...и используем шрифт в нашей программе
 Form1.Font.Name := 'Blood Cyrillic';
end;

//При закрытии формы удаляем уже ненужные файлы,
//которые были извлечены из ресурсов программы для работы
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
 WorkDir: String;
begin
 //Устанавливаем текущий каталог
 SetCurrentDir(WorkDir);
 //Если файлы существуют, удаляем их:
  if FileExists(PChar(WorkDir+'MyAniCursor.ani')) then
   DeleteFile(PChar(WorkDir+'MyAniCursor.ani'));
  if FileExists(PChar(WorkDir+'Readme.htm')) then
   DeleteFile(PChar(WorkDir+'Readme.htm'));
  if FileExists(PChar(WorkDir+'Rebt.exe')) then
   DeleteFile(PChar(WorkDir+'Rebt.exe'));
  if FileExists(PChar(WorkDir+'willbuff.jpg')) then
   DeleteFile(PChar(WorkDir+'willbuff.jpg'));
  if FileExists(PChar(WorkDir+'Bloodcyr.ttf')) then
   DeleteFile(PChar(WorkDir+'Bloodcyr.ttf'));
 //Удаляем шрифт из таблицы Windows
 RemoveFontResource(PChar('Bloodcyr.ttf'));
 //Посылаем сообщение об изменении шрифтов...
 SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0);
end;

end.
