Советы по Delphi


Очень длинные меню


Данный код изменяет количество пунктов меню в зависимости от текущего разрешения. Данная схема работает безукоризненно. В нижеприведенном коде mnuView - выводимое меню, HandleMenuClick - назначенный обработчик для события OnClick.

    procedure TfrmMain.LoadViewMenu;
var
itemNum: integer; mnu: TMenuItem; menuItemHeight: integer; itemsPerColumn: integer; begin


{удаляем все видимые пункты меню} while mnuView.Count > 0 do begin {метод Free удаляет пункт меню} mnuView.Items[0].Free; end;
{находим высоту каждого пункта меню. Значение 2 получено в результате экспериментов}
menuItemHeight := GetSystemMetrics(SM_CYMENU) + 2;
{вычисляем количество пунктов в колонке меню} itemsPerColumn := screen.height div menuItemHeight;
{создаем пункты меню} for itemNum := 0 to 99 do begin mnu := TMenuItem.Create(self); mnu.caption := 'Пункт ' + inttostr(itemNum);
{при необходимости начинаем с новой колонки} if (itemNum mod itemsPerColumn = 0) and (itemNum>0) then begin mnu.break := mbBarBreak; end;
{назначаем обработчик события OnClick} mnu.OnClick := HandleMenuClick;
mnuView.Add(mnu); end; end;

[000177]



Содержание раздела