Components for Delphi and C++ Builder.

Перейти в английский форум
Перейти на EhLib.com
Текущее время: 29 мар 2024, 09:18

Часовой пояс: UTC




Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
СообщениеДобавлено: 19 авг 2016, 10:23 
Не в сети

Зарегистрирован: 25 авг 2014, 12:17
Сообщений: 69
Подскажите, пожалуйста, как отловить нажатие на кнопку фильтра (и отмену его) или ENTER?
Это необходимо для того, чтобы показывать чекбоксы в столбце индикатора (см. скриншот, прямоугольное выделение красным), т.е. включать опцию gioShowRowselCheckboxesEh при активации фильтра (по нажатию кнопки ENTER или нажатию кнопки со значком воронки) и выключать ее при отмене фильтрации (ESC или кнопка 'x', см. скриншот). Какое событие нужно использовать?


Вложения:
filter.png
filter.png [ 42.31 KiB | Просмотров: 2168 ]
Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 19 авг 2016, 12:04 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1546
Добрый день.

Можно использовать событие TDataSource.OnDataChange следующим образом

Код:
procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
begin
  if @ADOTable1.OnFilterRecord <> nil then
  begin
    DBGridEh1.IndicatorOptions := DBGridEh1.IndicatorOptions + [gioShowRowselCheckboxesEh];
  end else
  begin
    DBGridEh1.IndicatorOptions := DBGridEh1.IndicatorOptions - [gioShowRowselCheckboxesEh];
  end;
end;

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 19 авг 2016, 12:20 
Не в сети

Зарегистрирован: 25 авг 2014, 12:17
Сообщений: 69
EhLibSupport писал(а):
Можно использовать событие TDataSource.OnDataChange следующим образом

Спасибо, работает!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 25 янв 2019, 05:38 
Не в сети

Зарегистрирован: 25 авг 2014, 12:17
Сообщений: 69
Как выяснилось в процессе нечастого использования вышеприведенного кода, он вызывает непредсказуемые AV - возникают не в 100% случаев, закономерность не выявлена. В связи с чем, вопрос: не появилось ли с момента написания вопроса встроенного в грид события отловить нажатие на кнопку фильтра или ENTER?
Или подскажите другие варианты, без использования TDataSource.OnDataChange, пожалуйста!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 25 янв 2019, 07:45 
Не в сети

Зарегистрирован: 15 авг 2018, 07:39
Сообщений: 106
Так же сталкивался с подобной необходимостью. Пришлось модифицировать исходники, добавив обработку своих событий в TCustomDBGridEh.SetSearchFilter и TCustomDBGridEh.ClearSearchFilter, что-то вроде OnSearchFilterDone и OnSearchFilterCancel.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 25 янв 2019, 10:11 
Не в сети

Зарегистрирован: 25 авг 2014, 12:17
Сообщений: 69
OlegX писал(а):
Так же сталкивался с подобной необходимостью. Пришлось модифицировать исходники, добавив обработку своих событий в TCustomDBGridEh.SetSearchFilter и TCustomDBGridEh.ClearSearchFilter, что-то вроде OnSearchFilterDone и OnSearchFilterCancel.

Может Вы поделитесь модифицированными исходниками с разработчикм? С целью добавления желаемой функциональности в DBGridEh "из коробки".


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 28 янв 2019, 05:57 
Не в сети

Зарегистрирован: 25 авг 2014, 12:17
Сообщений: 69
Ответ от саппорта будет?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 28 янв 2019, 20:53 
Не в сети

Зарегистрирован: 11 сен 2018, 15:36
Сообщений: 11
Меня тоже поражает, что для SearchPanel'и не сделано никаких обработчиков. У меня задача немного друга - показ сенсорной клавиатуры при входе в поле фильтра.
Пришлось немного поизвращаться, но в итоге всё работает.

Уважаемые разработчики, добавьте, пожалуйста, хотя бы несколько событий для SearchPanel'и: OnExit, OnEnter, OnClick. А то сейчас ведь ничего нет!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 05 фев 2019, 06:46 
Не в сети

Зарегистрирован: 25 авг 2014, 12:17
Сообщений: 69
Все еще жду ответа разработчика. Если что, лицензированный юзер.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 06 фев 2019, 00:13 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1546
Добрый день.

В стандартном TCustomDBGridEh поменяйте определение

Код:
  TCustomDBGridEh = class(TCustomDBAxisGridEh, IMTEventReceiverEh)
...
    procedure SetSearchFilter(const FilterStr: String); virtual; //add virtual
....
    procedure ClearSearchFilter; virtual; virtual; //add virtual


В модуле формы допишите код:

Код:
...
type
  TCustomDBGridEh = class(TDBGridEh)
    procedure SetSearchFilter(const FilterStr: String); override;
    procedure ClearSearchFilter; override;
  end;

  TDBGridEh = class(TCustomDBGridEh);

type
  TForm1 = class(TForm)
....
    DBGridEh1: TDBGridEh;
  end;

implementation
....

{ TCustomDBGridEh }

procedure TCustomDBGridEh.ClearSearchFilter;
begin
  inherited ClearSearchFilter;
  IndicatorOptions := IndicatorOptions - [gioShowRowselCheckboxesEh];
end;

procedure TCustomDBGridEh.SetSearchFilter(const FilterStr: String);
begin
  inherited SetSearchFilter(FilterStr);
  IndicatorOptions := IndicatorOptions + [gioShowRowselCheckboxesEh];
end;


Проверьте работу.

В следующей сборке мы добавим определение virtual для SetSearchFilter и ClearSearchFilter и
появится возможность использовать данный код без изменения исходников библиотеки.

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 06 фев 2019, 07:25 
Не в сети

Зарегистрирован: 25 авг 2014, 12:17
Сообщений: 69
Работает, спасибо. Очень ждем новый билд с virtual для SetSearchFilter и ClearSearchFilter!


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Часовой пояс: UTC


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB