Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Создание Иерархического Всплывающего Меню в Delphi: Устранение Дубликатов

Delphi , Компоненты и Классы , Меню

Вопрос, который был задан, заключается в необходимости динамического создания подменю для существующего пункта меню в приложении Delphi. Пользователь хочет добавить подменю к пункту "Option 3" под "Sub 2", чтобы структура меню выглядела иерархично.

Решение задачи

Для начала, необходимо убедиться, что подменю для "Option 3" под "Sub 2" не существует. Это можно сделать, проверяя наличие дочерних элементов у "Sub 2". Если таких элементов нет, то можно создать новое подменю. Вот пример кода, который решает данную задачу:

procedure TForm2.FormCreate(Sender: TObject);
var
  SubItem, MenuItem: TMenuItem;
  I, N: Integer;
  s: String;
begin
  // Проверка на наличие подменю у "Sub 2" пункта "Option 3"
  SubItem := FindMenuItem(popDynamic, 'Option 3', 'Sub 2');
  if SubItem = nil then
  begin
    // Создание подменю "Sub 1" для "Option 3"
    MenuItem := TMenuItem.Create(popDynamic);
    MenuItem.Caption := 'Sub 1';
    SubItem.Add(MenuItem);

    // Создание списка элементов для подменю
    stlist := TStringList.Create;
    stlist.Add('Item 1');
    stlist.Add('Item 2');
    stlist.Add('Item 3');

    // Добавление элементов подменю
    for I := 0 to stlist.Count - 1 do
    begin
      SubItem := TMenuItem.Create(popDynamic);
      SubItem.Caption := stlist[I];
      SubItem.OnClick := PopupItemClick;
      SubItem.Tag := I;
      MenuItem.Add(SubItem);
    end;
  end;
end;

function TForm2.FindMenuItem(var PopupMenu: TPopupMenu; const Caption1, Caption2: string): TMenuItem;
var
  Item: TMenuItem;
  SubItem: TMenuItem;
begin
  Result := nil;
  for Item in PopupMenu.Items do
  begin
    if SameText(Item.Caption, Caption1) then
    begin
      SubItem := Item;
      for SubItem in Item.Items do
        if SameText(SubItem.Caption, Caption2) then
          Result := SubItem;
    end;
  end;
end;

Функция FindMenuItem используется для поиска подменю в иерархии меню. Если подменю для "Sub 2" пункта "Option 3" не найдено, то создается новое подменю и заполняется динамическими пунктами.

Пример кода обработчика события клика по пункту меню

procedure TForm2.PopupItemClick(Sender: TObject);
var
  MenuItem: TMenuItem;
begin
  MenuItem := TMenuItem(Sender);
  Label1.Caption := stlist.Strings[MenuItem.Tag];
end;

Обработчик PopupItemClick используется для реагирования на выбор пользователем одного из динамически созданных пунктов меню.

Заключение

Данный подход позволяет избежать дублирования пунктов меню и обеспечивает динамическое создание подменю при необходимости. Это решение можно расширить, добавив дополнительную логику для обработки различных событий и данных, которые могут быть связаны с пунктами меню.

Создано по материалам из источника по ссылке.

Вопрос связан с динамическим созданием иерархического всплывающего меню в приложении Delphi, с устранением дубликатов путем проверки наличия подменю и его созданием при необходимости.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Меню ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-10 19:18:41/0.013879060745239/0