Rejestracja rozszerzenia

Strona g│≤wna

 

Rejestracja rozszerzenia 

CzΩsto dostaje listy z pytaniem w jaki spos≤b zarejestrowaµ, a nastΩpnie u┐ywaµ w│asne rozszerzenie. Nie jest to nic trudnego - wystarczy tylko, ┐e potrafisz obs│ugiwaµ rejestr. O rejestrze mo┐esz poczytaµ w artykule Rejestry. W naszym programie do menu wywo│ywanego prawym klawiszem myszy dodamy jeszcze jedn▒ bezu┐yteczn▒ pozycje. Tak dla bajeru :) 

Zacznijmy wiΩc. Oto kod, kt≤ry rejestruje rozszerzenie - przyjrzyj siΩ jemu, a ja zaraz go om≤wiΩ: 

uses Registry;

procedure TMainForm.Button1Click(Sender: TObject);
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;  // otworz rejestr
  try
    try
      Reg.RootKey := HKEY_CLASSES_ROOT; // odpowiedni klucz otworz :)
      Reg.OpenKey( // Utworz klucz
      '.rzi', True);
      Reg.WriteString('', 'RziFile'); // dodaj typ klucza
      Reg.CloseKey;  // zamknij klucz
      Reg.OpenKey(  // stworz klucz oznaczajacy ikone
      'rzifile\DefaultIcon', True);
      Reg.WriteString('', Application.ExeName + ',1');
      Reg.CloseKey;
      Reg.OpenKey(  // stworz kolejny...
      'rzifile\shell\open\command', True);  // akcja po nacisnieciu
      Reg.WriteString('','"'+Application.ExeName+'" "%1"');// wpisz sciezke programu
      Reg.CloseKey;
      Reg.OpenKey(
      'rzifile\shell\Edytuj', True); // stworz nowe pozycje - Edyuj
      Reg.WriteString('', 'Otw≤rz w programie...'); // tekst pozycji
      Reg.CloseKey;
      Reg.OpenKey(  // stworz akcje po nacisnieciu
      'rzifile\shell\Edytuj\command', True);
      Reg.WriteString('', '"' + Application.ExeName + '" "%1"'); // dopisz sciezke programu
    except
      raise Exception.Create('B│▒d! Wyst▒pi│ b│▒d wzwi▒zany z rejestrem!');
    end;
  finally
    Reg.Free;
  end;
  Application.MessageBox(
  'Rejestracja uda│a siΩ! Stw≤rz teraz jaki╢ plik z rozszerzeniem *.rzi');
end;

Najpierw w rejestrze rejestrujemy rozszerzenie .rzi. NastΩpnie dodajemy do niego now▒ warto╢µ, kt≤ra opisuje nazwΩ nowego rozszerzenia - w naszym wypadku jest to: RziFile. NastΩpnie tworzymy nowy klucz o tej w│a╢nie nazwie, czyli - RziFile. Tutaj teraz dodawaµ bΩdziemy akcje, czyli co zrobiµ ma system je┐eli u┐ytkownik naci╢nie na ikonΩ z tym w│a╢nie rozszerzeniem. BΩdzie to na pocz▒tek opis ikony rozszerzenia, czyli tworzymy podklucz o nazwie DefaultIcon. P≤╝niej wpisujmy warto╢µ - ikona rozszerzenia bΩdzie taka sama jak ikona programu. P≤╝niej na tej samej zasadzie tworzymy now▒ warto╢µ do menu wywo│ywanego spod prawego klawisza myszy. 

Dobra - teraz procedura usuwaj▒ca klucze z rejestru. Oto ona: 

procedure TMainForm.Button2Click(Sender: TObject);
var
  Reg: TRegistry;
begin
{  usuwa rozszerzenie }
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CLASSES_ROOT;
    Reg.DeleteKey('.rzi');  // usun klucz
    Reg.DeleteKey('rzifile');
  finally
    Reg.Free;
  end;
end;

Tutaj nie ma nic specjalnie do omawiania. 

Oto ca│y kod programu:

(****************************************************************)
(*                                                              *)
(*              Copyright (c) 2001 by Adam Boduch               *)
(*              http://PROGRAMOWANIE.OF.PL                      *)
(*              boduch@poland.com                               *)
(*                                                              *)
(****************************************************************)

unit MainFrm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;

type
  TMainForm = class(TForm)
    Panel1: TPanel;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
  end;

var
  MainForm: TMainForm;

implementation

{$R *.DFM}

uses Registry;

procedure TMainForm.Button1Click(Sender: TObject);
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;  // otworz rejestr
  try
    try
      Reg.RootKey := HKEY_CLASSES_ROOT; // odpowiedni klucz otworz :)
      Reg.OpenKey( // Utworz klucz
      '.rzi', True);
      Reg.WriteString('', 'RziFile'); // dodaj typ klucza
      Reg.CloseKey;  // zamknij klucz
      Reg.OpenKey(  // stworz klucz oznaczajacy ikone
      'rzifile\DefaultIcon', True);
      Reg.WriteString('', Application.ExeName + ',1');
      Reg.CloseKey;
      Reg.OpenKey(  // stworz kolejny...
      'rzifile\shell\open\command', True);  // akcja po nacisnieciu
      Reg.WriteString('','"'+Application.ExeName+'" "%1"');// wpisz sciezke programu
      Reg.CloseKey;
      Reg.OpenKey(
      'rzifile\shell\Edytuj', True); // stworz nowe pozycje - Edyuj
      Reg.WriteString('', 'Otw≤rz w programie...'); // tekst pozycji
      Reg.CloseKey;
      Reg.OpenKey(  // stworz akcje po nacisnieciu
      'rzifile\shell\Edytuj\command', True);
      Reg.WriteString('', '"' + Application.ExeName + '" "%1"'); // dopisz sciezke programu
    except
      raise Exception.Create('B│▒d! Wyst▒pi│ b│▒d wzwi▒zany z rejestrem!');
    end;
  finally
    Reg.Free;
  end;
  Application.MessageBox('Rejestracja uda│a siΩ! Stw≤rz teraz jaki╢ plik z rozszerzeniem *.rzi');
end;

procedure TMainForm.Button2Click(Sender: TObject);
var
  Reg: TRegistry;
begin
{  usuwa rozszerzenie }
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CLASSES_ROOT;
    Reg.DeleteKey('.rzi');  // usun klucz
    Reg.DeleteKey('rzifile');
  finally
    Reg.Free;
  end;
end;

procedure TMainForm.FormShow(Sender: TObject);
begin
{  jezeli uzytkownik kliknie na plik z rozszerzeniem - otworz program }
  if ParamCount > 0 then
    Panel1.Caption := ParamStr(1);
end;

end.

No tak, ale samo dodanie rozszerzenia nie wystarczy. Teraz rozszerzenie jest jedynie skojarzone z programem. Ale co ma program robiµ po otwarciu je┐eli u┐ytkownik kliknie na ikonΩ programu? To w│a╢nie zapisane jest w procedurze OnShow. ParamStr(1) zawiera pe│n▒ ╢cie┐kΩ naci╢niΩtego pliku - np. C:\plik.rzi

A oto ca│e ╝r≤d│o do ╢ci▒gniΩcia:

ext.zip ( 2 kB )

Adam Boduch