Форум: "Основная";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];
ВнизПрокрутка грида колесиком мыши Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.031 c