Einzelnen Beitrag anzeigen

Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#7

AW: Mouse-Scroll wird als Click gewertet

  Alt 3. Sep 2010, 13:39
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
  Mit Zitat antworten Zitat