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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2008, 09:49   #1
фЁдОр
Форумчанин
 
Аватар для фЁдОр
 
Регистрация: 06.09.2007
Сообщений: 908
По умолчанию Научите, пожалуйста, работать с колесом мыши и DBGrid'ом.

Здравствуйте, уважаемые программисты!

Я прекрасно могу понят недовольство некоторых людей, но я не могу разобраться с этой проблемой.
Конечно я пользовался поиском по форуму, но направляют либо на EnLib или на Faq Михалыха. EnLib-ом принципиально не хочется пользоваться, т.к. хочу разобраться именно в дбгриде, а справочник Михалыча я сразуже скачал, но не могу понять приведенный код.
Я и гуглить пробовал, но опять же появляются аналогичные вопросы на форумах, хотя и приводят варианты программных кодов, но никаких пояснений нет. А правда хочется самому разобраться. У себя в книгах ничего не нашел, хотя признаюсь, не все перекопал. Ну сами понимаете, где я еще могу спросить, как не у любимого форума . Прошу, если у кого есть время, разъясните мне, пожалуйста, как работать с колесом мыши и дбгридом или отправьте меня на источник, где я смогу понять и закрыть этот пробел в своей голове.

Последний раз редактировалось фЁдОр; 28.02.2008 в 09:51.
фЁдОр вне форума Ответить с цитированием
Старый 28.02.2008, 10:10   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
но не могу понять приведенный код
Ну так что не понятно? Напиши Михалычу в личку или выкладывай вопросы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.02.2008, 11:45   #3
фЁдОр
Форумчанин
 
Аватар для фЁдОр
 
Регистрация: 06.09.2007
Сообщений: 908
По умолчанию

Ну вот для начала:
Код:
procedure tmydbgrid.wmmousewheel(var message: twmmousewheel);
begin
if datasource.dataset.active then begin
if message.wheeldelta > 10 then datasource.dataset.prior;
if message.wheeldelta < -10 then datasource.dataset.next;
end;
end;
Что это за процедура, разве есть событие wmmousewheel у грида?
И объясните, пожалуйста, что эта процедура выполняет...
фЁдОр вне форума Ответить с цитированием
Старый 28.02.2008, 12:37   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Тут все правильно как никогда: wmmousewheel - это перехватчик события WM_MOUSEWHEEL для tmydbgrid
Заглянув сюда можно посмотреть как прикрутить к DBGrid свой обработчик: http://programmersforum.ru/showthrea...ghlight=dbgrid

Ну а это пример его реализации, мол при накрутке колесика, сработает эта процедурка, где есть проверка открыт ли набор, и если да то в зависимости от направления вращения роллера возьмется либо следующая запись (dataset.next; ) либо предидущая.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.02.2008, 12:55   #5
фЁдОр
Форумчанин
 
Аватар для фЁдОр
 
Регистрация: 06.09.2007
Сообщений: 908
По умолчанию

значит понимается мне вот этой процедурой:
Код:
procedure tmydbgrid.wmmousewheel(var message: twmmousewheel);   
begin  
if datasource.dataset.active then begin  
if message.wheeldelta > 10 then datasource.dataset.prior;   
if message.wheeldelta < -10 then datasource.dataset.next;   
end;   
end;
вызывается выше описанная процедура

Код:
tmydbgrid = class(tdbgrid)
procedure wmmousewheel(var message: twmmousewheel); message wm_mousewheel;
Пока верно мыслю?
И опять же, что происходит вот сдесь:
Код:
if message.wheeldelta > 10 then datasource.dataset.prior;   
if message.wheeldelta < -10 then datasource.dataset.next;

Последний раз редактировалось фЁдОр; 28.02.2008 в 12:58.
фЁдОр вне форума Ответить с цитированием
Старый 28.02.2008, 13:01   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Пока верно мыслю?
Верно, коллега , только чтоб ты не сильно напрягался еще раз внимательно посмотри: Я в том смысле что я там не создал новый класс а переопределил уже имеющийся ДБГрид, чтоб не особо морочится с создаваниями, ибо переопределения распространятся на те ДБГриды которые я уже кинул на форму (это потому что я лентяй )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.02.2008, 13:13   #7
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
Восклицание

Сделай так! Все работает!
Код:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
if Grid1.Focused then
  if Msg.Message = WM_MOUSEWHEEL then
    begin
      Msg.Message := WM_KEYDOWN;
      Msg.lParam := 0;
      if Msg.wParam > 0 then
        Msg.wParam := VK_UP
      else
        Msg.wParam := VK_DOWN;
      Handled := False;
    end;
end;
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...

Последний раз редактировалось Yurk@; 28.02.2008 в 16:02.
Yurk@ вне форума Ответить с цитированием
Старый 28.02.2008, 14:42   #8
фЁдОр
Форумчанин
 
Аватар для фЁдОр
 
Регистрация: 06.09.2007
Сообщений: 908
По умолчанию

Stilet - пытаюсь, пытаюсь разобраться...
Yurk@ - спасибо, конечно, за код, но я хочу понять как это все работает... Ссылка "Источик!" не работает - проверьте, пожалуйста.
фЁдОр вне форума Ответить с цитированием
Старый 28.02.2008, 16:06   #9
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

Если вкратце:
ApplicationEvents1 ловит событие прокрутки колесика от мышки в том случае, если Grid1 находится под фокусом.
Далее по значению параметра определяется направление проктутки!

ЗЫ: По данной ссылке, на даный момент, проблемы с сервером. Админ пытается решить эту проблему.
У меня она работает через прокси-сервер.
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 29.02.2008, 12:08   #10
фЁдОр
Форумчанин
 
Аватар для фЁдОр
 
Регистрация: 06.09.2007
Сообщений: 908
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
... я там не создал новый класс а переопределил уже имеющийся ДБГрид, ... переопределения распространятся на те ДБГриды которые я уже кинул на форму...
насколько я понял речь идет об этих строчках:
type
TDBGrid = class(DBGrids.TDBGrid);
...
end;
TForm1=class(TForm);
DBGrid1:TDBGrid;
...
Эта часть мне понятна, но, что вот здесь происходит:
procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
я не понимаю, если не затруднит, объясните, пожалуйста.

Yurk@ - ради эксперемента, я вставил Ваш код, запустил программу, но изменеия равны нулю, т.е. ничего не произошло.
фЁдОр вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Научите меня читать API Humus Общие вопросы по Java, Java SE, Kotlin 0 12.02.2008 00:58
Как работать с правой кнопкой мыши? ZeRRon Помощь студентам 4 28.12.2007 18:45
Помогите с DBGrid'ом Stokton БД в Delphi 1 01.12.2007 20:41
научите компилировать в borland для с DOS Помощь студентам 23 28.10.2007 14:29