Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2016, 14:45   #1
Glob
Пользователь
 
Регистрация: 11.11.2010
Сообщений: 25
По умолчанию Колесико мыши в TDBGrid

Пытаюсь сделать так что бы при изменении активной записи в TDBGrid данные передавались в TEdit

тут все отрабатывает нормально:
Код:
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
  edit2.text := ADOQuery1.FieldByName('tonn').AsString;
end;
пытаюсь реализовать управление колесиком мыши - там тоже отрабатывает, но в edit2 передается значение предыдущей записи:
Код:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
if dbGrid1.Focused then
begin
  if Msg.Message = WM_MOUSEWHEEL then
    begin
      Msg.Message := WM_KEYDOWN;
      Msg.lParam := 0;
      if Msg.wParam > 0 then
        begin
          Msg.wParam := VK_UP;
          edit2.text := ADOQuery1.FieldByName('tonn').AsString;
        end
      else
        begin
          Msg.wParam := VK_DOWN;
          edit2.text := ADOQuery1.FieldByName('tonn').AsString;
        end;
      Handled := False;
    end;
end;
end;
что я упустил?
Glob вне форума Ответить с цитированием
Старый 17.03.2016, 15:23   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Для чтения текущей записи необходимо не на события грида подписываться, а на событие OnAfterScroll датасета, который этот грид показывает, однако, надо контролировать это дело и при необходимости отписываться (в коде присваивать nil в событие), чтобы не было ошибок.
При этом не надо делать кучу обработчиков на всякие клики, скролы, стрелки клавы и т.п. , поскольку это событие перехватывет именно изменение текущей записи самого датасета.

Последний раз редактировалось phomm; 17.03.2016 в 15:25.
phomm вне форума Ответить с цитированием
Старый 17.03.2016, 15:30   #3
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

phomm при скроле по DBGrid активная запись разве меняется в DataSet?
Grid активный колесиком мышки елозят бегает синие окошечко по записям но активная не меняется, разве не так?
Терпение!Дежурный экстрасенс скоро свяжется с вами!

Последний раз редактировалось Dvoishnik; 17.03.2016 в 15:32. Причина: уточнил
Dvoishnik вне форума Ответить с цитированием
Старый 17.03.2016, 15:52   #4
Glob
Пользователь
 
Регистрация: 11.11.2010
Сообщений: 25
По умолчанию

Цитата:
Сообщение от Dvoishnik Посмотреть сообщение
phomm при скроле по DBGrid активная запись разве меняется в DataSet?
Grid активный колесиком мышки елозят бегает синие окошечко по записям но активная не меняется, разве не так?
меняется, но вот гадство с отставанием на предыдущую.
если после этого сразу нажать на button с кодом
Код:
edit2.text := ADOQuery1.FieldByName('tonn').AsString;
но Edit заполняется нормально, а при скролле отстает
Glob вне форума Ответить с цитированием
Старый 17.03.2016, 21:08   #5
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,777
По умолчанию

Цитата:
Сообщение от Glob Посмотреть сообщение
а при скролле отстает
Какая версия Delphi? Похоже на баг VCL. В старых версиях (5-7) были баги с колесиком, если не изменяет память.
Vapaamies вне форума Ответить с цитированием
Старый 17.03.2016, 21:55   #6
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
Сообщение от Vapaamies Посмотреть сообщение
Какая версия Delphi? Похоже на баг VCL. В старых версиях (5-7) были баги с колесиком, если не изменяет память.
Никакого бага там не было и нет. Просто переход на другую запись в датасете не может быть обработан во время обработки служебного сообщения, которое и призвано вызвать этот переход...
Поэтому и инфа берется из предыдущей записи...
Цитата:
Сообщение от Glob Посмотреть сообщение
меняется, но вот гадство с отставанием на предыдущую.
... при скролле отстает
И "гадства" никакого тут тоже нет.
Вам уже намекали, что строку
Код:
edit2.text := ADOQuery1.FieldByName('tonn').AsString;
надо убрать из обработчика
procedure TForm1.ApplicationEvents1Message()
и вставить в обработчик
procedure TForm1.ADOQuery1AfterScroll()...
И потом радоваться отсутствию отставания...

Последний раз редактировалось kropotkina-alice; 17.03.2016 в 22:02.
kropotkina-alice вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Включить колесико мышки в редакторе VBA agregator Microsoft Office Excel 2 29.08.2011 19:24
Колесико мыши IvanE_S Общие вопросы Delphi 8 14.12.2010 18:16
DBGrid и колесико мыши(скроллинг) M@riy@ Общие вопросы Delphi 3 30.10.2010 23:47
Можно ли макросом, отключить колесико мышки valerij Microsoft Office Excel 8 18.11.2008 16:52