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:
J'ai toujours le message "error", et, évidemment, GetRgnBox ne peut retourner que les valeurs données dans CreateRectRgn.
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.
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 ?
Partager