2
0
Эх сурвалжийг харах

+ Added custom mouse driver example

michael 24 жил өмнө
parent
commit
4a60fc968b

+ 9 - 1
docs/mouse.tex

@@ -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}

+ 3 - 2
docs/mouseex/Makefile

@@ -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))
 

+ 2 - 0
docs/mouseex/README

@@ -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 - 0
docs/mouseex/logmouse.pp

@@ -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.