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
| unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
rgn, rgn2: HRGN;
rr, rr2: TRect;
begin
rgn := CreateRectRgn(0,0,0,0); // créer une région vide
if GetWindowRgn(Edit1.Handle,rgn)=ERROR then begin // tenter de récupérer la région de l'objet
// ici, on sait que l'objet visé n'a PAS ENCORE de région Windows
GetWindowRect(Edit1.Handle,rr); // récupérer le rectangle de l'objet
rgn := CreateRectRgn(0,0,rr.Right-RR.Left+1,rr.Bottom-RR.Top+1); // créer une région à partir du rectangle
SetWindowRgn(Edit1.Handle,rgn,true); // imposer cette région à l'objet
rgn := CreateRectRgn(0,0,0,0); // ecréer une région vide
if GetWindowRgn(Edit1.Handle,rgn)=ERROR then showmessage('error'); // et récupérer la vraie région
GetRgnBox(rgn,rr2); // récuperer le rectangle de la région
showmessage(format('%d,%d/%d,%d',[rr2.Left,rr2.Top,rr2.Right,rr2.Bottom])); // cette fois, les résultats sont bons !
// on va utiliser cette région, juste pour une démonstration:
rgn2 := CreateRectRgn(2,2,rr2.Right-rr2.Left+1-2,rr2.Bottom-rr2.Top+1-2); // créer une région SANS les bordures
SetWindowRgn(Edit1.Handle,rgn2,true); // imposer cette région à l'objet
DeleteObject(rgn); // libérer la région qui ne sert plus
end;
end;
end. |
Partager