Bonsoir
Voici une petite loupe qui s'affiche en haut a droite de l'ecran et que l'on peut deplacer, qui reste au premier plan, un click gauche sur la bordure permet de la deplacer, un click droit ou Echap arrete le programme, l'appui sur les touche " - " et " + " modifie le Zoom de 1 a 10
c'est une adaptation d'une source en Delphi
le .cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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();
}
}
//---------------------------------------------------------------------------
le .h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
//---------------------------------------------------------------------------
#ifndef ZoomH
#define ZoomH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
        TTimer *Timer1;
        TPaintBox *PaintBox1;
        void __fastcall FormCreate(TObject *Sender);
        void __fastcall Timer1Timer(TObject *Sender);
        void __fastcall PaintBox1MouseUp(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y);
        void __fastcall FormMouseDown(TObject *Sender, TMouseButton Button,
          TShiftState Shift, int X, int Y);
        void __fastcall FormKeyDown(TObject *Sender, WORD &Key,
          TShiftState Shift);
        void __fastcall FormMouseUp(TObject *Sender, TMouseButton Button,
          TShiftState Shift, int X, int Y);
private: // User declarations
public:  // User declarations
        __fastcall TForm1(TComponent* Owner);
        int Zoom;
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif