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í, Shell, Díl, Delete Fil, Trik, Command, Menu, Commando


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

Rekordy počasí: V Česku to ještě jde, skutečné extrémy zažívají jinde

Rekordy počasí: V Česku to ještě jde, skutečné extrémy zažívají jinde

** Teplotní extrémy dokážou překvapit. Seznamte se s rekordy v Česku i ve světě ** Rekordní hodnoty jsou mnohdy až k neuvěření ** Zjistěte, kdy ke bylo největší horko, zima, déšť či vítr

Karel Kilián | 7

Nechcete platit za Total Commander? Těmito bezplatnými programy ho můžete nahradit

Nechcete platit za Total Commander? Těmito bezplatnými programy ho můžete nahradit

** Total Commander je na Windows takřka legendou ** Licence však stojí více než tisíc korun ** Našli jsme pro vás deset alternativ dostupných zdarma

Karel Kilián | 140

15 věcí, které umí Windows 10, ale možná o nich vůbec nevíte

15 věcí, které umí Windows 10, ale možná o nich vůbec nevíte

** Systém Windows 10 umí spoustu užitečných drobností ** O mnoha praktických funkcích pravděpodobně ani nevíte ** Poznejte užitečné tipy, které se vám mohou hodit každý den

Vladislav Kluska | 36

Byli tam! Důkazy o přistání na Měsíci, Lunochody i čínská sonda jsou vidět z vesmíru

Byli tam! Důkazy o přistání na Měsíci, Lunochody i čínská sonda jsou vidět z vesmíru

** Sonda LRO pořídila z oběžné dráhy Měsíce zajímavé snímky ** Jsou na nich vidět artefakty všech misí programu Apolla, které přistály na povrchu Měsíce ** Jde například o části lunárních modulů, rovery a dokonce i vlajky

Petr Kubala | 54

Alan Turing: Genius, který matematicky stvořil počítač

Alan Turing: Genius, který matematicky stvořil počítač

Řešením matematického problému se dostal k modelu teoretického stroje, který nese jeho jméno a je základem logiky univerzálních počítačů.

Pavel Tronner | 56


Aktuální číslo časopisu Computer

Velký test 18 bezdrátových sluchátek

Vše o přechodu na DVB-T2

Procesory AMD opět porážejí Intel

7 NVMe M.2 SSD v přímém souboji