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/)
-   -   Get doubleclick width / height (https://www.delphipraxis.net/190769-get-doubleclick-width-height.html)

blablab 5. Nov 2016 13:40

Get doubleclick width / height
 
Hi!

Gibt es um die maximale Distanz zwischen zwei Klicks festzustellen eine Art Methode wie GetDoubleClickSpeed?

Im Prinzip möchte ich also diese Werte möglichst bequem auslesen:
HKEY_CURRENT_USER\Control Panel\Mouse\DoubleClickWidth
HKEY_CURRENT_USER\Control Panel\Mouse\DoubleClickHeight

Grüße
blablab

Delphi-Laie 5. Nov 2016 15:07

AW: Get doubleclick width / height
 
Diese beiden Werte lassen sich doch recht bequem aus der Registrierung auslesen. Die nötigen Unterprogramme dazu findest Du in der Unit "Registry".

Die maximale Distanz ist dann nicht oder gerade so erreicht, wenn DoubleClickWidth und DoubleClickHeight nicht oder gerade so erreicht sind. Oder negiert: Die maximale Distanz ist dann überschritten, wenn eine der beiden Distanzen überschritten wurde.

Wenn Du allerdings einen Kreis als maximale Distanz wünschst, mußt Du den Satz des Pythagoras' anwenden.

t.roller 5. Nov 2016 15:12

AW: Get doubleclick width / height
 
...

HolgerX 5. Nov 2016 17:13

AW: Get doubleclick width / height
 
Statt direkt aus der Registry gibs auch hier API-Calls unter Windows:

Delphi-Quellcode:
//Schreiben
  Windows.SetDoubleClickTime(SpinEditSpeed.Value);
  Windows.SystemParametersInfo(SPI_SETDOUBLECLKHEIGHT,SpinEditHeight.Value,NIL,(SPIF_UPDATEINIFILE or SPIF_SENDCHANGE));
  Windows.SystemParametersInfo(SPI_SETDOUBLECLKWIDTH,SpinEditWidth.Value,NIL,(SPIF_UPDATEINIFILE or SPIF_SENDCHANGE));

//Lesen
  SpinEditHeight.Value := Windows.GetSystemMetrics(SM_CYDOUBLECLK);
  SpinEditWidth.Value := Windows.GetSystemMetrics(SM_CXDOUBLECLK);
  SpinEditSpeed.Value := Windows.GetDoubleClickTime;

blablab 5. Nov 2016 18:50

AW: Get doubleclick width / height
 
@HolgerX:
Vielen Dank! Genau das hab ich gesucht!

@Delphi-Laie:
Wäre das korrekt? (Die erste Funktion ist Dank HolgerX nicht mehr nötig)
Delphi-Quellcode:
function GetDoubleClickSize: TSize;
var
   reg: TRegistry;
begin
   reg := TRegistry.Create;
   Try
      reg.RootKey := HKEY_CURRENT_USER;
      reg.OpenKey('Control Panel\Mouse', False);
      Result.cx := StrToInt(reg.ReadString('DoubleClickWidth'));
      Result.cy := StrToInt(reg.ReadString('DoubleClickHeight'));
   Finally
      reg.Free;
   End;
end;

function InDist(const test, mid: TPoint; const eSize: TSize): Boolean;
var
   rFx, rFy: Double;
   dX, dY, maxSize: Integer;
begin
   dx := mid.X - test.X;
   dy := mid.Y - test.Y;
   maxSize := Max(eSize.cx, eSize.cy);
   rFx := Sqrt(Sqr(maxSize) - Sqr(eSize.cy)) / 2;
   rFy := Sqrt(Sqr(maxSize) - Sqr(eSize.cx)) / 2;
   Result :=  Sqrt(Sqr(dX-rFx) + Sqr(dY-rFy))
                  + Sqrt(Sqr(dX+rFx) + Sqr(dY+rFy)) <= maxSize;
end;


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