mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 11:59:41 +01:00 
			
		
		
		
	+ Added custom mouse driver example
This commit is contained in:
		
							parent
							
								
									393ef5c2c2
								
							
						
					
					
						commit
						4a60fc968b
					
				@ -24,7 +24,7 @@
 | 
			
		||||
% The Mouse unit
 | 
			
		||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | 
			
		||||
\chapter{The MOUSE unit}
 | 
			
		||||
\FPCexampledir{mousex}
 | 
			
		||||
\FPCexampledir{mouseex}
 | 
			
		||||
The \var{Mouse} unit implements a platform independent mouse handling 
 | 
			
		||||
interface. It is implemented identically on all platforms supported by 
 | 
			
		||||
\fpc{} and can be enhanced with custom drivers, should this be needed.
 | 
			
		||||
@ -333,3 +333,11 @@ For an example, see \seep{HideMouse}
 | 
			
		||||
 | 
			
		||||
\section{Writing a custom mouse driver}
 | 
			
		||||
\label{se:mousedrv}
 | 
			
		||||
The \file{mouse} has support for adding a custom mouse driver. This can be
 | 
			
		||||
used to add support for mouses not supported by the standard \fpc{} driver,
 | 
			
		||||
but also to enhance an existing driver for instance to log mouse events or
 | 
			
		||||
to implement a record and playback function. 
 | 
			
		||||
 | 
			
		||||
The following unit shows how a mouse driver can be enhanced by adding some
 | 
			
		||||
logging capabilities to the driver.
 | 
			
		||||
\FPCexample{logmouse}
 | 
			
		||||
 | 
			
		||||
@ -32,8 +32,9 @@ endif
 | 
			
		||||
 | 
			
		||||
.PHONY: all tex clean
 | 
			
		||||
 | 
			
		||||
OBJECTS=mouse1 mouse2 mouse3 mouse4 mouse5 mouse6 mouse7 mouse8 mouse9 \
 | 
			
		||||
        mouse10
 | 
			
		||||
OBJECTS=ex1 ex2 ex3 ex4 ex5 ex6 ex7 logmouse
 | 
			
		||||
# mouse8 mouse9 \
 | 
			
		||||
#        mouse10
 | 
			
		||||
 | 
			
		||||
TEXOBJECTS=$(addsuffix .tex, $(OBJECTS))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,7 @@
 | 
			
		||||
This directory contains the examples for the mouse unit.
 | 
			
		||||
 | 
			
		||||
logmouse.pp  contains and example of how to write a custom mouse driver.
 | 
			
		||||
 | 
			
		||||
ex1.pp contains an example of the DetectMouse function.
 | 
			
		||||
ex2.pp contains an example of the GetMouseButtons function.
 | 
			
		||||
ex3.pp contains an example of the GetMouseEvent function.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										116
									
								
								docs/mouseex/logmouse.pp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										116
									
								
								docs/mouseex/logmouse.pp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,116 @@
 | 
			
		||||
unit logmouse;
 | 
			
		||||
 | 
			
		||||
interface
 | 
			
		||||
 | 
			
		||||
Procedure StartMouseLogging;
 | 
			
		||||
Procedure StopMouseLogging;
 | 
			
		||||
Function  IsMouseLogging : Boolean;
 | 
			
		||||
Procedure SetMouseLogFileName(FileName : String);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
implementation
 | 
			
		||||
 | 
			
		||||
uses sysutils,Mouse;
 | 
			
		||||
 | 
			
		||||
var
 | 
			
		||||
  NewMouseDriver,
 | 
			
		||||
  OldMouseDriver : TMouseDriver;
 | 
			
		||||
  Active,Logging : Boolean;
 | 
			
		||||
  LogFileName : String;
 | 
			
		||||
  MouseLog : Text;
 | 
			
		||||
 | 
			
		||||
Function TimeStamp : String;
 | 
			
		||||
 | 
			
		||||
begin
 | 
			
		||||
  TimeStamp:=FormatDateTime('hh:nn:ss',Time());
 | 
			
		||||
end;
 | 
			
		||||
  
 | 
			
		||||
