Scroll в/у DBGrid

3 отговора 120 прегледа
#1

Scroll в/у DBGrid

Как мога да прихвана скролирането с mouse-a на DBGrid???

Отговор
в отговор на VladoVasilev #2

Re: Scroll в/у DBGrid

Най-лесно:
пускаш TAppEvents (в Delphi 7) или TApplication (в по-ранните делфита, не помня кои точно) върху формата и в OnMessage пишеш:

procedure TfrmMain.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
If (Msg.message = WM_MOUSEWHEEL) and
(ActiveControl.Name = 'DBGrid1') then begin
If Msg.wParam < 0 then
TDBGrid(ActiveControl).Perform(WM_VSCROLL, SB_LINEDOWN, 0)
else
TDBGrid(ActiveControl).Perform(WM_VSCROLL, SB_LINEUP, 0);
end;
Handled := False;
end;

Ако тоя вид скролл не те устройва, пиши Perform(WM_KEYDOWN, VK_DOWN, 0) за надолу и Perform(WM_KEYDOWN, VK_UP, 0) за нагоре.

Отговор
в отговор на VladoVasilev #3

Re: Scroll в/у DBGrid

Кажи какво точно целиш - в другия пост имаше страннен за мен код - най-малкото, че никога не съм имал проблеми с мишката - даже и когато грид-а не е активен. Мисля, че пробема по скоро идва от драйвера на мишката - A4Tech ако не с много добри мишки - поне много здрави драйвери правят в този контекст.
А ако искаш да прихващаш някакво движение и възоснова на това да манипулираш данни - вътре или извън грида - мисля, че не си се насочил в правилната посока има други начини да се постигне това (пример - грид с фиксирани колони или общи суми и прочие).

---
Отговор
в отговор на VladoVasilev #4

Re: Scroll в/у DBGrid

аз пак ползвам това:

unit c_DBGridEx;

interface

uses
SysUtils, Classes, Controls, Grids, DBGrids,messages,windows,DB;

type
TDBGridEx = class(TDBGrid)
protected
procedure mw (var m:TMessage);message WM_MOUSEWHEEL;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('SDR''s', [TDBGridEx]);
end;

{ TDBGridEx }

procedure TDBGridEx.mw(var m: TMessage);
var
zDelta:Smallint;
begin
// EditorMode
// MessageBox(0,'scrol?',nil,0);
zDelta:=HIWORD(m.wParam);
if DataSource.DataSet.State in [dsEdit, dsInsert] then DataSource.DataSet.Post;
if DataSource.DataSet.State=dsBrowse then begin
if zDelta<0 then begin
if not DataSource.DataSet.Eof then DataSource.DataSet.Next;
end else begin
if not DataSource.DataSet.Bof then DataSource.DataSet.Prior;
end;
end;
end;

end.


------------------------------
I got a COMPILER, and I'm not afraid to use it!
Отговор