Bonjour,
En analysant un peu les evenements de Windows on peu arriver à simuler une pseudo bulle lorsque cela est nécessaire.
pour commencer on branche deux événements
Evénement("SurvolTable","TABLE",160)
Evénement("SurvolObjet","frmtest.*",512)
Le premier '160' est déclenché sur le survol des libellées des colonnes
le second '512' pour détecter le sortie des entêtes de colonnes.
on créer un libellé avec look bulle que l'on paramètre en non visible(ici txtBulle)
La table s'appel 'TABLE'
premier événement branché sur la fonction SurvolTable
PROCEDURE SurvolTable(pMessage, wParam, lParam)
x est un entier
y est un entier
nCol est un entier
Ind est un entier
sCol est une chaîne
nPosXEcran est un entier
nPosYEcran est un entier
nTailleTexteEnPixel est un entier
nPosXEcran = PoidsFaible(CurseurPos(cpClient))
nPosYEcran = PoidsFort(CurseurPos(cpClient))
x = nPosXEcran - TABLE..X
y = nPosYEcran - TABLE..Y
POUR Ind = 1 A TableOccurrence(TABLE,toColonne) //On parcours les colonnes de la table
sCol = TableEnumèreColonne(TABLE,Ind) //On récupère le nom de la colonne selon son indice
//si la position x de la souris se situe dans les entête de colonne
SI x >= {sCol,indChamp}..X ET x <= ({sCol,indChamp}..X + {sCol,indChamp}..Largeur) ALORS
//On récupère la taille approximative du texte vaudrait mieux voir l'api 'GetTextMetrics'
nTailleTexteEnPixel = TexteLargeur(txtBulle,{sCol,indChamp}..Libellé)
//Si le texte plus grand que la colonne on rend le libellé visible
SI nTailleTexteEnPixel*1.1 < {sCol,indChamp}..Largeur ALORS
txtBulle..Visible = Faux
SINON
txtBulle..Visible = Vrai
FIN
//On renseigne valeurs et position de la pseudo bulle
txtBulle = {sCol,indChamp}..Libellé
txtBulle..X = x + TABLE..X
txtBulle..Y = y + TABLE..Y
txtBulle..Largeur = nTailleTexteEnPixel*1.1
FenRepeint(frmTest)
RETOUR
FIN
FIN
le deuxieme événement permet de rendre le libellé invisible si on est sorti des entêtes de colonne de la table
PROCEDURE SurvolObjet( pMessage, wParam, lParam )
x est un entier
y est un entier
nPosXEcran est un entier
nPosYEcran est un entier
bVisible est un booléen = Faux
nPosXEcran = PoidsFaible(CurseurPos(cpClient))
nPosYEcran = PoidsFort(CurseurPos(cpClient))
x = nPosXEcran - TABLE..X
y = nPosYEcran - TABLE..Y
//On teste si on est sorti des entêtes de colonne de la table
SI nPosYEcran >= TABLE..Y ALORS
SI nPosYEcran <= TABLE..Y + TABLE..HauteurLigne ALORS
SI nPosXEcran >= TABLE..X ALORS
SI nPosXEcran <= TABLE..X + TABLE..Largeur ALORS
RETOUR
FIN
FIN
FIN
FIN
txtBulle..Visible = Faux
Ceci est un code simpliste et serait plus propre et surtout plus portable si cela état intégrée dans une classe ou on aurait plus qu'a lui passer en paramètre le nom du libellé pseudo bulle et le nom de la table.