Procedure StartMouseLogging;
 | 
			
		||||
 | 
			
		||||
begin
 | 
			
		||||
  Logging:=True;
 | 
			
		||||
  Writeln(MouseLog,'Start logging mouse events at: ',TimeStamp);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
Procedure StopMouseLogging;
 | 
			
		||||
 | 
			
		||||
begin
 | 
			
		||||
  Writeln(MouseLog,'Stop logging mouse events at: ',TimeStamp);
 | 
			
		||||
  Logging:=False;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
Function IsMouseLogging : Boolean;
 | 
			
		||||
 | 
			
		||||
begin
 | 
			
		||||
  IsMouseLogging:=Logging;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
Procedure LogGetMouseEvent(Var Event : TMouseEvent);
 | 
			
		||||
 | 
			
		||||
Var
 | 
			
		||||
  M : TMouseEvent;
 | 
			
		||||
 | 
			
		||||
begin
 | 
			
		||||
  OldMouseDriver.GetMouseEvent(M);
 | 
			
		||||
  If Logging then
 | 
			
		||||
    begin
 | 
			
		||||
    Write(MouseLog,TimeStamp,': Mouse ');
 | 
			
		||||
    With M do
 | 
			
		||||
      begin
 | 
			
		||||
      Case Action of
 | 
			
		||||
        MouseActionDown : Write(MouseLog,'down');
 | 
			
		||||
        MouseActionUp   : Write(MouseLog,'up');
 | 
			
		||||
        MouseActionMove : Write(MouseLog,'move');
 | 
			
		||||
      end;
 | 
			
		||||
      Write(MouseLog,' event at ',X,',',Y);
 | 
			
		||||
      If (Buttons<>0) then
 | 
			
		||||
        begin
 | 
			
		||||
        Write(MouseLog,' for buttons: ');
 | 
			
		||||
        If (Buttons and MouseLeftbutton)<>0 then
 | 
			
		||||
          Write(MouseLog,'Left ');
 | 
			
		||||
        If (Buttons and MouseRightbutton)<>0 then
 | 
			
		||||
          Write(MouseLog,'Right ');
 | 
			
		||||
        If (Buttons and MouseMiddlebutton)<>0 then
 | 
			
		||||
          Write(MouseLog,'Middle ');
 | 
			
		||||
        end;  
 | 
			
		||||
      Writeln(MouseLog);
 | 
			
		||||
      end;
 | 
			
		||||
    end;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
Procedure LogInitMouse;
 | 
			
		||||
 | 
			
		||||
begin
 | 
			
		||||
  OldMouseDriver.InitDriver();
 | 
			
		||||
  Assign(MouseLog,logFileName);
 | 
			
		||||
  Rewrite(MouseLog);
 | 
			
		||||
  Active:=True;
 | 
			
		||||
  StartMouseLogging;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
Procedure LogDoneMouse;
 | 
			
		||||
 | 
			
		||||
begin
 | 
			
		||||
  StopMouseLogging;
 | 
			
		||||
  Close(MouseLog);
 | 
			
		||||
  Active:=False;
 | 
			
		||||
  OldMouseDriver.DoneDriver();
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
Procedure SetMouseLogFileName(FileName : String);
 | 
			
		||||
 | 
			
		||||
begin
 | 
			
		||||
  If Not Active then
 | 
			
		||||
    LogFileName:=FileName;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
Initialization
 | 
			
		||||
  GetMouseDriver(OldMouseDriver);
 | 
			
		||||
  NewMouseDriver:=OldMouseDriver;
 | 
			
		||||
  NewMouseDriver.GetMouseEvent:=@LogGetMouseEvent;
 | 
			
		||||
  NewMouseDriver.InitDriver:=@LogInitMouse;
 | 
			
		||||
  NewMouseDriver.DoneDriver:=@LogDoneMouse;
 | 
			
		||||
  LogFileName:='Mouse.log';
 | 
			
		||||
  Logging:=False;
 | 
			
		||||
  SetMouseDriver(NewMouseDriver);
 | 
			
		||||
end.  
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user