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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2016, 10:27   #1
delphi-explorer
 
Регистрация: 14.12.2016
Сообщений: 4
По умолчанию скролл в DBCtrlGrid

Всем добрый день! Подскажите как включить прокрутку мышью в DBCtrlGrid. У этого компонента нет события OnMouseWheel, следовательно как то надо это описать. Может кто уже делал подобное?
delphi-explorer вне форума Ответить с цитированием
Старый 14.12.2016, 10:58   #2
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
По умолчанию

Цитата:
Сообщение от delphi-explorer Посмотреть сообщение
события OnMouseWheel,
проверьте так:

Цитата:
unit BS_Label;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TBS_Label = class(TLabel)
private
{ Private declarations }
FOnMouseLeave: TNotifyEvent;
FOnMouseEnter: TNotifyEvent;
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER; // заменить на OnMouseWheel
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; // заменить на OnMouseWheel
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Custom', [TBS_Label]);
end;

{ TBS_Label }

procedure TBS_Label.CMMouseEnter(var Message: TMessage);
begin
if Assigned(FOnMouseEnter) then
FOnMouseEnter(Self);
end;

procedure TBS_Label.CMMouseLeave(var Message: TMessage);
begin
if Assigned(FOnMouseLeave) then
FOnMouseLeave(Self);
end;
end.
beegl вне форума Ответить с цитированием
Старый 14.12.2016, 13:50   #3
delphi-explorer
 
Регистрация: 14.12.2016
Сообщений: 4
По умолчанию

Извиняюсь.. Я может что не понимаю, но CM_MOUSEENTER и CM_MOUSELEAVE это сообщения. Как мне их заменить на OnMouseWheel?
delphi-explorer вне форума Ответить с цитированием
Старый 14.12.2016, 14:14   #4
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
По умолчанию

Цитата:
Сообщение от delphi-explorer Посмотреть сообщение
их заменить на OnMouseWheel
Код:
  private
    { Private declarations }
   FOnMouseWHEEL: TNotifyEvent;
   procedure CMMOUSEWHEEL(var Message: TMessage); message CM_MOUSEWHEEL; // OnMouseWheel
Код:
procedure DBCtrlGrid.CMMOUSEWHEEL(var Message: TMessage);
begin
if Assigned(FOnMouseWHEEL) then
FOnMouseWHEEL(Self);
end;
или программно:

Код:
PostMessage(DBGrid1.Handle, WM_HSCROLL, Word(1), LongInt(0)) ;

PostMessage(DBGrid1.Handle, WM_VSCROLL, Word(1), LongInt(0)) ;

Последний раз редактировалось beegl; 14.12.2016 в 14:23. Причина: add code
beegl вне форума Ответить с цитированием
Старый 14.12.2016, 14:16   #5
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Сделайте проще...
Ловите OnMouseWheel у вашей формы, проверяйте, в фокусе ли ваш DBCtrlGrid, и если да, то соответственно для вашего DBCtrlGrid.DataSource.DataSet делайте Next или Prior...
kropotkina-alice вне форума Ответить с цитированием
Старый 14.12.2016, 15:01   #6
delphi-explorer
 
Регистрация: 14.12.2016
Сообщений: 4
По умолчанию

Цитата:
Сообщение от beegl Посмотреть сообщение
procedure CMMOUSEWHEEL(var Message: TMessage); message CM_MOUSEWHEEL; // OnMouseWheel
Спасибо. Я торможу). существует ведь сообщение CM_MOUSEWHEEL
delphi-explorer вне форума Ответить с цитированием
Старый 14.12.2016, 15:03   #7
delphi-explorer
 
Регистрация: 14.12.2016
Сообщений: 4
По умолчанию

Цитата:
Сообщение от kropotkina-alice Посмотреть сообщение
Сделайте проще...
Ловите OnMouseWheel у вашей формы, проверяйте, в фокусе ли ваш DBCtrlGrid, и если да, то соответственно для вашего DBCtrlGrid.DataSource.DataSet делайте Next или Prior...

Но ведь как я понимаю, при таком способе необходимо чтобы компонент был в фокусе. Просто перемещения указателя на DBCtrlGrid не хватит для задействования прокрутки колесиком? Нужно еще и кликнуть мышью?

//Все. Понял. Хотел удалить это сообщение но не нашел кнопки. Наверно запрещено (или по крайней мере для новичков)
Про фокус погорячился). Не логично будет при наведении активировать прокрутку. Сейчас подумаю как ваш способ тоже реализовать.

Последний раз редактировалось delphi-explorer; 14.12.2016 в 15:10.
delphi-explorer вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод изображений в DBCtrlGrid ramsesjol БД в Delphi 5 02.06.2013 16:48
Скролл Аллен HTML и CSS 1 05.12.2012 01:46
Скролл мышью CrazyManR Общие вопросы Delphi 9 11.11.2012 14:14
раскраска DBCtrlGrid Lui C++ Builder 0 31.08.2012 02:41
Скролл в Word viter.alex Microsoft Office Word 3 27.01.2009 23:41