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