[Up] |
The mouse unit has support for adding a custom mouse driver. This can be used to add support for mouses not supported by the standard Free Pascal 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.
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.