Je sous sous W10, avec Delphi 6 Personal Edition.

Je veux récupérer les coordonnées de la région d'un contrôle Delphi, dans une DLL, à partir de son handle. Et je n'arrive pas à faire marcher l'API GetWindowRgn qui me retourne systématiquement ERROR.

Voici une simulation avec un code Delphi trivial, juste pour mettre le problème en évidence. Créer un projet VCL, placer un TEDIT et un TBUTTON sur la form, et changer le source comme suit:
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
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: HRGN;
  rr: TRect;
begin
  rgn := CreateRectRgn(0,0,0,0);
  if GetWindowRgn(Edit1.Handle,rgn)=ERROR then showmessage('error');
  GetRgnBox(rgn,rr);
  showmessage(format('%d,%d/%d,%d',[rr.Left,rr.Top,rr.Right,rr.Bottom]));
end;
 
end.
J'ai toujours le message "error", et, évidemment, GetRgnBox ne peut retourner que les valeurs données dans CreateRectRgn.

Question: pourquoi GetWindowRgn ne veut pas marcher ? C'est pourtant banal... Si j'utilise l'API GetWindowRect, j'ai les bonnes valeurs. Mais je veix passer par la gestion des régions dans le cadre de mon projet, pour d'autres raisons.

Qu'est-ce que je n'ai pas compris ?