Страница 1 из 1

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

СообщениеДобавлено: 10.06.2019 12:27:23
Lucifer
По некоторой логике хочется действительно странного. При скролле в гриде, когда достигнута первая строка, надо "замораживать" курсор именно на ней. Поскольку у самого грида события скролла недоступны, то сделан хак, который многократно уже описан и приводить его тут смысла нет. Но! Он не работает! То есть, мне в прогу событие, что я что-то там проскроллил, не прилетает. Хотя сам скролл при этом работает нормально. Код на всякий:
Код: Выделить всё
  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

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

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

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

СообщениеДобавлено: 10.06.2019 16:47:30
alexs
Честно говоря - не понял

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

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


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

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


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

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

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

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

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

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

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

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

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


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

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

P.S. Ладно. Нет - так нет. На чем и закроем тему.

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

СообщениеДобавлено: 13.06.2019 23:05:53
olegy123
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);

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

СообщениеДобавлено: 28.04.2024 23:25:21
Sharfik
Алекс, а в RxDBGrid можно как то получить набор записей, которые после фильтрации у пользователя перед глазами?

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

СообщениеДобавлено: 29.04.2024 10:28:45
Alex2013
Прочитав заголовок темы я подумал, что вот сейчас-то кто-то предложит заняться неким коллективным "Великим Мега Проектом" способным прославить этот форум в веках.... :D

Зы
В TScrollBar кроме onChange есть onScroll (это событие более "чувствительное" и в нем есть полезный флаг ScrollCode)
(Коммент отдельная хохма "Совместимость с Delphi - не наше решение" :wink: )
TScrollCode = (
// !!! Beware. The position of these enums must correspond to the SB_xxx
// values in LCLType (Delphi compatibility, not our decision)
// MWE: Don't know if this still is a requirement
// afaik have I removed all casts from the LCL
scLineUp, // = SB_LINEUP
scLineDown, // = SB_LINEDOWN
scPageUp, // = SB_PAGEUP
scPageDown, // = SB_PAGEDOWN
scPosition, // = SB_THUMBPOSITION
scTrack, // = SB_THUMBTRACK
scTop, // = SB_TOP
scBottom, // = SB_BOTTOM
scEndScroll // = SB_ENDSCROLL
);

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

СообщениеДобавлено: 30.04.2024 03:34:08
Sharfik
тема 19го года.... можно было последний пост хоть прочитать?)))

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

СообщениеДобавлено: 30.04.2024 12:11:36
Alex2013
Sharfik писал(а):тема 19го года.... можно было последний пост хоть прочитать?)))

Сори! Увы, моя невнимательность опять меня подвела... :oops:
Зы
Тоже "не в тему" но возможно будет полезно
http://www.freepascal.ru/forum/viewtopi ... =18&t=7652
Дока
https://rxlib.ru/rx/rxDBAware/RxDBGrid/index.htm
Статья по DBGrid (тоже несколько не то но вникать лениво) ...
https://delphi-help.ru/index.php?option ... &Itemid=55

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

СообщениеДобавлено: 01.05.2024 00:20:03
alexs
Sharfik писал(а):Алекс, а в RxDBGrid можно как то получить набор записей, которые после фильтрации у пользователя перед глазами?

Так он и будет отфильтрован в наборе данных
простой цикл перебора
Код: Выделить всё
DS.First
while not DS.EOF do
begin
///
  DS.Next;
end

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

СообщениеДобавлено: 06.05.2024 16:00:07
Sharfik
Ок, попробую. Спасибо.