Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Mouse-Scroll wird als Click gewertet (https://www.delphipraxis.net/90413-mouse-scroll-wird-als-click-gewertet.html)

JPSelter 17. Apr 2007 08:34


Mouse-Scroll wird als Click gewertet
 
In einem Stringgrid möchte ich gerne mit dem Mouserad scrollen können, aber er löst dabei immer in das OnClick Ereignis aus. Kann ich das irgendwie abfangen? Eine Abfrage, welche Mousetaste gedrückt wurde z.B.?

angos 1. Sep 2010 03:37

AW: Mouse-Scroll wird als Click gewertet
 
Na da haben wir ja ein altes Schätzchen :D

Ich habe das gleiche Problem, bzw die gleiche Anforderung: Ich benötige ein Ereignis im StringGrid, welches nur bei einem tatsächlichen Mouseclick ausgeführt wird und eben nicht beim Scrollen.

Gibt es da eine Lösung?

Vielleicht bin ich auch einfach nur zu gar um die Lösung zu sehen, da ich seit gestern Morgen hier hocke um ein Programm fertigzubekommen^^


Gruß

Matze 1. Sep 2010 05:42

AW: Mouse-Scroll wird als Click gewertet
 
Hallo,

ich kann das Problem nachvollziehen, kenne jedoch auch keine Lösung dafür.
Du könntest ggf. vorerst das OnMouseDown-Ereignis anstelle des OnClick-Ereignisses nutzen.

angos 1. Sep 2010 07:25

AW: Mouse-Scroll wird als Click gewertet
 
Hi,

danke aber das passt nicht in ds Konzept ;)

habe in das OnClick nun
Delphi-Quellcode:
if GetAsyncKeyState(VK_LBUTTON) = 0 then
    begin
      Exit;
    end;
eingebaut, damit scheints sauber zu klappen.

Gruß

himitsu 1. Sep 2010 08:08

AW: Mouse-Scroll wird als Click gewertet
 
Und jetzt probier mal auf OnClick zu reagieren.

OnClick wird beim Loslassen der Taste ausgelöst, also ist Diese, zum Zeitpunkt des Ausführens der Ereignisroutine, ebenfalls nicht gedrückt.

Fazit, dein Code funktioniert wohl doch nicht so richtig, da die Taste so oder so nicht gedrückt ist.

Vorschlag: VirtualTreeView/VirtualStringTree verwenden.
(ist zwag mehr Aufwand, aber dafür kann dieser auch mehr und dieses uralten und nicht grad "optimalen" Komponenten der Draw- und StringGrids sollte man wohl besser ignorieren)

angos 3. Sep 2010 12:56

AW: Mouse-Scroll wird als Click gewertet
 
Hi,

hmm, das funktioniert hier aber einwandfrei.
Natürlich wäre es sinnvoller auf den VST umzusatteln, dafür fehlt mir aber momentan die Zeit :(

Ich werds erstmal so lassen...

Gruß

Hawkeye219 3. Sep 2010 13:39

AW: Mouse-Scroll wird als Click gewertet
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz