«« Site Rescued »»

While the site is still going to move from its current host, a new site will now take its place. More Info.

The new site may have less content, but the core will now remain. And it will now play nicely with phones! Keep an eye on the DelphiDabbler Blog for news.

» Help

Triggering default menu items from code

   

It's sometimes useful to be able to trigger the default menu item of a popup menu from code. Here is a routine that does just that for any popup menu.

uses
  Menus;

function TriggerDefaultMenuAction(const Menu: TMenu): Boolean;
  overload;
var
  Idx: Integer;
  MI: TMenuItem;
begin
  Assert(Assigned(Menu));
  Result := False;
  for Idx := 0 to Pred(Menu.Items.Count) do
  begin
    MI := Menu.Items[Idx];
    if MI.Default then
    begin
      MI.Click;
      Result := True;
      Break;
    end;
  end;
end;

The routine returns True if it found a default menu item and False if not.

TriggerDefaultMenuItem will also work with a main menu component, but it's not very useful since it will only examine the top level menu items, and it's very rare one of those is the default item.

You can adapt the code to trigger the default menu item of a sub menu as follows:

function TriggerDefaultMenuAction(const MenuItem: TMenuItem): Boolean;
  overload;
var
  Idx: Integer;
  MI: TMenuItem;
begin
  Assert(Assigned(MenuItem));
  Result := False;
  for Idx := 0 to Pred(MenuItem.Count) do
  begin
    MI := MenuItem.Items[Idx];
    if MI.Default then
    begin
      MI.Click;
      Result := True;
      Break;
    end;
  end;
end;

This code loops through the sub menu items of a menu item. If, for example, you had a File menu on a main menu (called File1) and that menu had a default entry, you could trigger it by calling:

TriggerDefaultMenuItem(File1);
Author: Peter Johnson
Contributor: Peter Johnson
Added: 2007-10-12
Last updated: 2007-10-12

« Return to contents »