![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамическое 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]Или какой-нибудь альтернативный вариант? Но, думается, с меню было бы красивее...