Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh / 25 сообщений из 55, страница 1 из 3
02.09.2020, 19:46
    #39994978
Alexander2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
Собственно сабж такой.

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

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

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

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


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

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

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

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

я ж тебе рабочий проект приложил.
...
Рейтинг: 0 / 0
02.09.2020, 22:50
    #39995020
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
ъъъъъ
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
02.09.2020, 22:53
    #39995021
Alexander2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
ъъъъъ,

Спасибо большое, я запустил - не выскакивает сообщение - не заходит на CM_MenuClosed чтоб запустить таймер.
...
Рейтинг: 0 / 0
02.09.2020, 22:58
    #39995023
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
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
02.09.2020, 23:03
    #39995024
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перехватить событие закрытия IndicatorTitleMenu в DBGridEh
Alexander2
, я запустил - не выскакивает сообщение - не заходит на CM_MenuClosed чтоб запустить таймер.

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

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

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

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



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

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

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


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

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

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

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

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

Ооо...


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

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

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

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

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

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


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