|
Тема
|
Scroll в/у DBGrid
|
|
Автор |
VladoVasilev (непознат
) |
Публикувано | 30.06.04 14:07 |
|
Как мога да прихвана скролирането с mouse-a на 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) за нагоре.
| |
|
Кажи какво точно целиш - в другия пост имаше страннен за мен код - най-малкото, че никога не съм имал проблеми с мишката - даже и когато грид-а не е активен. Мисля, че пробема по скоро идва от драйвера на мишката - A4Tech ако не с много добри мишки - поне много здрави драйвери правят в този контекст.
А ако искаш да прихващаш някакво движение и възоснова на това да манипулираш данни - вътре или извън грида - мисля, че не си се насочил в правилната посока има други начини да се постигне това (пример - грид с фиксирани колони или общи суми и прочие).
---
| |
|
аз пак ползвам това:
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!
| |
|
|
|
|