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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.03.2009, 15:12   #1
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию Как в DBGrid обработать сообщение на кнопки прокрутки

Обрабатываю сообщения на прокутку, когда сетка в фокусе и когда происходит скроллинг (нажатии клавиш вверх и вниз) вызываю в коде заранее созданную процедуру для вывода всей информации в Richedit.
Вопрос в том, как сделать чтобы при клике на кнопки прокрутки в сетки, происходил такой же вызов созданных процедур для вывода.
Сейчас код примерно такой:

Код:
procedure AppMessage(var Msg: TMsg; var Handled: Boolean);

procedure TForm1.AppMessage(var Msg: TMsg; var Handled: Boolean);
 var
   i: SmallInt;
 begin

   if Msg.message = WM_MOUSEWHEEL then
   begin
     Msg.message := WM_KEYDOWN;
     Msg.lParam := 0;
     i := HiWord(Msg.wParam);
     if i > 0 then
     begin
       Msg.wParam := VK_UP;
       if cyDBGrid1.Focused then
       begin
  {процедура для вывода в Richedit и такое прочее}
       end;
     end
     else
     begin
       Msg.wParam := VK_DOWN;
       if cyDBGrid1.Focused then
       begin
  {процедура для вывода в Richedit и такое прочее}
       end;
     end;
     Handled := False;
   end;
 end;{AppMessage}
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 12.03.2009, 17:53   #2
CahekG
Пользователь
 
Регистрация: 25.02.2009
Сообщений: 28
По умолчанию

В другой теме по DbGrid как раз был вопрос касаемо колесика мыши.
http://programmersforum.ru/showthrea...390#post219390
Я там выложил свой dbgrid c отработкой OnMouseWheelUp/Down.
А что за кнопака прокрутки сетки? ScrollBar или еще какаято?

А так, добавить примерно такую реакцию, на эти события.
И из других визуальных компонент можно OnMousewheel на эти же процедуры назначить.
Код:
procedure TForm1.DBGridMy1MouseWheelDown(Sender: TObject;
  Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
  if DataSource1.DataSet.Active then
   if DataSource1.DataSet.RecNo < DataSource1.DataSet.RecordCount then DataSource1.DataSet.MoveBy(1);
   Handled:=true;// иначе будет вызываться неоднократно
                    //(например 3 раза как указано в настройках мыши 
  {процедура для вывода в Richedit и такое прочее}

end;

procedure TForm1.DBGridMy1MouseWheelUp(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
  if DataSource1.DataSet.Active then
     if DataSource1.DataSet.RecNo > 0 then DataSource1.DataSet.MoveBy(-1);
   Handled:=true;// иначе будет вызываться неоднократно
                    //(например 3 раза как указано в настройках мыши 
  {процедура для вывода в Richedit и такое прочее}

end;

Последний раз редактировалось CahekG; 12.03.2009 в 17:57.
CahekG вне форума Ответить с цитированием
Старый 12.03.2009, 19:38   #3
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Для того, чтобы было понятнее что имелось в виду выкладываю часть скриншота программы, где стрелками показано, какую кнопку на DBGrid имел в виду.
Как говорилось ранее код со скроллингом работает, но как обработать нажатие на данную кнопку чтобы информация (когда поля перемещаются)
отображалась Информации о файле.
Вложения
Тип файла: rar часть скриншота проги.rar (91.3 Кб, 32 просмотров)
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 12.03.2009, 20:39   #4
CahekG
Пользователь
 
Регистрация: 25.02.2009
Сообщений: 28
По умолчанию

Извиняюсь, невнимательно прочитал.
При нажатии мышью на кнопки Scroll эта процедура не вызывается или я ошибаюсь?
Обычно клик мыши по ScrollBar отрабатывается в классе предка для перемещения по БД не вызывая события OnMouseDown и тогда проще может быть добавить еще прорисовку RichEdit в процедуре реакции на событие AfterScroll объекта таблицы данных. Он вызывается при изменении текущей записи в БД.

Последний раз редактировалось CahekG; 12.03.2009 в 20:43.
CahekG вне форума Ответить с цитированием
Старый 12.03.2009, 21:09   #5
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Да действительно, событие AfterScroll действительно работает и наверное является самым правильным решением для данной задачи.
Но просто ради интереса, если кто знает, вдруг в будущем пригодится, проверка вызова события на кнопки Scroll как проверяются.
А так в целом тему можно считать закрытой и большое спасибо всем кто ответил, в особенности CahekG
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите, пожалуйста, обработать кнопки скобок в калькуляторе Taisja Помощь студентам 2 04.10.2008 12:42
Как обработать ошибку XAOC-forever Работа с сетью в Delphi 11 24.09.2008 20:13
Как обработать двойной щелчок в определенной ячейке DBGrid? Dux БД в Delphi 11 10.08.2008 03:34
Как обработать исключение? XPAiN БД в Delphi 9 16.05.2008 15:09