powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
55 сообщений из 55, показаны все 3 страниц
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39994978
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно сабж такой.

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

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

немного через жопу, но можно.

Попап меню грида строится всякий раз, перед его показом.
Ты в событии грида OnBuildIndicatorTitleMenu пропиши строчку
Код: sql
1.
Grid.DefaultBuildIndicatorTitleMenu(PopupMenu);


- после этой строчки переменная PopupMenu будет содержать указатель на нужное попап меню.

Но беда в том, что у попап меню нет события OnClose. Придется сделать, например, вот так:
http://delphi.cjcsoft.net/viewthread.php?tid=45678
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995016
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ
Но беда в том, что у попап меню нет события OnClose. Придется сделать, например, вот так:
http://delphi.cjcsoft.net/viewthread.php?tid=45678

Только, в message-процедуре процедуре, что на OnPopupClose, значения Visible столбцов будут все ещё прежними, какие были до активации меню, ибо сообщения о кликах по пунктам меню все ещё в очереди.
Можно не сильно заморачиваться и, например, кондово активировать вспомогательный таймер с минимальным интервалом.
А можно заморочится. :)

Пример проекта в аттаче:
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995017
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,
А можно мне в личку проект мыло в профиле ? Хотел бы перетереть детали.
Я попробовал сделать как в статье, что-то дальше затык.
Тут мой проект в атаче.
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995019
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander2,

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

я ж тебе рабочий проект приложил.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DBGridEhGrouping, MemTableDataEh, Db, MemTableEh, GridsEh, DBGridEh,
  Menus, ExtCtrls;

const
  CM_MENU_CLOSED = CM_BASE + 1001;


type
  TForm1 = class(TForm)
    grMain: TDBGridEh;
    MemTableEh1: TMemTableEh;
    MemTableEh1City: TStringField;
    MemTableEh1Country: TStringField;
    DataSource1: TDataSource;
    Timer1: TTimer;
    procedure grMainBuildIndicatorTitleMenu(Grid: TCustomDBGridEh; var PopupMenu:
      TPopupMenu);
    procedure CM_MenuClosed(var msg: TMessage); message CM_MENU_CLOSED;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }



  protected
  public
    { Public declarations }
  end;
type

  TPopupListEx = class(TPopupList)
  protected
    procedure WndProc(var aMsg: TMessage); override;
  private
    procedure PerformMessage(cm_msg: integer; aMsg: TMessage);
  end;


var
  Form1: TForm1;

implementation

uses
  EhLibConsts, StrUtils;

{$R *.dfm}

procedure TForm1.CM_MenuClosed(var msg: TMessage);
begin
  Timer1.Enabled := True
end;

procedure TForm1.grMainBuildIndicatorTitleMenu(Grid: TCustomDBGridEh; var
  PopupMenu: TPopupMenu);
begin
  Grid.DefaultBuildIndicatorTitleMenu(PopupMenu);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  fCN: string;
  i: Integer;
begin
  Timer1.Enabled := False;

  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;

  ShowMessage(fCN);

end;


{ TPopupListEx }

procedure TPopupListEx.PerformMessage(cm_msg: integer; aMsg: TMessage);
begin
  if Screen.Activeform <> nil then
    Screen.ActiveForm.Perform(cm_msg, aMsg.WParam, aMsg.LParam);
end;

procedure TPopupListEx.WndProc(var aMsg: TMessage);
begin
  if aMsg.Msg = WM_MENUSELECT then
    if (TWMMenuSelect(aMsg).Menu = 0) and (TWMMenuSelect(aMsg).MenuFlag = $FFFF) then
      PerformMessage(CM_MENU_CLOSED, aMsg);
  inherited;
end;

initialization
  Popuplist.Free; //free the "default", "old" list
  PopupList := TPopupListEx.Create; //create the new one
  // The new PopupList will be freed by
  // finalization section of Menus unit.
end.


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

