Bonjour à toutes et à tous,
Je souhaite recoder sous Lazarus une application que j'avais développée avec Delphi afin qu'elle puisse fonctionner aussi sous Linux. Mais je tombe sur un gros nosnos.
Le comportement de la souris sur le onMouseUp est différent sous Windows et sous Linux (je l'ignore sous MacOS). Je m'explique, testez le code suivant :
Placez un SpeedButton sur une Form et attachez aux évènements onMouseUp de la Form et du SpeedButton les méthodes ci-dessus. Exécutez sous Windows et sous Linux.
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
39
40
41
42
43
44
45
46
47 unit TestUp; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Buttons; type { TForm1 } TForm1 = class(TForm) SpeedButton1: TSpeedButton; procedure FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure SpeedButton1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { private declarations } public { public declarations } end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.SpeedButton1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ShowMessage('Bouton Up'); end; procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ShowMessage('Fond Up'); end; end.
Constat :
Sous Windows : si je clique sur le bouton, que je reste appuyé sur la souris et que je me déplace hors du bouton, lorsque je relâche la souris, c'est l'évènement appartenant à la souris qui est déclenché,
Même manip sous Linux : au relâché de la souris, c'est l'évènement appartenant à la Form qui est déclenché.
Je ne cherche pas à savoir qui a raison ou tort, mais dans de telles conditions, comment assurer la portabilité entre les deux environnements ?
Y a-t-il un moyen d'harmoniser ces comportements ?
Merci de votre aide.
Pierre
Partager