Bonjour à tous,
J'ai 3 petites questions, toutes sur les tooltips
je travaille sur BCB6
je voudrais savoir si c'est possible d'afficher un tooltip (bulle d'aide) sur le titre d'une fenetre, sur un onglet ou sur un élément dans un TreeView.
Merci.
Bonjour à tous,
J'ai 3 petites questions, toutes sur les tooltips
je travaille sur BCB6
je voudrais savoir si c'est possible d'afficher un tooltip (bulle d'aide) sur le titre d'une fenetre, sur un onglet ou sur un élément dans un TreeView.
Merci.
Je n'ai pas de réponse direct, mais tu peux regarder du côté de EM_SHOWBALLOONTIP avec un SendMessage, malheureusement je crois que sa fonctionne seulement avec des TEdit.
c'est tout simple..
dans la proriété Hint du composant, tu mets le text que tu veux afficher.
et tu mets la propriété ShowHint à true.
en revanche, pour les onglets, cela ne fonctionnera que lorsque tu survolera la page.
A+
j'ai regardé pour EM_SHOWBALLOONTIP en effet ca concerne les edits
en ce qui concerne le Treeview j'arrive à afficher le hint sans soucis mais ce que je souhaiterais c'est afficher un hint différent suivant l'item survolé dans le treeview
j'ai vu que c'était possible pour une ListView malheureusement les événement pour les 2 objets ne sont pas similaire du coup ca marche pas
merci pour les réponses mais tout ça me conforte dans l'idée que ce n''est pas facile à mettre en place![]()
En utilisants les messages sur cette page tu devrais sans doute être capable de faire ce que tu veux:
http://msdn.microsoft.com/library/de...ip/reflist.asp
Bonsoir,
A mon humble avis, pour déclencher l'apparition d'une bulle d'aide lors du passage de la souris sur le titre d'une fenêtre, il te faut rajouter le contrôle d'un message a la fenêtre a l'aide de BEGIN_MESSAGE_MAP et capter le message WM_NCMOUSEMOVE.
@ +![]()
j'ai regardé BEGIN_MESSAGE_MAP et WM_NCMOUSEMOVE mais je débute avec BCB6 et je ne vois pas comment il faut s'en servir.
De même le Message TTM_NEWTOOLRECT semblerait convenir pour ce que j'ai à faire mais la aussi je pèche par manque d'expérience quelqu'un peut il éclairer ma lanterne...
merci
Bonsoir,
J'ai commencé a bosser sur une solution, me reste a déclencher la 'bulle d'aide' puisque l'interception des messages se passe bien de mon côté.
Je poste cela dès que possible, ou au moins qq chose pour servir de 'piste' quoi ...
@+![]()
Bonsoir,
Une idée, pas parfaite mais qui pourrais constituer une piste tout de même.
.on défini la zone correspondant au titre de la fenêtre, qui réagira lors du survol par la souris
.on crée une petite fenêtre a 'customiser' pour afficher.
(pas parfait, tout de même)
.dans le .h, en private
.dans le .cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 void __fastcall OnNCMOUSEMOVE(TMessage& msg);//on gigote la souris au dessus de la zone non cliente //pour capter le message dans la zone non cliente BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_NCMOUSEMOVE,TMessage,OnNCMOUSEMOVE) END_MESSAGE_MAP(TForm) TRect zrect; //pour la zone du caption de la TForm //pour la création de la fenêtre HWND hwndTT; WNDCLASSEX *principale;
PS : dans le OnMouseMove de la TForm, je rajoute:
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
48
49
50
51
52
53
54
55 void __fastcall TForm2::FormCreate(TObject *Sender) { //definition de la zone du caption de la fenêtre GetWindowRect(this->Handle, &zrect); int wRect = this->Canvas->TextExtent(this->Caption).cx; int hRect = GetSystemMetrics(SM_CYSMICON);//pour la hauteur de la zone //je prends celle d'un petit icone int posLeft = GetSystemMetrics(SM_CXSMICON); zrect.left = posLeft; zrect.right = posLeft + wRect; zrect.bottom = hRect; //fenêtre 'perso' principale = new tagWNDCLASSEXA; principale->cbSize = sizeof(WNDCLASSEX); principale->style = CS_HREDRAW|CS_VREDRAW; principale->lpfnWndProc = DefWindowProc; principale->cbClsExtra = 0; principale->cbWndExtra = 0; principale->hInstance = this->Handle; principale->hIcon = NULL; principale->hCursor = LoadCursor(NULL,IDC_ARROW); principale->hbrBackground = reinterpret_cast< HBRUSH >(COLOR_WINDOW+1); principale->lpszMenuName = NULL; principale->lpszClassName = "MouseInfo"; principale->hIconSm = NULL; RegisterClassEx(principale); } //traitement du message dans la zone non cliente void __fastcall TForm2::OnNCMOUSEMOVE(TMessage& msg) { TPoint mousepos = Mouse->CursorPos; if (hwndTT == NULL) { hwndTT = CreateWindowEx(WS_EX_TOOLWINDOW,"MouseInfo","Info souris", TTS_ALWAYSTIP | WS_EX_STATICEDGE, zrect.left + 2, zrect.bottom + 2, 110, 50, NULL, (HMENU) NULL, this->Handle, NULL); } if (mousepos.y < zrect.bottom) { if (mousepos.x > zrect.left && mousepos.x < zrect.right) { ShowWindow(hwndTT, SW_SHOW); String S = "Souris sur zone !"; HDC hdc; hdc = GetDC(hwndTT); TextOut(hdc, 0, 2, S.c_str(), S.Length()); } else { ShowWindow(hwndTT, SW_HIDE); } } this->DefaultHandler(&msg); }
Bien que l'on pourrais utiliser un Timer, histoire de la faire disparaitre en temps voulu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 void __fastcall TForm2::FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { if (hwndTT != NULL) { ShowWindow(hwndTT, SW_HIDE); } }
A travailler, certes ...
En espérant t'aider,
@ +![]()
Nickel!! Il y a 2 ou 3 petits trucs à changer, je travaille dessus, mais sur le principe c'est ça.
merci beaucoup![]()
@+
Cool ... maintenant, si tu en as la possibilité, une fois que tu as obtenu ce que tu voulais en terme d'affichage de fenêtre, poster le code.
Histoire de voir comment tu as procédé, ça peut servir ... même a moi !![]()
Bon courage,
@ +![]()
Ok pas de problème je le posterais par contre ça pourra mettre un peu de temps vu que je passe sur autre chose, je n'ai pas le temps de faire ça bien pour le moment, mais comme c'est à faire...
merci encore
@+
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager