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


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

Alza si za osobní odběr účtuje už 45 Kč. Když zaplatíte předem, dostanete slevu

Alza si za osobní odběr účtuje už 45 Kč. Když zaplatíte předem, dostanete slevu

** Osobní odběr v Alze vyjde na 45 Kč ** Když zaplatíte kartou předem, dostanete slevu 30 Kč ** Většina ostatních e-shopů poplatek za osobní odběr nevede

David Polesný | 171

Porno insider: Jak virtuální realita vstupuje do filmů pro dospělé

Porno insider: Jak virtuální realita vstupuje do filmů pro dospělé

** Pornografie údajně představuje třetinu internetové obsahu a je technologický tahounem ** Do erotického obsahu postupně zasahuje i virtuální realita ** Kromě vizuálního vjemu se pracuje také na virtuálním uspokojení toho hmatového

Jan Dudek | 29

Pojďme programovat elektroniku: Jak vlastně funguje akcelerometr a gyroskop nejen ve vašem telefonu

Pojďme programovat elektroniku: Jak vlastně funguje akcelerometr a gyroskop nejen ve vašem telefonu

** Každý současný vybavený mobil má akcelerometr a gyroskop ** Jenže co každé z těchto čidel vlastně dělá a jak vypadá? ** Dnes si to vysvětlíme a do hry zapojíme i Airbus A380 a Arduino

Jakub Čížek | 11

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 | 65


Aktuální číslo časopisu Computer

Jak vytvořit a spravovat vlastní web

Velký test herních klávesnic a DVB-T2 tunerů

Vše o formátu RAW

Vybíráme nejlepší základní desku