Link to home
Start Free TrialLog in
Avatar of PsyProg
PsyProg

asked on

setting mouse essped delphi 7

how to change the mouse speed into a delphi 7 application? I mean, I want to inform the new speed value on running application.
Avatar of BdLm
BdLm
Flag of Germany image

is this the solution you need ?


https://www.experts-exchange.com/questions/11060127/speed-of-the-mouse-cursor.html

if yes, we can port that code to delphi  

Avatar of PsyProg
PsyProg

ASKER

I tried this:

mspeed[0] := 0;
mspeed[1] := 0;      
mspeed[2] := 0;

and this

mspeed[0] := 4;
mspeed[1] := 6;      
mspeed[2] := 2;;

                                               
if not SystemParametersInfo(SPI_SETMOUSE, 0, @mspeed[0], 0) then
showmessage('Error');

No error message and NO mouse speed alteration...

any new idea? tks
Avatar of PsyProg

ASKER

I read thar "spi_setmousespeed" doesn't work at windows xp, but "spi_setmouse" works?


NOT
 
  SystemParametersInfo(SPI_SETMOUSE, 0, @speed, SPIF_SENDCHANGE);
 
 BUT
 
  SystemParametersInfo(SPI_SETMOUSE, 0, @a, SPIF_SENDCHANGE)
Avatar of PsyProg

ASKER

BdLm,

I appreciate your attention, but doesn't work yet. the name of the varaible after "@" doesn't matter, since you have wrote them like array[0..2] of integer.

i know that the statement "if not SystemParametersInfo(SPI_SETMOUSE, 0, @mspeed[0], 0) then
showmessage('Error');"  has been reading without error, but the question is why the mouse keeps the same speed? I tried "@mspeed" and "@mspeed[0]" (like the link you show me). and I tried with "@a"...

tks

Avatar of PsyProg

ASKER

and

I tried the fourth part with:
SPIF_SENDCHANGE - no error
SPIF_SENDWININICHANGE Or SPIF_UPDATEINIFILE - error
SPIF_SENDWININICHANGE - error
SPIF_UPDATEINIFILE - error
0 - no error

but no mouse speed alteration.

[]
Avatar of Emmanuel PASQUIER
@mspeed and @mspeed[0] are completely equivalent.

I found some similar codes (even Delphi ones) and tested them too but to no effect.
On one topic, some people where saying that it worked for them, and other said that it had no effect, so I guess this method just don't work with some OS/mouse drivers combinations. That was the conclusion of those guys in the source website.

Another way of doing that will have to be found....
Remove the @... just pass by value, the doc is wrong

SystemParametersInfo(SPI_SETMOUSE, 0, 20, SPIF_UPDATEINIFILE or SPIF_SENDCHANGE);
Avatar of PsyProg

ASKER

hi epasquier and DragonSlayer,

tanks for the help.

the delphi code doesn't compile with a integer value at the third place. Message: incompatible types: Integer  and Pointer.

tks
Hi PsyProg...

1. Have you tried with SPI_SETMOUSESPEED instead?
2. There have been forums that shows people redefining their call to SystemsParameterInfo to send an actual value instead of a pointer
Avatar of PsyProg

ASKER

Can you help me to translate this VB code,

Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Integer, ByVal fuWinIni As Long) As Long

to delphi code?

how should this part (Lib "user32" Alias "SystemParametersInfoA") be write into delphi code?

tks
Avatar of PsyProg

ASKER

Hi BdLm,

I read that post before, but this is the solution that doesn't generate error and still doesn't change the speed mouse...

I am inclinated to try the alternative to redelcare the function SystemParametersInfo into the code...but i don't know how to translate the Vb to delphi...

tks
not talking on the vb solution the link on the delpho pages, last post here was: solutions works fine

Avatar of PsyProg

ASKER

my code following the delphi page you posted::

procedure Mousesol;
var
a: array [0..2] of integer;
begin
a[0] := 0;   //4; // threshold value
a[1] := 0;   //6; // threshold value
a[2] := 0;   //2; // mouse speed        
if not SystemParametersInfo(SPI_SETMOUSE, 0, @a, SPIF_SENDCHANGE) then
showmessage('Tem Erro Aqui');
end;

I also tried without "if not then"...

I tried several changes on the parameters third and fourth...but nothing.

the fourth part with:
SPIF_SENDCHANGE - no error
SPIF_SENDWININICHANGE Or SPIF_UPDATEINIFILE - no error
SPIF_SENDWININICHANGE - no error
SPIF_UPDATEINIFILE - no error
0 - no error

the third part with
0 0 0
6 4 2
0 0 5
20 20 20
1 1 1
3 3 3
so on...

that is the reason i want to try the vb solution redeclaring the function...

tks

PsyProg;
Here you go!
var
   reg:TRegistry;
begin
   reg:=TRegistry.Create;
   with reg do begin
    try
     if OpenKey('\Control Panel\mouse', False) then begin
      reg.WriteString ('MouseSensitivity','20') ;
      reg.WriteString ('MouseSpeed','1') ;
      SystemParametersInfo (SPI_SETMOUSE,0, nil,SPIF_SENDWININICHANGE) ;
     end
    finally
      reg.Free;
    end;
   end;
end;

Open in new window

Or using the ScrollBar;
Don't forget the : uses Registry;
procedure TForm1.FormCreate(Sender: TObject);
begin
Scrollbar1.max:=20;
Scrollbar1.OnChange := ScrollBar1Change;
end;

procedure TForm1.ScrollBar1Change(Sender: TObject);
var
   reg:TRegistry;
begin
   reg:=TRegistry.Create;
   with reg do begin
    try
     if OpenKey('\Control Panel\mouse', False) then begin
      reg.WriteString ('MouseSensitivity', inttostr(ScrollBar1.position)) ;
      SystemParametersInfo (SPI_SETMOUSE,0, nil,SPIF_SENDWININICHANGE) ;
     end
    finally
      reg.Free;
    end;
   end;
end;

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of DragonSlayer
DragonSlayer
Flag of Malaysia image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of PsyProg

ASKER

perfect.
Avatar of PsyProg

ASKER

systan,

I still need to try your code, but the DragonSlayer's code works just fine.

tks