![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
tag [D6, WinXP]
Glonia Zbanov © (2002-03-27 10:44:00)Как через tag обратится к нескольким компонентам - скажем у части меню и кнопок поменять enable на false
reonid (2002-03-27 12:05:00) [1]2PVOzerski
Зато у меня проще :)
Хотя, если там будет порядка нескольких сотен тысяч компонент,
думаю, будет тормозить :)
PVOzerski (2002-03-27 11:45:00) [2]2reonid:
А у меня быстрее работать будет :^). Особенно, если компонентов на форме много. Тогда уж надо
считать, сколько MenuItem"ов нашли и вовремя break делать...
reonid (2002-03-27 11:39:00) [3]for i := 0 to {MainForm.}ComponentCount-1 do
begin
if (Components[i] is TMenuItem) and (Components[i].Tag = 3) then
TMenuItem(Components[i]).Enabled := False;
end;
PVOzerski (2002-03-27 11:33:00) [4]Можно сделать другое:
Поскольку в Delphi32 tag 4-байтовый, как и pointer, можно через него организовать связанный список
тех же MenuItems.
В FormCreate делаем что-то типа
MenuItem1.tag:=longint(MenuItem2);
MenuItem2.tag:=longint(MenuItem3);
и т.д.,
а потом по рекурсии:
procedure Form1.MenuItem1Click(Sender:tObject);
begin
if Sender is tMenuItem then
with tMenuItem(Sender)do
begin
Enabled:=not Enabled;
if Tag<>0 then
MenuItem1Click(tObject(Tag));
end;
end;
Не проверял, но, IMHO, должно сработать.
kull (2002-03-27 11:17:00) [5]Нет, мне кажется, это из области фантастики.
Прийдется все таки перебрать нужные пункты.
Glonia Zbanov (2002-03-27 10:55:00) [6]Могу я при запуске программы сказать менюитема с tag=3 enable=false
но не перечислять их поочереди а сразу ко всем.
kull (2002-03-27 10:51:00) [7]Не понял. Переведи...