Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Прокрутка грида колесиком мыши [D5]


sapsi ©   (2004-10-27 10:06:00) 

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

Делаю так:
if  Msg.message = WM_mousewheel
then
if dbgrid.focused then
dbgrid.perform(WM_vSCROLL, SB_LINEDOWN, 0)

Это вызывает сразу прокуртку грида на 1 строку вверх, независимо от того, на какой записи в гриде фокус.

Как это можно сделать и как распознать вращение колесика мыши в разные стороны.
Спасибо.


sapsi   (2004-10-27 15:51:00) [1]

2 Symb я уже сделал, все работает


Symb   (2004-10-27 15:22:00) [2]

Сорри, у меня D7. Надо посмотреть, как Borland эти события генерит.


sapsi   (2004-10-27 15:10:00) [3]

"У грида есть события OnMouseWheelUp и OnMouseWheelDown, которые возникают при прокрутке колесом вверх и вниз соответственно."

Таких событий у дбгрида в Делфи 5 нет


Symb   (2004-10-27 15:07:00) [4]

У грида есть события OnMouseWheelUp и OnMouseWheelDown, которые возникают при прокрутке колесом вверх и вниз соответственно.


sapsi   (2004-10-27 14:06:00) [5]

Спасибо, все получилось с
  Msg.message := WM_KEYDOWN;
  Msg.lParam := 0;
  i := HiWord(Msg.wParam);
  if i > 0 then
    Msg.wParam := VK_UP
  else
    Msg.wParam := VK_DOWN;
  Handled := False;

Только i у меня всегда больше 0


sapsi   (2004-10-27 13:55:00) [6]

Спасибо, только крутит всегда вверх, несмотря на направление вращения колеса.


Жук   (2004-10-27 13:49:00) [7]

unit UPrinc;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, DB, IBCustomDataSet, IBDatabase, DBGrids, Grids, ExtCtrls;

type
 TFPrinc = class(TForm)
   DB: TIBDatabase;
   Tra: TIBTransaction;
   DSTest: TDataSource;
   Test: TIBDataSet;
   procedure FormActivate(Sender: TObject);
   procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
 private
   {a:Boolean;}
 public
   { Public declarations }
 end;

type
 TMyDBGrid = class(TDBGrid)
   procedure WMMouseWheel(var Msg: TWMMouseWheel); message WM_MOUSEWHEEL;
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 FPrinc: TFPrinc;
 DBGrid1: TMyDBGrid;

implementation

{$R *.dfm}

procedure TFPrinc.FormActivate(Sender: TObject);
begin
 DBGrid1:=TMyDBGrid.Create(Self);
 InsertControl(DBGrid1);
 DBGrid1.Align:=alClient;
 DBGrid1.DataSource:=DSTest;
 DBGrid1.Options:=[dgRowSelect,dgTitles,dgIndicator,dgColLines,dgRowLines];
end;

procedure TMyDBGrid.WMMouseWheel(var Msg: TWMMouseWheel);
begin
if DataSource.DataSet.Active then begin
                                    if Msg.WheelDelta > 10 then DataSource.DataSet.Prior;
                                    if Msg.WheelDelta < -10 then DataSource.DataSet.Next;
                                  end;
end;

end.


Warlock   (2004-10-27 11:50:00) [8]

ИдЦитирую дословно:

kukuikar ©   (22.09.04 10:47) [1]
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
     Msg.wParam := VK_UP
   else
     Msg.wParam := VK_DOWN;
   Handled := False;
 end;
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо