Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 12.03.2009, 16:12   #1
ArtInt
Участник клуба
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
Репутация: 199
По умолчанию Как в 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, 18:53   #2
CahekG
Пользователь
 
Регистрация: 25.02.2009
Сообщений: 28
Репутация: 10
По умолчанию

В другой теме по 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 в 18:57.
CahekG вне форума   Ответить с цитированием
Старый 12.03.2009, 20:38   #3
ArtInt
Участник клуба
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
Репутация: 199
По умолчанию

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

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите, пожалуйста, обработать кнопки скобок в калькуляторе 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


19:45.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru