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

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

Добавлено: 10.06.2019 11: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 13:30:54
Alex2013
Первая мысль: вызов inherited WMVScroll(Msg); "съел" событие (попробуй поставить после своего кода ), а ShowMessage вызывается далеко не из любого места в коде. (и вообще это "плохая практика")

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

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

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

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


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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

Добавлено: 13.06.2019 22:13:55
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 22:25:21
Sharfik
Алекс, а в RxDBGrid можно как то получить набор записей, которые после фильтрации у пользователя перед глазами?

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

Добавлено: 29.04.2024 09: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 02:34:08
Sharfik
тема 19го года.... можно было последний пост хоть прочитать?)))

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

Добавлено: 30.04.2024 11: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. Хочется странного

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

Код: Выделить всё

DS.First
while not DS.EOF do
begin
 ///
  DS.Next;
end

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

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