1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
   |  
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Zoom.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  Form1->BorderStyle = bsNone;
  Form1->FormStyle = fsStayOnTop; // mettre la Form toujours au premier plan
  // Par défaut la loupe est en haut à droite
  Top = 20;
  Left = Screen->Width - Width - 20;
  Zoom = 3; // valeur de l'agrandissement par default au demarrage
  Application->Title = "Loupe";
  Timer1->Interval = 150;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
// Timer1 interval = 150
HDC DC;
int x;
int y;
  // Création d'un contexte d'affichage non lié à une fenêtre
  // donc permet d'accéder à l'écran entier
  DC = CreateDC("DISPLAY", NULL, NULL, NULL);
//  With PaintBox1 Do Try
    // prise du point de référence de la souris
    x = Mouse->CursorPos.x;
    y = Mouse->CursorPos.y;
    // limitations de la zone pour ne pas sortir de l'écran
if(x >= (Screen->Width - ClientWidth / Zoom))
{
x = (Screen->Width - ClientWidth / Zoom) - 1;
}
if(y >= (Screen->Height - ClientHeight / Zoom))
{
y = (Screen->Height - ClientHeight / Zoom) - 1;
}
    // Copie d'une partie de l'écran dans la boite à peindre
StretchBlt(PaintBox1->Canvas->Handle // Copie vers le canevas de la boite
               , 0                      //       vers X=0
               , 0                      //       et   Y=0
               ,(ClientWidth * Zoom) - 1  // en multipliant par Zoom la largeur
               ,(ClientHeight * Zoom) - 1  // en multipliant par Zoom la hauteur
               ,DC                     // Copie à partir du canevas global
               ,x - 5                     //       de la position de la souris
               ,y - 10                     //       ...
               ,ClientWidth            //       sur la taille de la boite
               ,ClientHeight           //
               ,SRCCOPY);              // Simple copie sans autre effet.
SetForegroundWindow(DC); // mettre la Form toujours au premier plan
    // ne pas ouvbier de libérer le contexte, c'est une ressource rare.
    DeleteDC (DC);
  // Mettre la fenêtre au premier plan
Show();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PaintBox1MouseUp(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
if(Button == mbRight)
{
  // Femeture de la fenêtre sur un click droit.
  Close();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
if(Button == mbLeft)
{
  // Astuce pour déplacer facilement un WinControl ou descendant
  // ( Merci à DelphiProg qui l'a donnée dans le forum il y a un bout de temps...)
    ReleaseCapture();
    Perform(WM_SYSCOMMAND, 0xF012, 0);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
if(Key == VK_SUBTRACT)
        {
        Zoom = Zoom - 1;
        if(Zoom <= 1)
        {
        Zoom = 1;
        }
        }
if(Key == VK_ADD)
        {
        Zoom = Zoom + 1;
        if(Zoom >= 10)
        {
        Zoom = 10;
        }
        }
if(Key == VK_ESCAPE)
        {
        // Femeture de la fenêtre sur un click droit.
          Close();
        }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
if(Button == mbRight)
{
  // Femeture de la fenêtre sur un click droit.
  Close();
}
}
//--------------------------------------------------------------------------- | 
Partager