Спасибо большое, я запустил - не выскакивает сообщение - не заходит на CM_MenuClosed чтоб запустить таймер.
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995023
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander2
ъъъъъ,
А можно мне в личку проект мыло в профиле ? Хотел бы перетереть детали.
Я попробовал сделать как в статье, что-то дальше затык.
Тут мой проект в атаче.

https://www.sql.ru/forum/actualfile.aspx?id=22191169] Приложенный файл (PopupMenu.zip - 53Kb)


Ошибка у тебя в модуле PopuplistEx:

Код: pascal
1.
2.
3.
4.
5.
procedure TPopupListEx.PerformMessage(cm_msg: integer; msg : TMessage) ;
begin
    if Screen.Activeform = nil // Нужно <>
     then Screen.ActiveForm.Perform(cm_msg, msg.WParam, msg.LParam) ;
end;
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995024
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander2
, я запустил - не выскакивает сообщение - не заходит на CM_MenuClosed чтоб запустить таймер.

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

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

немного через жопу, но можно.

Попап меню грида строится всякий раз, перед его показом.
Ты в событии грида OnBuildIndicatorTitleMenu пропиши строчку
Код: sql
1.
Grid.DefaultBuildIndicatorTitleMenu(PopupMenu);



- после этой строчки переменная PopupMenu будет содержать указатель на нужное попап меню.
...

- вот тут нужно активировать (например, назначить) особый обработчик CloseUp для PopUp меню, ибо в коде, что я приложил - глобальные изменения, ДЛЯ ВСЕХ PopUp меню. Ну, это уже мелочи.
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995027
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,

не заходит и все тут ;(, может версия Delphi другая? У меня Берлин.
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995028
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,
автора зачем тебе вообще ЭТОТ БРЕД, изначально?
в приватном онлайн режиме могу показать зачем, просто так я бы не парился.
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995030
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander2,


Alexander2
ъъъъъ,
А можно мне в личку проект мыло в профиле ? Хотел бы перетереть детали.
Я попробовал сделать как в статье, что-то дальше затык.
Тут мой проект в атаче.

https://www.sql.ru/forum/actualfile.aspx?id=22191169] Приложенный файл (PopupMenu.zip - 53Kb)

Проект исправленный. Распаковать в отдельную папку:
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995031
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,
я стараюсь - но не пашет хоть тресни!
пиши в личку alexan2001@hotmail.com - организуем скайп трансляцию для показа зачем, а также "не выскакивание кастомных сообщений о видимости/невидимости"
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995032
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander2
ъъъъъ,

не заходит и все тут ;(, может версия Delphi другая? У меня Берлин.

https://www.sql.ru/forum/actualfile.aspx?id=22191183] Приложенный файл (Video_2020-09-02_141811.zip - 66Kb)

Ооо...


У меня - D2007.
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995033
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995036
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,
скачал, запустил - MicrosoftEssentials запретил запуск ссылаясь на вирус.
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995038
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995039
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,

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

нет вируса, это бред, все антивирусы, кроме майкрософтского молчат: 22191199 .

Онлайн встречаться не будем, 200%.
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995041
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,
я верю, что работает exe, но если код проекта точно такой же, но в Берлине он не компилится в работоспособный, значит что-то поменяли в консерватории.
Мля, что делать? (с) Чернышевский
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995042
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander2,

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

а построй икзешник по коду из моего последнего проекта. И выложи, я а запущу у себя.
...
Рейтинг: 0 / 0
Как перехватить событие закрытия 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
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995863
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,
Д-а-а-а - работа мастера!!!
Напиши в личку ;)
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995865
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander2
Напиши в личку ;)


Шиш!
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995867
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,
а коньяк?
...
Рейтинг: 0 / 0
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
    #39995869
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander2,

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

Починили, черти.
...
Рейтинг: 0 / 0
55 сообщений из 55, показаны все 3 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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