Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.14;
Скачать: CL | DM;

Вниз

Прокрутка грида колесиком мыши   Найти похожие ветки 

 
sapsi   (2004-10-27 10:06) [0]

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

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

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

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


 
Warlock ©   (2004-10-27 11:50) [1]

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

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;


 
Жук ©   (2004-10-27 13:49) [2]

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.


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

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


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

Спасибо, все получилось с
  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


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

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


 
sapsi   (2004-10-27 15:10) [6]

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

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


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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2004.11.14;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.034 c
1-1098944359
NewDelpher
2004-10-28 10:19
2004.11.14
Скопировать данные из TList в массив


1-1098961605
Chlavik
2004-10-28 15:06
2004.11.14
Pointer -> _ContactItem и наоборот


1-1099394372
Black Fox
2004-11-02 14:19
2004.11.14
SCADA компоненты для Delphi ???


3-1098090555
Layner
2004-10-18 13:09
2004.11.14
Помогите парсировать SQL запрос


1-1099219576
namiq
2004-10-31 13:46
2004.11.14
Proqramma Editora