Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.07.2011, 11:43   #1
Ky3Heu,
Пользователь
 
Регистрация: 01.04.2009
Сообщений: 94
Печаль Работа с дропдаун меню

Создаю динамическое многоуровневое дропдаун меню
Код:
    //Создаем дропдаун меню по службам
  for I := 0 to DMF.sCeh.RecordCount-1 do
  begin

    mlvl1 := TMenuItem.Create(self);

    ab := Trim(DMF.sCehABBR.Value);

    DMF.sDownL2.Close;
    DMF.sDownL2.SQL.Clear;
    DMF.sDownL2.SQL.Add('Select * from DownLvl2 where abbr = :ab');
    DMF.sDownL2.Parameters.ParamByName('ab').Value := ab;
    DMF.sDownL2.Open;

    dl := DMF.sCehDownLvl.Value;

    mlvl1.Caption := Trim(DMF.sCehABBR.Value);
    RegF.sObj.Items.Add(mlvl1);
    mlvl1.OnClick := self.MenuSelect;

    for dl2 := 0 to DMF.sDownL2.RecordCount-1 do
    begin

    mlvl2         := TMenuItem.Create(self);
    mlvl2.Caption := Trim(DMF.sDownL2LVL2.Value);
    mlvl1.Add(mlvl2);
    mlvl2.OnClick := self.SubMenuSelect;

    l2 := Trim(DMF.sDownL2LVL2.Value);

    if dl = 3 then
    begin

      DMF.sDownL3.Close;
      DMF.sDownL3.SQL.Clear;
      DMF.sDownL3.SQL.Add('Select * from DownLvl3 where downlvl2 = :dl2');
      DMF.sDownL3.Parameters.ParamByName('dl2').Value := l2;
      DMF.sDownL3.Open;

        for j := 0 to DMF.sDownL3.RecordCount-1 do
        begin
        mlvl3 := TMenuItem.Create(self);
        mlvl3.Caption := Trim(DMF.sDownL3DownLvl3.Value);
        mlvl2.Add(mlvl3);
        mlvl3.OnClick := self.L3MenuSelect;
        DMF.sDownL3.Next;
        end;//for j := 0 to DMF.sDownL3.RecordCount-1

      DMF.sDownL2.Next;
    end;//for dl2 := 0 to DMF.sDownL2.RecordCount-1

    end;//if DMF.sCehDownLvl.Value = 3

   DMF.sCeh.Next;

  end; //for I := 0 to DMF.sCeh.RecordCount-1
Все работает оч хорошо, но проблема в том, что я теперь не знаю как очистить созданное попупменю
По ракетам и хоккею - Россияне всех сильней!
Ky3Heu, вне форума Ответить с цитированием
Старый 21.07.2011, 11:53   #2
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Не оно?

Код:
  for i := 0  to PopupMenu1.Items.Count - 1 do PopupMenu1.Items[i].Free;
Баламут вне форума Ответить с цитированием
Старый 21.07.2011, 12:30   #3
Ky3Heu,
Пользователь
 
Регистрация: 01.04.2009
Сообщений: 94
По умолчанию

Это и было у меня....
Код:
for i := 0  to Sobj.Items.Count-1  do
Sobj.Items[i].Free;
пробовал и так..
Код:
Sobj.Items.Items[i].Free;
бесполезно.. Менюшка состоит из нескольких верхних уровней, которые в свою очередь могут иметь одну или две сабменюшки.. Этот код удаляет только 1 верхний уровень.. а на втором (верхнем уровне) выдает ошибку List Index Out of bounds (1).
По ракетам и хоккею - Россияне всех сильней!

Последний раз редактировалось Ky3Heu,; 21.07.2011 в 12:33.
Ky3Heu, вне форума Ответить с цитированием
Старый 21.07.2011, 13:15   #4
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Скинь сюда исходник. У меня что-то не получается воспроизвести ошибку. Все прекрасно работает.

Хотя стой, нет. Меню было слишком простым. Щас гляну дальше
Баламут вне форума Ответить с цитированием
Старый 21.07.2011, 13:35   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Этот код удаляет только 1 верхний уровень.. а на втором (верхнем уровне) выдает ошибку List Index Out of bounds (1).
удалять надо начинать с нижних уровней (с подменю)
и перебор с конца списка.
Код:
for i := Sobj.Items.Count-1  downto 0 do
Sobj.Items[i].Free;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 21.07.2011, 13:47   #6
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Код:
   PopupMenu1.Items.Clear;
Ну или код от evg_m.

Последний раз редактировалось Баламут; 21.07.2011 в 13:49.
Баламут вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Многоуровневое дропдаун меню Ky3Heu, Общие вопросы Delphi 4 30.06.2011 12:29
работа в меню kloffelin Помощь студентам 5 21.02.2010 17:08
Работа с меню и рисунками Mag992 Помощь студентам 6 17.02.2010 08:57
Работа с меню в консоли kanja Общие вопросы C/C++ 4 24.11.2008 22:37