Идёт загрузка страницы...

htp://aptem.net.ru





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

Данный код изменяет количество пунктов меню в зависимости от текущего разрешения. Данная схема работает безукоризненно. В нижеприведенном коде 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]