unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Registry, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    txtDoc: TRichEdit;
    cmbRegister: TButton;
    cmbUnregister: TButton;
    procedure FormCreate(Sender: TObject);
    procedure cmbRegisterClick(Sender: TObject);
    procedure cmbUnregisterClick(Sender: TObject);
  private
    { Private declarations }
    procedure GetRegisteredState();
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

procedure TForm1.GetRegisteredState();
var
  reg: TRegistry;
begin
  reg := TRegistry.Create();
  reg.RootKey := HKEY_CLASSES_ROOT;
  //Активируем нужные кнопки в зависимости от того, зарегистрировано
  //ли расширение mydoc
  cmbUnregister.Enabled := reg.KeyExists('.mydoc');
  cmbRegister.Enabled := not cmbUnregister.Enabled;
  reg.Free();
end;

procedure RegisterAppDocuments();
var
  reg: TRegistry;
begin
  reg := TRegistry.Create();
  reg.RootKey := HKEY_CLASSES_ROOT;
  //Вносим информации о нашем типе файлов в реестр
  //..само расширение
  if reg.OpenKey('.mydoc', True) then
  begin
    reg.WriteString('', 'TricksDelphi.DocumentSample');
    reg.CloseKey();
  end;
  //..описание типа файла
  if reg.OpenKey('TricksDelphi.DocumentSample', True) then
  begin
    reg.WriteString('', 'Документ TricksDelphi.DocumentSample');
    reg.CloseKey();
  end;
  //..иконка для файлов типа *.mydoc
  if reg.OpenKey('TricksDelphi.DocumentSample\DefaultIcon', True) then
  begin
    reg.WriteString('', Application.ExeName + ', 1');
    reg.CloseKey();
  end;
  //..приложение, открывающее документ *.mydoc
  if reg.OpenKey('TricksDelphi.DocumentSample\Shell\Open\Command', True) then
  begin
    reg.WriteString('', Application.ExeName + ' %1');
    reg.CloseKey();
  end;

  reg.Free();
end;

procedure UnregisterAppDocuments();
var
  reg: TRegistry;
begin
  reg := TRegistry.Create();
  reg.RootKey := HKEY_CLASSES_ROOT;
  //Удаление информации о типе файла из реестра
  reg.DeleteKey('.mydoc');
  reg.DeleteKey('TricksDelphi.DocumentSample');
  reg.Free();
end;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  GetRegisteredState();
  if ParamCount() > 0 then
  begin
    //Обрабатываем данные командной строке...
    txtDoc.Text := 'Имя открываемого файла: ' + ParamStr(1);
  end;
end;

procedure TForm1.cmbRegisterClick(Sender: TObject);
begin
  RegisterAppDocuments();
  GetRegisteredState();
end;

procedure TForm1.cmbUnregisterClick(Sender: TObject);
begin
  UnregisterAppDocuments();
  GetRegisteredState();
end;

end.
