Hallo zusammen,
ich verwende für das Scrollen mit der Mousse eine Routine, damit beim Scrollen in einem DBGrid nicht die bereits getätigte Markierung verloren geht. Die sieht folgendermaßen aus:
Delphi-Quellcode:
procedure TfmMain.AppMessage(var Msg: TMsg; var Handled: Boolean);
var DBGrid : TDBGrid;
CRDBGrid : TCRDBGrid;
begin
if not fmMain.Showing then Exit;
{Mouse wheel behaves strangely with dbgrids - this proc sorts this out}
if Msg.message = WM_MOUSEWHEEL then
begin
if (Screen.ActiveControl is TDBGrid) or (Screen.ActiveControl is TCRDBGrid)then
begin
if Screen.ActiveControl is TDBGrid then
begin
DBGrid := Screen.ActiveControl as TDBGrid;
if Msg.wParam > 0 then
Msg.wParam := SendMessage(DBGrid.Handle, WM_VSCROLL, SB_LINEUP, 0)
else Msg.wParam := SendMessage(DBGrid.Handle, WM_VSCROLL, SB_LINEDOWN, 0);
end
else if Screen.ActiveControl is TCRDBGrid then
begin
CRDBGrid := Screen.ActiveControl as TCRDBGrid;
if Msg.wParam > 0 then
Msg.wParam := SendMessage(CRDBGrid.Handle, WM_VSCROLL, SB_LINEUP, 0)
else Msg.wParam := SendMessage(CRDBGrid.Handle, WM_VSCROLL, SB_LINEDOWN, 0);
end;
Handled := False;
end;
end;
end;
Der Part mit dem TDBGrid funktioniert einwandfrei. Somit habe ich die Routine um das TCRDBGrid erweitert. Mit diesem Grid passiert jedoch nichts. Es geht die Markierung verloren und er scrollt einfach durch die Datensätze.
Weiß jemand eine Möglichkeit das Ganze auch an ein TCRDBGrid anwenden zu können?
Gruß, Moony