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 Fehler in Form.OnMouseWheel (2x und mit wechselndem Shift) (https://www.delphipraxis.net/169049-fehler-form-onmousewheel-2x-und-mit-wechselndem-shift.html)

ralfiii 26. Jun 2012 12:08

Fehler in Form.OnMouseWheel (2x und mit wechselndem Shift)
 
Hallo!

Ich vermute mal schwer hier sitzt in Delphi (überprüft in 2007 und 2010) der Wurm drin.
Man erzeuge ein Formular, setzte ein Memo drauf und dann folgenden Code in OnMouseWheel:

Delphi-Quellcode:
procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer;
  MousePos: TPoint; var Handled: Boolean);
begin
     Memo1.Lines.Add(IntToHex(Word(Shift), 4));

     if Shift=[ssCtrl] then
        Memo1.Lines.Add('Ctrl')
     else
     if Shift=[ssShift] then
        Memo1.Lines.Add('Shift');
end;
Wenn man nun die CTRL-Taste niederhält und die Maus rollt, dann wird OnMouseWheel zweimal aufgerufen (das ist ja schon seltsam), davon der erste mal korrekter weise mit ssCtrl, das zweite mal mit ssShift (?!??!?).

Any ideas was das soll?
Man kann zwar handled auf True setzen, dann kommt der zweite Aufruf nicht, aber dann funktioniert unter Umständen das scrollen in irgendwelchen Controls nicht mehr automatisch.

(in http://www.delphipraxis.net/59789-on...ufgerufen.html wurde der Doppelaufruf schon erwähnt, aber das mit dem wechselnden ShiftState war damals kein Thema)

Bummi 26. Jun 2012 12:16

AW: Fehler in Form.OnMouseWheel (2x und mit wechselndem Shift)
 
Handled := true;

ralfiii 26. Jun 2012 14:32

AW: Fehler in Form.OnMouseWheel (2x und mit wechselndem Shift)
 
Zitat:

Zitat von Bummi (Beitrag 1172475)
Handled := true;

Hab ich ja geschrieben (siehe vorletzte Zeile vom vorigen Posting): wenn man das macht, kommt zwar der zweite Call nicht mehr, Controls die den Scroll-Event gerne hätten können dann nicht mehr mit Mausrad gesteuert werden.

Und: Das ist nur ein Workaround und keine Erklärung für das Verhalten. Kann man also sagen dass das ein Fehler in Delphi ist?

ralfiii 26. Jun 2012 14:54

AW: Fehler in Form.OnMouseWheel (2x und mit wechselndem Shift)
 
Ich hab's mal reported:

http://qc.embarcadero.com/wc/qcmain.aspx?d=106683

Bummi 26. Jun 2012 14:56

AW: Fehler in Form.OnMouseWheel (2x und mit wechselndem Shift)
 
Deine vorletzte Zeile hatte ich übersehen ...

wenn man sich TCustomForm.MouseWheelHandler anschaut und dann dafür sorgt dass kein fokusierbares Element auf dem Form ist
ist die Ausgabe wie gewünscht.
Ich weiß zwar noch nicht wie, aber FFocusedControl.Perform(... scheint zu dem Problem zu führen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:20 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