Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
1816 / 1030 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
1

Delphi 10. Назначение обработчика события компонента в инспекторе объекта из подключенного юнита

11.06.2019, 09:12. Показов 2257. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день Уважаемые форумчане.
Прошу помощи для лучшего понимания процесса.

Решаю простую задачку удобного назначения обработчика событию TitleClick DBGrid.
Для удобства использования в нескольких формах создал отдельный unit (см. код).
Так как "стандартный" обработчик события является методом объекта, то нужно создать этот метод.
Один из вариантов без создания конкретных объектов-форм был подсмотрен в литературе.

Недостатком такого способа является то, что для назначения конкретному DBGrid обработчика события приходится задавать его программно, например в CreateForm (DBGrid.onTitleClick:= TTitleClickDBGrid.TitleClickSort;).

Вопрос в том, как можно "элегантно" сделать данное объявление метода чтобы его можно было назначить обработчику события прямо из инспектора объектов Delphi (10.2).

Код
...
interface
  type
    TTitleClickDBGrid = class class procedure TitleClickSort(Column: TColumn);
  end;

implementation

  class procedure TTitleClickDBGrid.TitleClickSort(Column: TColumn);
  begin
    //123
  end;
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.06.2019, 09:12
Ответы с готовыми решениями:

Удаление обработчика события для компонента
Как удалить обработчик созданный в программе таким образом: textBox1.Click += new...

Создание объекта-события и обработчика события
Допустим у меня есть следующий класс: public class Example { private boolean bool; public...

Как изменить способ задания свойств в Инспекторе для собственного компонента?
Есть компонент со свойствами типа bool или enum. Как сделать так, чтобы в инспекторе эти свойства...

Назначение обработчика
Занимаюсь по Радченко и Хрусталевой Практическое пособие разработчика. Вот они пишут - любую...

7
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
11.06.2019, 15:56 2
Цитата Сообщение от Dukalys Посмотреть сообщение
Решаю простую задачку удобного назначения обработчика событию TitleClick DBGrid.
Речь идет об одном обработчике или о нескольких?
0
1816 / 1030 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
11.06.2019, 16:30  [ТС] 3
Пока только один обработчик TitleClick для рвзличных dbgrid.
Интересной перспективой конечно является создание нескольких обработчиков, думаю не более 3-5 событий.
0
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
11.06.2019, 16:37 4
Если только один, то можно просто переопределить метод TitleClick:
Delphi
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
type
  TDBGrid = class(Vcl.DBGrids.TDBGrid)
  protected
    procedure TitleClick(Column: TColumn); override;
  end;
 
  TForm1 = class(TForm)
    DBGrid1: TDBGrid;
    DBGrid2: TDBGrid;
    DBGrid3: TDBGrid;
  private
    { Private declarations }
 
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TDBGrid.TitleClick(Column: TColumn);
begin
  ShowMessage(Column.FieldName);
  inherited;
end;
 
end.
1
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,253
12.06.2019, 02:38 5
Мне лично по душе и по естеству процедура
Delphi
1
DoTitleClick(Grid: TDBGrid, Column: TColumn);
0
3586 / 2195 / 693
Регистрация: 29.05.2013
Сообщений: 9,377
12.06.2019, 12:12 6
Но такая процедура не несет информации о том куда кликнули и какой кнопкой мыши, а это ведь нужный функционал.
0
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,253
14.06.2019, 02:40 7
Цитата Сообщение от Пытливый Посмотреть сообщение
Но такая процедура не несет информации о том куда кликнули и какой кнопкой мыши, а это ведь нужный функционал.
Кому нужный? И зачем?
0
8 / 8 / 1
Регистрация: 06.09.2014
Сообщений: 52
27.07.2019, 22:51 8
1) Вы можете в классе рядом с обработчиком по-умолчанию (создайте его, посмотрите где он появился - published секция) написать свои с такой же сигнатурой и, конечно, имплементировать их. Тогда они будут показываться в Object Inspector-e в ниспадающем списке.
2) Есть более гибкий (и более коварный) вариант - rtti - при этом не обязательно иметь обработчик по-умолчанию:
Delphi
1
2
3
4
5
6
7
8
9
var
    Method: TMethod;
    Component: TObject;
begin
    Component := Self.FindComponent('Имя_Вашей_DBGrid');
    Method.Data := Component;
    Method.Code := TForm1.'Имя_Вашего_Обработчика'; 
    SetMethodProp(Component, 'TitleClick', Method);
end;
1
27.07.2019, 22:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.07.2019, 22:51
Помогаю со студенческими работами здесь

Назначение обработчика
Вот нарыл в доке два типа назначения обработчиков на события. Например public event...

Как отловить обработчик события кнопки в инспекторе кода браузера?
Подскажите пожалуйста, есть ли возможность отловить обработчик события нажатия кнопки в инспекторе...

Назначение обработчика клика
Вот такой вопрос терзает меня господа... допустим создал я var...

Назначение обработчика событию
Здравствуйте! В форме есть статическая функция, в которой создаются элементы формы. Этим...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru