Советы по 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 beginmnu := TMenuItem.Create(self);mnu.caption := 'Пункт ' + inttostr(itemNum);
{при необходимости начинаем с новой колонки}if (itemNum mod itemsPerColumn = 0) and (itemNum>0) then beginmnu.break := mbBarBreak;end;
{назначаем обработчик события OnClick}mnu.OnClick := HandleMenuClick;
mnuView.Add(mnu);end;end;

[000177]




Начало  Назад  Вперед