Zalamovanie príliš dlhého menu.

procedure TfrmMain.LoadViewMenu;
var
  itemNum: integer;
  mnu: TMenuItem;
  menuItemHeight: integer;
  itemsPerColumn: integer;
 
begin
  {remove any existing menu items from the View menu}
  while mnuView.Count > 0 do begin
    {freeing an item apparently deletes it from the menu}
    mnuView.Items[0].Free;
  end;
 
  {find the height of each menu item. The 2 was chosen after some experimentation}
  menuItemHeight := GetSystemMetrics(SM_CYMENU) + 2;
 
  {calculate the number of items per column}
  itemsPerColumn := screen.height div menuItemHeight;
 
  {create the items}
  for itemNum := 0 to 99 do begin
    mnu := TMenuItem.Create(self);
    mnu.caption := 'Item ' + inttostr(itemNum);
 
    {start a new column if necessary}
    if (itemNum mod itemsPerColumn = 0) and (itemNum>0) then begin
      mnu.break := mbBarBreak;
    end;
 
    {assign the method which handles the menu}
    mnu.OnClick := HandleMenuClick; 
    mnuView.Add(mnu);
  end;
end;