AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mouse-Scroll wird als Click gewertet

Ein Thema von JPSelter · begonnen am 17. Apr 2007 · letzter Beitrag vom 3. Sep 2010
Antwort Antwort
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.374 Beiträge
 
Delphi 12 Athens
 
#1

AW: Mouse-Scroll wird als Click gewertet

  Alt 1. Sep 2010, 08:08
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)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
angos

Registriert seit: 26. Mai 2004
Ort: Rheine
551 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Mouse-Scroll wird als Click gewertet

  Alt 3. Sep 2010, 12:56
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ß
Ansgar
  Mit Zitat antworten Zitat
Hawkeye219

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

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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz