Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Редактор колонок для DbGridEh


Автор: Alex 3.10.2006, 22:30
http://alexandr-s.livejournal.com/1524.html?mode=reply

Автор: Vas 4.10.2006, 15:29
Спасибо, нужный модуль. С меня [+]

Только нашел один глючок. Если колонке грида не определено поле из датасета, то при попытке показать frmColumnEdit вываливается AV.

Автор: Alex 4.10.2006, 20:07
Цитата(Vas @  4.10.2006,  16:29 Найти цитируемый пост)
Если колонке грида не определено поле из датасета, то при попытке показать frmColumnEdit вываливается AV.

по подробней можно?

Автор: Alex 4.10.2006, 21:12
Скачай модуль еще раз, AV возникать не будет, но и колонки для которых не задан Field я не покажу в редакторе

Автор: Akella 11.10.2006, 16:46
Вот предлагаю ещё свой вариант (не без участия Alex`а) с использованием TPopupMenu

1. Кидаем на форму две компоненты TPopupMenu, я назвал его pmColumns2
и pmCustomSelect - это уже всплывающее меню типа Добавить, Изменить, Удалить, сами строите как хотите
pmCustomSelect будет всплывать, когда щёлкните НЕ по заголовку грида.

2.
Код

//в событии грида
procedure TfmApartSearch.dbgApart3ContextPopup(Sender: TObject; MousePos: TPoint;
  var Handled: Boolean);
begin
//узнаём, где тыцнули мышей
 if TDBGridEh(sender).MouseCoord(MousePos.X, MousePos.Y).Y <> 0 then
     TDBGridEh(sender).PopupMenu:= pmCustomSelect
   else
     TDBGridEh(sender).PopupMenu:= pmColumns2;
end;


3. Создаём процедуру нажатия на пункт меню
Код

procedure TfmApartSearch.ShowHideColumn(MenuItemCaption:String);
Var
 i:Cardinal;
begin
  if (not (ActiveControl is TDBGridEh)) then exit;

  MenuItemCaption := StringReplace(MenuItemCaption,'&','',[rfReplaceAll, rfIgnoreCase]);
  with TDBGridEh(ActiveControl) do
    For i := 0 to Columns.Count-1 do
      if Columns[i].Title.Caption = MenuItemCaption
       then Columns[i].Visible := not Columns[i].Visible;
end;



procedure TfmApartSearch.MenuItem1Click(Sender: TObject);
begin
  ShowHideColumn((sender as TMenuItem).Caption);
end;


4. В событии всплывания меню строим список(создаём пункты меню)
Код

procedure TfmApartSearch.pmColumns2Popup(Sender: TObject);
Var
 i:Cardinal;
 MenuItem : TMenuItem;
begin
  if (not (ActiveControl is TDBGridEh)) then exit;
  with TDBGridEh(ActiveControl) do  begin
//устанавливаем Caption и видимость меню
     pmColumns2.Items.Clear;
     For i := 0 to Columns.Count-1
     do begin
       MenuItem := TMenuItem.Create(pmColumns2);
       MenuItem.Caption := Columns[i].Title.Caption;
       MenuItem.Checked := Columns[i].Visible;
       MenuItem.OnClick := MenuItem1Click;
       pmColumns2.Items.Add(MenuItem);
     end;//for
 end;//with
end;

Всё. Щелкая по заголовку грида видим pmColumns2. Щёлкаем по данным грида видим pmCustomSelect.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)