PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Redimension et Synchro de la largeur d'une colonne.
Redimension et Synchro de la largeur d'une colonne.
Débuté par Michel Lahellec, 03 nov. 2004 19:01 - 4 réponses
Posté le 03 novembre 2004 - 19:01
Mon appli demande de maintenir deux tables équivalentes visuellement.

J'arrive (grace à l'aide de ce groupe) à synchroniser l'ascenceur horizontal.
POur la taille des colonnes, n'ayant pas trouvé une solution pure API, je viens capturer l'événement Resize d'une colonne avec le code:
Evénement("MouvementColonne","Table_TBL_Dona",1743).
Cela fonctionne bien.Au niveau de ma table: le code de la fonction:

FONCTION MouvementColonne(Message, wParam, lParam)

Table_TBL_Dona1[1][lParam+1]..Largeur=Table_TBL_Dona[1][lParam+1]..Largeur

Le problème, c'est que lorsque on effectue un tri, et qu'on se positionne sur les dernières lignes de la table, le code plante abvec le message:

Erreur à la ligne 3 du traitement Procédure locale MouvementColonne.
L'indice spécifié [1] est invalide.
Table_TBL_Dona utilise un fichier ou une requête comme source de données.
Seuls les éléments visibles sont disponibles en programmation.

Merci du coup de main.
Michel
Posté le 04 novembre 2004 - 11:49
Je fais quelquechose d'un peu similaire, mais avec la "visibilité" des colonnes:
Dans l'initialisation d'une table, j'ai le code suivant:

NumeroColonne est un entier
NomColonne est une chaîne

POUR NumeroColonne = 1 A MoiMême..NombreColonne
NomColonne = TableEnumèreColonne(MoiMême,NumeroColonne)
SI ChampExiste("tableproduits." + NomColonne) ALORS
{MoiMême..Nom + "." + NomColonne}..Visible = {"tableproduits." + NomColonne}..Visible
FIN
FIN

Donc dans ton cas, je pense que tu peux faire:

NumeroColonne est un entier
NomColonne est une chaîne

POUR NumeroColonne = 1 A Table_TBL_Dona..NombreColonne
NomColonne = TableEnumèreColonne(Table_TBL_Dona,NumeroColonne)
{"Table_TBL_Dona1." + NomColonne}..largeur = {"Table_TBL_Dona." + NomColonne}..Largeur
FIN


Frédéric.
Posté le 05 novembre 2004 - 01:05
Merci de la proposition de code...
Cela fonctionne.
RÉFLEXIONS PERSONELLES.
IL y a deux problèmes sur l'objet Table.

1-si on utilise une technique à base de :MaTable[1][N° de colonne]..Largeur, il faut que la ligne 1 soit active, ou visible, sinon cela plante.
2-Si on utilise une technique de code avec MaTable(Table_TBL_Dona, tiNumLigne + tiOrigineEcran, x, y), pour récupérer le n° de ligne, si l'usager commence à faire des redimentionnement en fin de table, là où il n'y a plus de données, il n'y a plus non plus d'info colonne ni lignes.
Dans ce cas, votre cote, très systématique fonctionne.

N.B. Je débute en Windev, venant de VB. Il me semble qu'il manque une propriété NumLigneActive... Peut-être existe t'elle?
Ceci étant, j'ai beaucoup de plaisir avec Windev, je trouve les interfaces plus "sexy", si on peut dire.
Posté le 05 novembre 2004 - 10:06
Salut !

On 5-Nov-2004, "Michel Lahellec" <kerloic.armor@sympatico.ca> wrote:

Merci de la proposition de code...
Cela fonctionne.
RÉFLEXIONS PERSONELLES.
IL y a deux problèmes sur l'objet Table.

1-si on utilise une technique à base de :MaTable[1][N° de
colonne]..Largeur, il faut que la ligne 1 soit active, ou visible, sinon
cela plante.
2-Si on utilise une technique de code avec MaTable(Table_TBL_Dona,
tiNumLigne + tiOrigineEcran, x, y), pour récupérer le n° de ligne, si
l'usager commence à faire des redimentionnement en fin de table, là où il
n'y a plus de données, il n'y a plus non plus d'info colonne ni lignes.
Dans ce cas, votre cote, très systématique fonctionne.

N.B. Je débute en Windev, venant de VB. Il me semble qu'il manque une
propriété NumLigneActive... Peut-être existe t'elle?
Ceci étant, j'ai beaucoup de plaisir avec Windev, je trouve les interfaces
plus "sexy", si on peut dire.


Elle est implicite ... C'est la valeur par défaut retournée par MaTable.
Si la ligne active de la Table "MaTable" est 3, MaTable renvoie 3 ...
MaTable[MaTable,1] renvoie le contenu de la première colonne de la ligne
active

Bien à toi !

--
Marcel Berman
c/o Managing Business SPRL
Allée du Petit Paris, 11
B - 1410 - Waterloo
Tel : +32 2 351.60.64
Fax : +32 2 351.45.78
Gsm : +32 475.799.477
Posté le 05 novembre 2004 - 15:49
Merci du code.
Oui, effectivement la premiere valeur retournée est le n° de ligne.
Cependant le problème reste le même avec les fins de tables, là où les lignes sont vides.
On ne peut y entrer, donc on ne récupère pas de n° de ligne, par contre on peut les redimentionner, et du coup, pour récupérer la ligne active, cela coince.

Il ne faudrait pas que la table ramène des lignes vides.

Je vais essayer d'écrire un résumé de tous ces détails (que je récupère sur ce forum ) sur l'objet Table, parce que vraiment, il manque de documentation claire sur le sujet.
Bonne journée