Bonjour,
J'utilise Delphi5.
Je voudrai savoir comment afficher un infobulle sur chaque élément du stautsBar .
Merci
Version imprimable
Bonjour,
J'utilise Delphi5.
Je voudrai savoir comment afficher un infobulle sur chaque élément du stautsBar .
Merci
Comme bien d'autre cas, il faut trouvé l'objet sous la souris pour changer
le hint du control en conséquence...
Code:
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 //*********************************************************************** //*** OnMouseMouve du status bar... Procedure TForm1.StatusBar1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); Var i: integer; dx: integer; Begin //retrouve le panel sous la souris dx := 0; With StatusBar1 Do Begin For i := 0 To StatusBar1.Panels.Count - 1 Do Begin //augmente dx de chaque largeur de pannel de gauche à droite... dx := dx + Panels.Items[i].Width; //le dernier panel prend tout le reste //donc fix dx égale à la largeur de la status bar If i = Panels.Count - 1 Then dx := Width; //cherche sous quel pannel la souris est située If x < dx Then Begin Case i Of 0: Hint := 'Premier panel'; 1: Hint := '2ème panel'; 2: Hint := '3ème panel'; Else Hint := 'Oups! Ajout d''un panel mais oublié le hint!'; End; //on a trouvé le panel alors on sort d'ici! break; End; End; End; End;
Merci ça marche.
Autre soucis, les hints ne s'affichent qu'après un click sur le panel.
par hasard
StatusBar1.OnMoseMove
Code:StatusBar1.Setfocus
J'ai mis le code proposé au début de la procédure, mais ça n'a pas changé .
mettez un ApplicationEvents sur votre fiche et dans
OnShowHint mettez le code suivant.
on enlevez bien sûr le code du OnMouseMouve du status bar proposé plus haut....Code:
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 Procedure TForm1.ApplicationEvents1ShowHint(Var HintStr: String; Var CanShow: Boolean; Var HintInfo: THintInfo); Var i: integer; dx: integer; Begin //Verifie si c'est le status bar qui veut montrer un Hint... If HintInfo.HintControl.ClassName = 'TStatusBar' Then Begin //retrouve le panel sous la souris dx := 0; With (HintInfo.HintControl) as TStatusBar Do Begin For i := 0 To Panels.Count - 1 Do Begin //augmente dx de chaque largeur de pannel de gauche à droite... dx := dx + Panels.Items[i].Width; //le dernier panel prend tout le reste //donc fix dx égale à la largeur de la status bar If i = Panels.Count - 1 Then dx := Width; //cherche sous quel pannel la souris est située If (HintInfo.HintPos.x - self.Left) < dx Then Begin Case i Of 0: Hint := '1Premier panel'; 1: Hint := '2ème panel'; 2: Hint := '3ème panel'; Else Hint := 'Oups! Ajout d''un panel mais oublié le hint!'; End; HintInfo.HintStr := Hint; // Force le rafraichissement du Hint à tous les.... HintInfo.ReshowTimeout := 500; //ms break; End; End; End; End; End;
Merci