Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.10.2011, 18:02
Snake22 Snake22 вне форума
Активный
 
Регистрация: 20.02.2011
Сообщения: 374
Репутация: 744
По умолчанию проверить значение тега всех пунктов Popup

здраствуйте.нужна помощь в следующем.
есть у меня всплывающее меню по ПКМ,и пункты в него добавляются в завистимости от разных ситуаций разные.
т есть там может появиться много вложенных пунктов,пунктов вложенных во вложенные и тд...
при создании в теги записывается специальное не повторяющееся число,
и далее мне нужно проверить все итемсы моего меню и если тег совпадет с определенным числом то этот пункт сделать недоступным.
так вот,как можно пробежаться сразу по всем пунктам?включая вложенные.
а то у мя получается пробежаться только по первым пунтам,вложенные не проверяются.
for i:=0 to PopupMenu.items.count-1
а как проверить сразу все?я же заранее незнаю в каком именно пункте будет вложенный пункт.
Ответить с цитированием
  #2  
Старый 21.10.2011, 18:06
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

У каждого пункта есть св-во Items, в котором ссылки на его подпункты.
Ответить с цитированием
  #3  
Старый 21.10.2011, 18:20
Snake22 Snake22 вне форума
Активный
 
Регистрация: 20.02.2011
Сообщения: 374
Репутация: 744
По умолчанию

Цитата:
У каждого пункта есть св-во Items, в котором ссылки на его подпункты.
это я знаю.но как их перебирать есди я не знаю заранее сколько их будет?

upd
ага,сделал так,на примере кепшн. это правильно получается?
в процедуре PopupMenu1Popup
в конце добавил такое
for i:=0 to PopupMenu1.Items.Count-1 do
LockPop(PopupMenu1.Items[i]);
и сама процедура
Код:
procedure LockPop(Itm:TMenuItem);
var i:Integer;
begin
if Itm.Count=0 then Itm.Caption:='' //если нет подпунктов то переименуем
else //если есть подпункты то вначале переименуем их этой же самой процедурой
 begin
 for i:=0 to Itm.Count-1 do
 LockPop(Itm.Items[i]);
 Itm.Caption:=''; //и потом переименуем переименуем основной пунтк
 end;
end;
это норм что процедурой вызывается самаже процедура? так-то вроде ошибок не возникло
Ответить с цитированием
  #4  
Старый 21.10.2011, 21:52
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Это называется "рекурсия"
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:24.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter