Hallo Ansgar,
die Ursache des Problems ist, dass beim Verarbeiten der Mausrad-Nachrichten der Fokus im Grid gewechselt wird. Dies löst - wie auch beim Verschieben per Tastatur - ein Click-Ereignis aus.
Im folgenden Code werden zwei Methoden von TStringGrid ersetzt. Sie leiten die Mausrad-Nachrichten als Scroll-Botschaften an das Grid weiter (getestet mit D2010).
Delphi-Quellcode:
type
TStringGrid = class (Grids.TStringGrid)
protected
function DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean; override;
function DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean; override;
end;
TDemoForm = class (TForm)
Grid: TStringGrid;
end;
function TStringGrid.DoMouseWheelDown (Shift: TShiftState; MousePos: TPoint): Boolean;
begin
Perform (WM_VSCROLL, MakeWParam(SB_LINEDOWN, 0), 0);
end;
function TStringGrid.DoMouseWheelUp (Shift: TShiftState; MousePos: TPoint): Boolean;
begin
Perform (WM_VSCROLL, MakeWParam(SB_LINEUP, 0), 0);
end;
Falls du die Deklaration des "Ersatz-Grids" in eine eigene
Unit verschieben möchtest, musst du darauf achten, dass diese neue
Unit nach der
Unit "Grids" in den Uses-Anweisungen der verwendenden Units aufgeführt wird. Alternativ kannst du natürlich eine eigene TStringGrid-Ableitung mit einem neuen Klassennamen einführen. In diesem Fall wirst du aber alle Formulare anpassen müssen, in denen ein Grid verwendet wird.
Gruß Hawkeye