Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Динамическое PopupMenu [D7, WinXP]


2nd ©   (2004-12-21 20:15:00) 

Приветствую! Помогите советом. Есть DBGrid, есть PopupMenu. В меню перечислены поля грида и при выборе, поля в гриде скрываются/показываются. Естественно, содержимое грида будет меняться. Т.е. при заполнении DBGrid'а нужно переделывать меню и для каждого элемента писать обработчик вида N[i]Click -> DBGrid1.Fields[i].Visible := True/False; У кого-нибудь есть идеи как это сделать? Ничего в голову не приходит :(


2nd   (2004-12-22 02:10:00) [1]

2Dolt
Вот за это спасибо :)


Dolt   (2004-12-22 01:30:00) [2]

Тэкс... ошибка, tag нужно поставить после енда

--    skip    ----
     T.Caption:=DBGrid1.Columns[i].Title.Caption;
     PopupMenu1.Items.Add(t);
     end;
   T.tag:=i;
   T.Visible:=true;
--    skip    ----


Dolt   (2004-12-22 01:26:00) [3]

Примерно так - естессна надо будет добавить проверок

procedure TForm1.PopupMenu1Popup(Sender: TObject);
Var
 i:integer;
 T:TMenuItem;
 s:String;
begin
 for i:=0 to PopupMenu1.Items.Count-1 do begin
   PopupMenu1.Items[i].Visible:=false;
   end;
 For i:=0 to DBGrid1.Columns.Count-1 do begin
   s:='mi'+DBGrid1.Columns[i].FieldName;
   T:=TMenuItem(PopupMenu1.FindComponent(s));
   IF T=nil Then begin
     t:=TMenuItem.Create(PopupMenu1);
     T.OnClick:=myClick;
     T.name:=s;
     T.Caption:=DBGrid1.Columns[i].Title.Caption;
     T.tag:=i;
     PopupMenu1.Items.Add(t);
     end;
   T.Visible:=true;
   T.Checked:=DBGrid1.Columns[i].Visible;
   end;
end;

procedure TForm1.myClick(Sender: TObject);
begin
   DBGrid1.Columns[TMenuItem(sender).Tag].Visible:=not TMenuItem(sender).Checked;
end;


2nd   (2004-12-21 23:33:00) [4]

Сейчас в гриде три стобца, через минуту - двадцать.


Hmm   (2004-12-21 20:46:00) [5]

Не вижу надобности делать именно "динамическое меню". Сделай "обыкновеное", выставляй галочки у видимого поля и убирай их у скрываемого... в чем проблемма?


2nd   (2004-12-21 20:17:00) [6]

Или какой-нибудь альтернативный вариант? Но, думается, с меню было бы красивее...


Наверх

Титульная страница Поиск, карта сайта Написать письмо