Download Now
Forums

    Cross Codebot Example: Magnify

    Here is an example of a how to create simple screen magnifier utility using the Cross Codebot library. The application creates a small magnifier window which follows your mouse cursor. There's room for improvement with the application, such as moving the magnifier window when the mouse nears the screen edges, but overall was very easy to create.


    Source Code

    Below is a listing of the magnify application Main unit file.

    unit Main;
    
    {$mode delphi}
    
    interface
    
    uses
      Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
      Codebot.Graphics,
      Codebot.Graphics.Types,
      Codebot.Input.MouseMonitor;
    
    { TMainForm }
    
    type
      TMainForm = class(TForm)
        Timer: TTimer;
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure TimerTimer(Sender: TObject);
      private
        FSplash: ISplash;
        FDesktop: ISurface;
        procedure Capture(X, Y: Integer);
        procedure MouseNotify(Kind: TMouseNotifyKind; Button: TMouseButton; X,
          Y: Integer);
      end;
    
    var
      MainForm: TMainForm;
    
    implementation
    
    {$R *.lfm}
    
    { TMainForm }
    
    procedure TMainForm.FormCreate(Sender: TObject);
    begin
      FDesktop := NewSurface(TCanvas(nil));
      FSplash := NewSplash;
      FSplash.Bitmap.SetSize(200, 200);
      with Mouse.CursorPos do
      begin
        Capture(X, Y);
        FSplash.Move(X + 40, Y + 40);
      end;
      FSplash.Visible := True;
      MouseMonitor.Add(MouseNotify);
      Timer.Enabled := True;
    end;
    
    procedure TMainForm.FormDestroy(Sender: TObject);
    begin
      Timer.Enabled := False;
      MouseMonitor.Remove(MouseNotify);
    end;
    
    procedure TMainForm.TimerTimer(Sender: TObject);
    begin
      with Mouse.CursorPos do
        Capture(X, Y);
    end;
    
    procedure TMainForm.Capture(X, Y: Integer);
    var
      B: ISurface;
      R: TRectI;
    begin
      R := FSplash.Bitmap.ClientRect;
      R.Offset(X - 100, Y - 100);
      R.Inflate(-66, -66);
      B := FSplash.Bitmap.Surface;
      B.Clear(clBlack);
      FDesktop.CopyTo(R, B, FSplash.Bitmap.ClientRect, $FF, rqLowest);
      B.StrokeRect(NewPen(clBlack), FSplash.Bitmap.ClientRect);
      FSplash.Update;
    end;
    
    procedure TMainForm.MouseNotify(Kind: TMouseNotifyKind; Button: TMouseButton; X, Y: Integer);
    begin
      if Kind = nkMove then
        FSplash.Move(X + 40, Y + 40);
    end;
    
    end.