Message de rapport:
 

Re: Champ Table et texte multi ligne

Sujet: Re: Champ Table et texte multi ligne
par drcharly93 sur 21/7/2006 18:32:43

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.
Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2