powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
25 сообщений из 55, страница 1 из 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
25 сообщений из 55, страница 1 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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