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

Registriert seit: 24. Jan 2005
Ort: Attendorn/Sauerland
235 Beiträge
 
Turbo Delphi für Win32
 
#1

Mouse-Scroll wird als Click gewertet

  Alt 17. Apr 2007, 08:34
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.?
=JPSelter=

Visit www.ditonovia.de for our breathtaking movies: Herrin der Ringe (Fantasy 2005), Hemisphere (Science-Fiction 2004) & Braveknife (Parodie 2001) and more...
  Mit Zitat antworten Zitat
angos

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

AW: Mouse-Scroll wird als Click gewertet

  Alt 1. Sep 2010, 03:37
Na da haben wir ja ein altes Schätzchen

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ß
Ansgar
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: Mouse-Scroll wird als Click gewertet

  Alt 1. Sep 2010, 05:42
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.
  Mit Zitat antworten Zitat
angos

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

AW: Mouse-Scroll wird als Click gewertet

  Alt 1. Sep 2010, 07:25
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ß
Ansgar
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
angos

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

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
 
#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
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 19:47 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