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
постоялец
 
Сообщения: 121
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск

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

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

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

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

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

Честно говоря - не понял
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 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
постоялец
 
Сообщения: 121
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск

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

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

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

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

А события скроллинга легко отлавливать в OnMouseWheel грида, анализируя параметр WheelDelta.
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 458
Зарегистрирован: 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
постоялец
 
Сообщения: 121
Зарегистрирован: 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

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

Сообщение Sharfik » 28.04.2024 23:25:21

Алекс, а в RxDBGrid можно как то получить набор записей, которые после фильтрации у пользователя перед глазами?
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 791
Зарегистрирован: 20.07.2013 01:04:30

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

Сообщение Alex2013 » 29.04.2024 10:28:45

Прочитав заголовок темы я подумал, что вот сейчас-то кто-то предложит заняться неким коллективным "Великим Мега Проектом" способным прославить этот форум в веках.... :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
);
Alex2013
долгожитель
 
Сообщения: 3048
Зарегистрирован: 03.04.2013 11:59:44

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

Сообщение Sharfik » 30.04.2024 03:34:08

тема 19го года.... можно было последний пост хоть прочитать?)))
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 791
Зарегистрирован: 20.07.2013 01:04:30

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

Сообщение Alex2013 » 30.04.2024 12:11:36

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
Alex2013
долгожитель
 
Сообщения: 3048
Зарегистрирован: 03.04.2013 11:59:44

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

Сообщение alexs » 01.05.2024 00:20:03

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

Так он и будет отфильтрован в наборе данных
простой цикл перебора
Код: Выделить всё
DS.First
while not DS.EOF do
begin
///
  DS.Next;
end
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

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

Сообщение Sharfik » 06.05.2024 16:00:07

Ок, попробую. Спасибо.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 791
Зарегистрирован: 20.07.2013 01:04:30


Вернуться в RxLib

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

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

Рейтинг@Mail.ru