Текущий архив: 2005.01.09;
Скачать: CL | DM;
Вниз
Динамическое PopupMenu Найти похожие ветки
← →
2nd (2004-12-21 20:15) [0]Приветствую! Помогите советом. Есть DBGrid, есть PopupMenu. В меню перечислены поля грида и при выборе, поля в гриде скрываются/показываются. Естественно, содержимое грида будет меняться. Т.е. при заполнении DBGrid"а нужно переделывать меню и для каждого элемента писать обработчик вида N[i]Click -> DBGrid1.Fields[i].Visible := True/False; У кого-нибудь есть идеи как это сделать? Ничего в голову не приходит :(
← →
2nd (2004-12-21 20:17) [1]Или какой-нибудь альтернативный вариант? Но, думается, с меню было бы красивее...
← →
Hmm © (2004-12-21 20:46) [2]Не вижу надобности делать именно "динамическое меню". Сделай "обыкновеное", выставляй галочки у видимого поля и убирай их у скрываемого... в чем проблемма?
← →
2nd (2004-12-21 23:33) [3]Сейчас в гриде три стобца, через минуту - двадцать.
← →
Dolt © (2004-12-22 01:26) [4]Примерно так - естессна надо будет добавить проверок
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;
← →
Dolt © (2004-12-22 01:30) [5]Тэкс... ошибка, tag нужно поставить после енда
-- skip ----
T.Caption:=DBGrid1.Columns[i].Title.Caption;
PopupMenu1.Items.Add(t);
end;
T.tag:=i;
T.Visible:=true;
-- skip ----
← →
2nd (2004-12-22 02:10) [6]2Dolt
Вот за это спасибо :)
Страницы: 1 вся ветка
Текущий архив: 2005.01.09;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.029 c