powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
25 сообщений из 55, страница 2 из 3
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995046
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,
из твоего проекта сделал
https://cloud.mail.ru/public/4uwr/Qw6rZU3dg
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995049
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ


жди, когда мс-софтовцы антивирь вылечат.

сделал исключение - запустил твой проект - НИКАКИХ попапов не выскакивает :(.

Среда: Windows 7.
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995051
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander2
ъъъъъ,
из твоего проекта сделал
https://cloud.mail.ru/public/4uwr/Qw6rZU3dg

Не работает!

И вообще - поведение отличается от моего. У меня - любой клик на элемент меню (выбор отображаемых столбцов, например) - вызывает закрытие меню. У тебя - можно сделать несколько кликов.

Наверное, EhLib разные. EhLib v5.6.

- ?
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995053
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,
Тут EhLib 9

а запакуй Свой проект exe и пришли, в котором ты скриншот показывал где НЕВИДИМЫЕ/ВИДИМЫЕ
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995055
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander2
Среда: Windows 7.

И у меня.
Возможно, из-за различия версий EhLib разное поведение.

Хотя, мой икзешник у тебя "не работает"...
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995057
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander2

https://cloud.mail.ru/public/2TPZ/4gSbdhvFD
Пароль к архиву: popup
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995058
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,

спасибо - работает - выскакивает как надо! Да-а-а......дела!
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995060
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может, и хорошо, что не получилось: обновил бы версию EhLib - и всё, "пропало".
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995062
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Очень может быть, что в версии 9.* EhLib реализацию PopUp-меню свою сделали, вот хак из статьи не взлетел.
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995064
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,
на запрос на форуме они молчат как партизаны, вероятно, думают как исправить в следующем релизе.
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995066
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ
в версии 9.* EhLib реализацию PopUp-меню свою сделали

Посмотрел исходники 9.* - так и есть.

Тоже вроде ничего сложного, но EhLib 9.* у меня не установлен, т.е. проверить экспериментально не могу, придется тебе самостоятельно разбираться.
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995104
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,

вот смог найти и сравнить только с 6 версией
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995113
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,
При отключении UseGlobalMenu ессно не работает встроенное иерархическое меню, но срабатывает на ПРАВУЮ мышку (показывет кастомное меню).

тут проект
https://cloud.mail.ru/public/4BGN/43QRo4BFS
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995385
ъъъъъ
Alexander2

https://cloud.mail.ru/public/2TPZ/4gSbdhvFD
Пароль к архиву: popup


У того проекта работает перенос если зажать, у твоего же проекта - перенос не работает. Он выделяет красным.
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995387
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный,

дело не в переносе колонок, дело в том, что в моем проекте работает ЛЕВЫЙ клик и традиционно открывает IndicatorTitleMenu, можно отчекнуть видимость какого-нибудь поля, и если ЭТИМ же Левым кликом ткнуть в тело грида, то НИЧЕГО не происходит (а этот момент как раз и хотелось бы перехватить).
Если ткнуть в IndicatorTitleMenu ПРАВЫМ кликом, то открывается custom popup menu и потом после покидания показывает какие поля видимы/невидимы.
А задача как раз чтоб НА традиционный ЛЕВЫЙ клик срабатывал перехвать "покидания" IndicatorTitleMenu.
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995779
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,

А можешь проверить и показать ЧТО у тебя показывает на точке останова тут? У меня nil в обоих проектах ;(
Код: pascal
1.
2.
3.
4.
5.
procedure TForm1.grMainBuildIndicatorTitleMenu(Grid: TCustomDBGridEh; var
  PopupMenu: TPopupMenu);
begin
  Grid.DefaultBuildIndicatorTitleMenu(PopupMenu);   //-------------------------------- тут
end;
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995798
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
компьютера с дельфи у меня нет, но я помню:nil.
Объект попап-меню создаётся в вызываемой процедуре, доступен для работы после вызова, я писал об жтом ранее.
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995819
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,

да, я понял, можно начать что-то вроде? типа составлять свой список видимых полей (это в принципе все что и нужно):

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 var
  kol,row :Integer;
  MyItem :String;

begin
  Grid.DefaultBuildIndicatorTitleMenu(PopupMenu);

  MyItem := ''; 

  for row := 0 to PopupMenu.Items.Count-1 do
   for kol := 0 to PopupMenu.Items[row].Count-1 do
     if PopupMenu.Items[row].Items[kol].Checkbox = True......  (тут надо понять/убедиться, что ползаю по списку полей грида (после 

выбора опции IsVisibleColumns
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995827
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander2,

нет.
Эта точка - в момент ДО показа попап-меню, а не после.
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995833
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander2,

ещё раз напомню, что компа у меня нет, поэтому - только на словах.
Так вот. В твоей версии EhLib используется кастомный попап. Посмотри в коде - "когда вызывается деструктор этого попап-меню?". Вполне возможно, что всякий раз при дезактивации меню. Если это так, то ты легко можешь воткнуть свой код в нужное место - возможно, даже не модифицируя код библиотеки.
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995836
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander2,

неужели прямо так нужно решать именно ЭТУ задачу?
Так много времени на эту ерунду тратишь...
Ситуация - точно не https://www.gunsmoker.ru/2008/10/x-y-z.html?m=1 ?
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995839
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,

Итак на пальцах:

1. есть два грида - ПЕРВЫЙ грид с датасетом с туевой хучей колонок (создается динамически)
2. ВТОРОЙ грид - показывает список колонок этого ПЕРВОГО грида (просто формирую при открытии ПЕРВОГО датасета), в нем я могу очекнуть строки списка, то есть пометить как НЕВИДИМЫЕ и зарефрешить ПЕРВЫЙ грид с сокращенным количеством колонок - это РАБОТАЕТ, не проблема.
3. Если юзер открывает IndicatorTitleMenu ПЕРВОГО грида и самостоятельно (игнорируя ВТОРОЙ, типа-типа, управляющий грид) отчекивает вырадающий список полей ПЕРВОГО грида, то мне надо КАК-ТО "черезЖО" как ты выразился, обновить мой ВТОРОЙ ГРИД, чтоб показать какие в его списке поля стали невидимыми. Вот это черезЖ и не срабатывает, не понятно как перехватить момент схлопывания IndicatorTitleMenu, чтоб в этот момент запустить свою процедуру обновления списка ВТОРОГО грида.
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995853
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander2,

понятно.
Посмотри реализацию метода
Код: pascal
1.
procedure TDBGridEhCenter.DefaultBuildIndicatorTitleMenu(Grid: TCustomDBGridEh; var PopupMenu: TPopupMenu);


В этом методе в нулевой (первый, т.е.) элемент попап- меню внедряется айтем с текстом
Код: pascal
1.
  SVisibleColumnsEh = 'Видимые столбцы';


А к ней - добавляются айтемы для каждого столбца. В OnClick для вызывается простой код, меняющий свойство .Visible связанного столбца:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
procedure TDBGridEhCenter.MenuVisibleColumnClick(Sender: TObject);
var
  Column: TColumnEh;
begin
  if Sender is TColumnEhMenuItem then
  begin
    Column := TColumnEhMenuItem(Sender).ColumnEh;
    if Column.Visible and (Column.Grid.VisibleColumns.Count <= 1) then
//  do nothing
    else
      Column.Visible := not Column.Visible;
//    with TPopupMenu(TColumnEhMenuItem(Sender).Owner) do
//    begin
//      Popup(PopupPoint.X,PopupPoint.Y);
//    end;
  end;
end;




Я предлагаю OnClick этих айтемов подменить на свой, в котором тупо вызывать твою процедуру подсчета столбцов.
Поехали.
1. В событии OnBuildIndicatorTitleMenu грида втыкаем дефолтный обработчик:
Код: pascal
1.
  Grid.DefaultBuildIndicatorTitleMenu(PopupMenu);


2.
... берем первую строку меню и под-строкам её назначаем собственный обработчик. Старый обработчик сохраняем (поля объекта класса достаточно, ибо обработчик одинаков для всех айтемов):

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
procedure TForm1.grMainBuildIndicatorTitleMenu(Grid: TCustomDBGridEh; var
  PopupMenu: TPopupMenu);
var
  cmi: TColumnEhMenuItem;
  i: Integer;
  mi: TMenuItem;
begin
  Grid.DefaultBuildIndicatorTitleMenu(PopupMenu);

  mi := PopupMenu.Items[0]; // Первая строка
  for i := 0 to Pred(mi.Count) do
    if mi.Items[i] is TColumnEhMenuItem then begin
      cmi := TColumnEhMenuItem(mi.Items[i]);
      OldOnClick := cmi.OnClick; // Сохраняем старый обработчик
      cmi.OnClick := KOnClick; // Заменяем на свой
    end
end;


В нашем обработчике работаем со столбцами:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
procedure TForm1.KOnClick(Sender: TObject);
var
  fCN: string;
  i: Integer;
begin
  if Assigned(OldOnClick) then begin
    OldOnClick(Sender); // Вызываем "стандартный" обработчик
    // бла- бла - бла
    fCN := 'Столбцы грида:';
    for i := 0 to Pred(grMain.Columns.Count) do begin
      fCN := Format('%s'#10'%s:%s', [fCN, grMain.Columns[i].Title.Caption,
        ifThen(grMain.Columns[i].Visible, '', ' НЕ') + 'видимый']);
    end;
    Memo1.Lines.Text := fCN
  end;
end;


Всё. Работает.
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995854
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проект:
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995856
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Икзешник: https://cloud.mail.ru/public/PSQf/h1UoW8eke - пароль: popup
...
Рейтинг: 0 / 0
25 сообщений из 55, страница 2 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]