RxDBGrid. Хочется странного

Модераторы: alexs, Модераторы

RxDBGrid. Хочется странного

Сообщение Lucifer » 10.06.2019 12:27:23

По некоторой логике хочется действительно странного. При скролле в гриде, когда достигнута первая строка, надо "замораживать" курсор именно на ней. Поскольку у самого грида события скролла недоступны, то сделан хак, который многократно уже описан и приводить его тут смысла нет. Но! Он не работает! То есть, мне в прогу событие, что я что-то там проскроллил, не прилетает. Хотя сам скролл при этом работает нормально. Код на всякий:
Код: Выделить всё
  TDBGridFreind = class (TRxDBGrid)
    procedure WMVScroll(var Msg: TLMVScroll); message LM_VSCROLL;
  end;

...

procedure TDBGridFreind.WMVScroll(var Msg: TLMVScroll);
var
  OldRow: Integer;
begin
  inherited WMVScroll(Msg);
  ShowMessage(IntToStr(Msg.ScrollCode));
  case Msg.ScrollCode of
    SB_PAGEUP, SB_TOP:
    begin
      OldRow := TDBGridFreind(Form1.dgMemBig).Row;
      if OldRow = 1 then
      begin
        Form1.fGotoFirst := True;
        Form1.fCellClick := False;
      end;
    end;
  end;
end;



P.S. CodeTyphon 5.7, FPC 3.1.1, Rev. SVN 51797
Lucifer
постоялец
 
Сообщения: 109
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск

Re: RxDBGrid. Хочется странного

Сообщение Alex2013 » 10.06.2019 14:30:54

Первая мысль: вызов inherited WMVScroll(Msg); "съел" событие (попробуй поставить после своего кода ), а ShowMessage вызывается далеко не из любого места в коде. (и вообще это "плохая практика")
Alex2013
долгожитель
 
Сообщения: 2922
Зарегистрирован: 03.04.2013 11:59:44

Re: RxDBGrid. Хочется странного

Сообщение alexs » 10.06.2019 16:47:30

Честно говоря - не понял
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: RxDBGrid. Хочется странного

Сообщение Lucifer » 11.06.2019 11:34:32

Alex2013 писал(а):Первая мысль: вызов inherited WMVScroll(Msg); "съел" событие (попробуй поставить после своего кода ), а ShowMessage вызывается далеко не из любого места в коде. (и вообще это "плохая практика")


Да я его всяко пихал. Не срабатывает. А ShowMessage - это просто попытка выловить тот самый месседж. Да хоть какой-то месседж.

Добавлено спустя 4 минуты 36 секунд:
alexs писал(а):Честно говоря - не понял


Да я тоже с трудом понимаю. :-) Ситуация такая, что надо отлавливать именно клики по скроллеру грида. Долистали до самой верхней видимой строки - заморозили курсор именно в ней. Чтоб всегда была выделена именно первая строка. Для чего: есть список заказов (таксишная прога). Курсор всегда следует за выделенной строкой в зависимости от статуса заказа. То есть, выделен всегда один и тот же заказ. А логику надо поменять так, что если оператор долистает до верха грида (не набора данных! Там может быть совсем иной порядок данных), то всегда будет выделена именно первая строка независимо ни от чего. До тех пор, пока оператор или не уйдет с нее, или не кликнет мышой в гриде. Для кнопок курсора и PgUP я сделал, и оно работает. А вот отловить события скроллера не получается.
Lucifer
постоялец
 
Сообщения: 109
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск

Re: RxDBGrid. Хочется странного

Сообщение zoltanleo » 13.06.2019 00:54:58

Lucifer писал(а): если оператор долистает до верха грида (не набора данных! Там может быть совсем иной порядок данных)

ты уверен, что не путаешь понятия набора данных и таблицы БД? Как гласят каноны, грид данных не содержит, но прямо отображает их из подключенного набора данных. Т.о., первая строка грида - это первая запись набора данных.

А события скроллинга легко отлавливать в OnMouseWheel грида, анализируя параметр WheelDelta.
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 457
Зарегистрирован: 17.10.2013 10:55:01

Re: RxDBGrid. Хочется странного

Сообщение Lucifer » 13.06.2019 16:13:41

zoltanleo писал(а):
Lucifer писал(а): если оператор долистает до верха грида (не набора данных! Там может быть совсем иной порядок данных)

ты уверен, что не путаешь понятия набора данных и таблицы БД? Как гласят каноны, грид данных не содержит, но прямо отображает их из подключенного набора данных. Т.о., первая строка грида - это первая запись набора данных.

А события скроллинга легко отлавливать в OnMouseWheel грида, анализируя параметр WheelDelta.


В данном случае не путаю. Потому что нужно событие OnScroll именно. На датасете это не сделать ни разу. Или я просто тупой и не смог. Потому что датасет периодически рефрешится, следовательно у него событие AfterScroll возникает при каждом обновлении. Мне же это не нужно.

OnMouseWheel Я и так обработал. Там как раз все просто и понятно. А вот клик по скроллу - хрен.

P.S. Ладно. Нет - так нет. На чем и закроем тему.
Lucifer
постоялец
 
Сообщения: 109
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск

Re: RxDBGrid. Хочется странного

Сообщение olegy123 » 13.06.2019 23:05:53

DataSet.RecNo - не подойдет?

OnScroll может не выполнятся если DataSet.DisableControls / DataSet.EnableControls

Добавлено спустя 8 минут 2 секунды:
Lucifer писал(а):Потому что датасет периодически рефрешится, следовательно у него событие AfterScroll возникает при каждом обновлении. Мне же это не нужно.
вообще то нужно смотреть на статусы DataSet.State => TDataSetState = (dsInactive, dsBrowse, dsEdit, dsInsert, dsSetKey,
dsCalcFields, dsFilter, dsNewValue, dsOldValue, dsCurValue, dsBlockRead,
dsInternalCalc, dsOpening, dsRefreshFields);
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20


Вернуться в RxLib

Кто сейчас на конференции

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

Рейтинг@Mail.ru