Tipy a triky v Delphi, díl 73.

Dnes se naučíme přidávat vlastní položky do kontextového menu systému.

Přidání položky do kontextového menu systému

Kontextové menu je velmi užitečnou pomůckou, která umožňuje uživatelům lepší práci a orientaci v systému. Pokud vše funguje jak má, po kliknutí pravým tlačítkem na nějaký objekt (obvykle soubor) se zobrazí kontextové menu, které nabízí právě ty funkce, které jsou pro daný soubor dostupné. To všichni jistě dobře znáte a této vlastnosti s úspěchem využívá nejen systém samotný, ale i různé další aplikace, které si do systému nainstalujete. Po kliknutí pravým tlačítkem na soubor tak můžete provést například antivirový test nebo soubor zkomprimovat. Jak tedy přidat do kontextového menu vlastní položky si ukážeme právě teď.

Stejně jako již mnohokrát, i v tomto případě použijeme systémový registr, kde jsou tyto informace uloženy. Budeme proto potřebovat knihovnu Registry. Jednoduchou úpravou či přidáním nové položky na vhodné místo registrů zařídíme, že se příslušný "příkaz" zobrazí za určitých definovaných podmínek v kontextovém menu. Takže konkrétněji, musíme se nejprve rozhodnout, jakého typu souboru se bude naše funkce týkat, dále jaká aplikace bude spuštěna a s jakým parametrem. Vše pak zapíšeme do příslušné větve v HKEY_CLASSES_ROOT. Kompletní zdrojový kód našeho příkladu následuje zde:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure AddMenu(FilePrefix, Menu, Command: string);
var
  reg: TRegistry;
  typ: string;
begin
  reg := TRegistry.Create;
  with reg do
  begin
    RootKey := HKEY_CLASSES_ROOT;
    OpenKey(`.` + FilePrefix, True);
    typ := ReadString(``);
    if typ = `` then
    begin
      typ := Fileprefix + `file`;
      WriteString(``, typ);
    end;
    CloseKey;
    OpenKey(typ + `\shell\` + Menu + `\command`, True);
    WriteString(``, command + ` "%1"`);
    CloseKey;
    Free;
  end;
end;

procedure DeleteMenu(Fileprefix, Menu: string);
var
  reg: TRegistry;
  typ: string;
begin
  reg := TRegistry.Create;
  with reg do
  begin
    RootKey := HKEY_CLASSES_ROOT;
    OpenKey(`.` + Fileprefix, True);
    typ := ReadString(``);
    CloseKey;
    OpenKey(typ + `\shell`, True);
    DeleteKey(Menu);
    CloseKey;
    Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  AddMenu(`bmp`, `Upravit v Malování`, `C:\Windows\pbrush.exe`);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  DeleteMenu(`bmp`, `Upravit v Malování`);
end;

end.

Náš příklad se skládá ze dvou procedur, které mají na starosti přidání a smazání záznamu z registru. Vše je řešeno parametricky, takže jsou procedury víceméně univerzální. První parametr funkce AddMenu je typ souboru, kterého se bude položka v menu týkat. Následuje samotný text, který bude v menu zobrazen a posledním parametrem je aplikace, která bude spuštěna. Jako parametr bude aplikaci předán právě název zvoleného souboru.

V naší ukázce najdete pro otestování funkčnosti dvě tlačítka. První přidá do menu položku, která se týká obrázků BMP, které budou spuštěny v aplikaci Malování. Druhé tlačítko záznam z registru opět odstraní pomocí funkce DeleteMenu.

Diskuze (2) Další článek: 90 minutové/800 MB CD-R od TDK

Témata článku: Software, Windows, Programování, Trik, Commando, Díl, Shell, Delete Fil, Menu, Command


Určitě si přečtěte

Vybrali jsme 16 programovatelných hraček a stavebnic pro děti. A vlastně i pro vás

Vybrali jsme 16 programovatelných hraček a stavebnic pro děti. A vlastně i pro vás

** Získejte děti pro matematiku a základy techniky ** Kupte jim hračku nebo stavebnici, které vdechnou vlastní život ** Vybrali jsme 16 stavebnic pro nejmenší caparty i vás samotné

Jakub Čížek | 16

Modelářský zázrak: Maketa raketoplánu Columbia, která létá jako skutečná raketa

Modelářský zázrak: Maketa raketoplánu Columbia, která létá jako skutečná raketa

** Model raketoplánu Columbia od českého konstruktéra umí i létat ** Obdivuhodný model si vzal 1600 hodin práce ** Podívejte se na fotografie ze stavby a prvního letu

Karel Jeřábek | 20



Aktuální číslo časopisu Computer

Jak nastavit a ochránit nový mobil

Velký test bezdrátových klávesnicí a myší

Počítače v roce 2019

Srovnání barevných laserových multifunkcí