| 12
 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