Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Win10: Nach Klick auf Button mittels Leertaste wird OnFormMouseDown nicht ausgelöst (https://www.delphipraxis.net/199529-win10-nach-klick-auf-button-mittels-leertaste-wird-onformmousedown-nicht-ausgeloest.html)

Michael II 29. Jan 2019 23:25

Win10: Nach Klick auf Button mittels Leertaste wird OnFormMouseDown nicht ausgelöst
 
Delphi 7 / Delphi 10.3

Ich setze einen Button und einen Label auf ein Form und ergänze OnButtonClick und OnFormMouseDown wie folgt:

Delphi-Quellcode:
var t : uint64;

procedure TForm17.Button1Click(Sender: TObject);
begin
  label1.caption := 'B';
  t := GetTickCount64;
end;

procedure TForm17.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if t <> 0 then
  begin
    label1.Caption := 'M ' + (gettickcount64-t).ToString;
    t := 0;
  end;
end;

1. Wenn ich nun das Programm laufen lasse und via <Leertaste> OnButtonClick auslöse und danach sofort irgendwo aufs Form klicke, dann werden solche Klicks auf meinem Win 10 (Build 17763) während ca. w=800ms ignoriert. Erst nach der Zeit w wird durch Klick aufs Form OnFormMouseDown ausgelöst.
2. Wenn ich den OnButtonClick hingegen durch Mausklick auf den Button auslöse und danach sofort irgendwo aufs Form klicke, wird OnFormMouseDown ausgelöst.

3. Wenn ich das gleiche Programm auf einem XP Rechner laufen lasse und via <Leertaste> den Button klicke und danach sofort irgendwo aufs Form klicke, dann wird OnFormMouseDown ausgelöst.

Liegt (1., w=800ms) an Win10 oder irgendwelchen Systemeinstellungen? Kann ich dieses Verhalten durch Setzen von irgendwelchen Werten via mein Programm so beeinflussen, dass w=0 wird?

Besten Dank für jede Idee...

peterbelow 30. Jan 2019 10:45

AW: Win10: Nach Klick auf Button mittels Leertaste wird OnFormMouseDown nicht ausgelö
 
Ich kann dein Problem nicht reproduzieren (Win10 Home, Delphi 10.3 Rio, Vcl app, Win32 Target platform). Bei mir feuert der OnMouseDown-Event immer, egal wie ich den Button klicke.

Hast Du eventuell einen anderen Rechner verfügbar, auf dem Du das mal ausprobieren könntest?

Michael II 30. Jan 2019 17:53

AW: Win10: Nach Klick auf Button mittels Leertaste wird OnFormMouseDown nicht ausgelö
 
Hallo Peter

besten Dank fürs Testen.

Ich habe nun auf meinem Win10 Home 17763 rasch Visual Studio 2017 installiert und mit VB getestet - gleiches Verhalten auch hier.

Auch im "abgesicherten Modus > Minimal" verhält sich dieses Miniprogramm gleich. (Ressourcenschutz zeigt alles OK an.)

Ich werde dann noch auf anderen Win10 testen - selbst habe ich nur Zugriff auf je ein XP, 7, 10 (und Server 2012, 2016).

Wenn jemand weiss, dass dies an einer Win-Systemeinstellung liegt und für ein Delphi Programm (oder allgemein) deaktiviert werden kann, dann wäre das echt schön.

Da das Problem ausserhalb von Delphi liegen muss poste ich zum Thema nur noch was, wenn ich den Grund und eine Lösung finden sollte.

Gruss
Michael

Schokohase 30. Jan 2019 18:21

AW: Win10: Nach Klick auf Button mittels Leertaste wird OnFormMouseDown nicht ausgelö
 
Ist das eventuell ein Laptop/Notebook?

Michael II 30. Jan 2019 19:21

AW: Win10: Nach Klick auf Button mittels Leertaste wird OnFormMouseDown nicht ausgelö
 
Ja, ein Dell inspiron 7520.

Schokohase 30. Jan 2019 20:30

AW: Win10: Nach Klick auf Button mittels Leertaste wird OnFormMouseDown nicht ausgelö
 
https://www.dell.com/community/Lapto...k/td-p/4032580

Zitat:

This has been bugging me for ages, finally found a solution.

Open the registry editor ( Start > Run > regedit ) and go to
Code:
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\Elantech\OtherSetting
There are two keys to change, one called DisableWhenType_AllArea and one called DisableWhenType_Enable

They will both be set to "1", double click them and change them both to "0"

exit, restart and problem solved Smiley Happy
Warum?

Da das Touchpad unterhalb der Tastatur angebracht ist, da wo man in der Regel die Handballen hat, wenn man am Tippen ist, und ratzfatz hat man beim Tippen aus Versehen mit dem Handballen auf dem Touch einen Klick ausgelöst, positioniert damit den Cursor neu und die Eingaben landen an Stellen, die man nicht möchte.

Darum wird der Klick des Touchpads bei einer Tastatureingabe für den Zeitraum x gesperrt, um dieses nervige Verhalten zu unterbinden.

Michael II 31. Jan 2019 00:10

AW: Win10: Nach Klick auf Button mittels Leertaste wird OnFormMouseDown nicht ausgelö
 
Besten Dank Schokohase. Genau dies ist sicher der Grund. Von den beiden zitierten Werten war einer auf 1.
Das Programm verhält sich zwar nach Änderung des Werts und Win Neustart immer noch gleich; aber es gibt weitere Werte und Wartezeiten, welche man via Registry ändern kann.

Da diese Werte sicher nicht bei jedem Touchpad gleich sind und Windows wahrscheinlich keine "Beachte/Ignoriere Touchpad Einstellungen" Funktion z.V. stellt, werde ich wohl bei meinem Programm (Kartenspiel) was ändern.

Schokohase 31. Jan 2019 06:21

AW: Win10: Nach Klick auf Button mittels Leertaste wird OnFormMouseDown nicht ausgelö
 
Nur falls du das falsch verstanden haben solltest:

Dieses Verhalten ist kein Standard-Verhalten von Windows sondern von einer/m separat installierten Anwendung/Treiber von DELL.

Michael II 31. Jan 2019 10:53

AW: Win10: Nach Klick auf Button mittels Leertaste wird OnFormMouseDown nicht ausgelö
 
Ich habe dich absolut richtig verstanden.

Mit meinem Kommentar meinte ich:
Es wäre gut, wenn die TouchPad Hersteller eine WindowsEinstellung "TouchPad_Delays_Erlauben" beachten müssten und wenn man diesen Wert via eine Windowsfunktion für ein Programm setzen könnte.


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