Bonjour,
Une fois de plus, je fais appel à ceux qui savent élucider les anomalies !!!
J'ai un programme (pas celui donné plus loin, car trop volumineux) qui affiche à l'écran une Tform (qui n'est pas la principale) dont la position est variable selon divers facteurs. Le changement de position sur l'écran n'est pas géré manuellement, mais dépend de calculs et de timers.
L'anomalie se produit dans le cas suivant :
Le pointeur de la souris est en dehors de n'importe quelle Tform de l'application : il pointe sur le fond d'écran. On déplace alors la souris en appuyant sur son bouton gauche. Ceci trace sur l'écran un rectangle en pointillé, ce qui est normal. Mais, lorsqu'on relache le bouton de la souris, le rectangle reste tracé sur l'écran au lieu de disparaître. On peut avoir ainsi un grand nombres de ces traces anormales qui subsistent sur l'écran (tant qu'une autre fenêtre n'est pas passée au dessus des traces résiduelles, ou qu'on n'a pas fait une reconstruction de bureau).
Le petit programme suivant permet de reproduire cette anomalie. il comporte deux Tforms et un Ttimer.
Code de Unit1 :
Code le Unit2:
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 var Form1: TForm1; implementation uses Unit2; {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin form1.width:=200; form1.height:=200; form1.left:=0; form1.top:=0; timer1.interval:=500; timer1.enabled:=true; end; procedure TForm1.Timer1Timer(Sender: TObject); begin form2.left:=300+random(400); form2.top:=200+random(200); end; end.
Lorsque l'application tourne, Form2 change aléatoirement de position sur l'écran.
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 var Form2: TForm2; implementation {$R *.DFM} procedure TForm2.FormCreate(Sender: TObject); begin form2.width:=200; form2.height:=100; form2.visible:=true; end; end.
Amener le pointeur de souris hors de Form1 et Form2 (c'est à dire sur le fond d'écran). Apuyer sur le bouton gauche de la souris, déplacer la souris, relacher le bouton. Recommencer plusieurs fois. Il reste sur l'écran des traces qui ne disparaissent pas.
Et encore plus fort : Si on déclare Form2.visible:=false, l'anomalie se produit encore de la même façon, alors bien que rien ne bouge sur l'écran.
Partager