IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

[Table] Positionner un bouton par rapport à une ligne sélectionnée


Sujet :

WinDev

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 42
    Points : 26
    Points
    26
    Par défaut [Résolu] Positionner un bouton par rapport à une ligne sélectionnée
    Hello tous,

    Attention casse-tête !

    Le but est de pouvoir afficher un bouton juste à côté d'une ligne sélectionnée dans une table. Jusque là rien de très méchant.
    Le problème est que cette table n'a pas de longueur fixe. C'est à dire que sa taille varie en fonction du nombre d'enregistrement qu'elle contient.
    Contrainte supplémentaire, cette table doit évidemment stopper sa croissance au bon moment pour ne pas sortir du cadre dans lequel elle se trouve. Lorsqu'elle atteint cette taille maximale, un ascenseur doit apparaître pour permettre de consulter les enregistrements supplémentaires tout en gardant cette taille maximale.

    Pour être plus concret, cette table représente un bon d’achat et elle contient les articles que le client compte acheter. Lorsqu’il passe à la caisse, ses article sont scannés et ajouté à la table à chaque fois.

    Le bouton qui doit s’afficher à côté de la ligne sélectionnée permet de supprimer l’article voulu.



    Voici le code qui me permet d’afficher le bouton à côté de la ligne sélectionnée dans la table. Celui-ci s’exécute lors de la sélection d’une ligne dans cette table donc.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    VraiPos est un entier = TableSelect(TABLE_Commande) - (TableOccurrence(TABLE_Commande) - TableHmax)
     
    SI TableOccurrence(TABLE_Commande) > TableHMax ALORS
    	FEN_AchatConso.BTN_SupprimeArticle..Y = BtnSupprimeYInit + TableHauteurLigne * VraiPos
    SINON
    	FEN_AchatConso.BTN_SupprimeArticle..Y = BtnSupprimeYInit+ TableHauteurLigne * TableSelect(TABLE_Commande)
    FIN
    TableHMax est le nombre maximum de ligne que peut afficher la table simultanément (sans ascenseurs donc)
    VraiPos permet de connaître la vraie position de la ligne dans la table, même si celle-ci dépasse sa longueur maximale (apparition des ascenseurs). Pour cela je soustrait le nombre de ligne se trouvant « hors » de la table au table select de la ligne en cours.
    BtnSupprimeYInit est la position initiale du bouton supprimer en Y (lorsque la table vaux 1 donc)

    Tout marche à merveille avec ce code mais… uniquement lorsque le dernier enregistrement est visible… C’est logique car lorsque l’on remonte vers le haut dans la table avec les ascenseurs, VraiPos n’indique plus du tout la position réelle étant donné que le nombre que je soustrais au table select est le nombre maximum d’enregistrement pouvant se trouver hors de la table !

    Comment faire pour savoir ou l’on se trouve dans la table ? Y a-t-il moyen de savoir quand l’utilisateur remonte l’ascenseur de la table ? Ou le descend ? Idem avec la roulette ?

    Merci de votre recherche et à bientôt j’espère !

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Points : 32 889
    Points
    32 889
    Par défaut
    Citation Envoyé par DrWilly
    Le bouton qui doit s’afficher à côté de la ligne sélectionnée permet de supprimer l’article voulu.
    Ce n'est qu'une façon de voir les choses
    Le bouton "Supprimer" ne se trouve pas forcément à côté de la ligne, mais avec les autres boutons de la page.

    Plutôt que de te casser la tête pour positionner le bouton, rend-le visible lorsqu'une ligne est sélectionnée par ex.

    Sinon, tu peux utiliser TableInfoXY ()

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 42
    Points : 26
    Points
    26
    Par défaut
    Mais cela implique de créer dynamiquement un bouton pour chaque ligne du tableau alors non ?
    c'est une bonne idée oui... Mais je n'aime pas multiplier les boutons.

    Quoi qu'il en soit ce sera déjà plus éfficace que ma première methode.
    Merci !

    Sinon pour cette fonction TableInfoXY, cela renvoie des informations relatives au tableau en fonction des coodronnées des lignes de celui-ci, n'y a-t-il pas une fonction qui permet le contraire ? Connaitre les coordonnées d'une ligne à partir d'informations du tableau ?

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Points : 32 889
    Points
    32 889
    Par défaut
    Citation Envoyé par DrWilly
    Mais cela implique de créer dynamiquement un bouton pour chaque ligne du tableau alors non ?
    Non
    L'idée est de récupérer le N° de la ligne sélectionnée et de supprimer cette ligne via un bouton unique.

    Comme cela se fait sur les fenêtres standards de WD.
    Crée une fenêtre sur table, tu verras

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 42
    Points : 26
    Points
    26
    Par défaut
    Merci Guardian pour cette réponse mais malheureusement cela ne fait que contourner le problème sans le résoudre... Ce sera sans doute nécéssaire tu me dira mais pour le moment je n'ai pas perdu espoir.

    Voici donc le code qui me permet de positionner le bouton pour le moment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    VraiPos est un entier = TableSelect(TABLE_Commande) - (TableOccurrence(TABLE_Commande) - TableHmax)
     
    SI TableOccurrence(TABLE_Commande) > TableHMax ALORS
    	FEN_AchatConso.BTN_SupprimeArticle..Y = BtnSupprimeYInit + TableHauteurLigne * VraiPos
    SINON
    	FEN_AchatConso.BTN_SupprimeArticle..Y = BtnSupprimeYInit+ TableHauteurLigne * TableSelect(TABLE_Commande)
    FIN
    Problème : Ce code n'est pas du tout satisfaisant pour la simple et bonne raison qu'il ne fait pas de différance entre les lignes hors de la table au dessus et en dessous de celle-ci. Je veux dire par la que tout marche niquel uniquement à partir du moment où, si l'ascenseur vertical est apparu, l'on se trouve sur le dernier enregistrement de la table.

    Expliquons en detail le code pour mieux comprendre. Le problème se situe ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    VraiPos est un entier = TableSelect(TABLE_Commande) - (TableOccurrence(TABLE_Commande) - TableHmax)
    TableHMax est bien egal au nombre maximum que peux contenir la table (si le nombre d'enregistrements que doit contenir la table exède ce nombre, l'ascenseur vertical apparait sinon la table sortirait disgracieusement du cadre ou elle se trouve sur la fenêtre)

    VraiPos devrait me renvoyer la position en Y réèle de la ligne selectionnée et ce même si l'ascenseur vertical est apparu ce qui fausse la fonction tableselect (en effet celle-ci me renvoie l'indice de l'enregistrement dans la table même si celui-ci n'est pas visible car hors de la table)

    VraiPos est calculé en soustrayant à l'indice de l'enregistrement selectionné le nombre d'enregistrement hors table. Ainsi pour connaitre le numero de la ligne selectionnée contenant par exemple l'enregistrement d'indice 7 (connu grace à tableselect), je calcule qu'il y a 3 enregistrement hors de la table (TableOccurrence(TABLE_Commande) - TableHmax) donc 7 - 3 est égal à 4, c'est bien de la quatrième ligne qu'il s'agit ! Je n'ai plus qu'a multiplier la hauteur d'une ligne à ce nombre (en ajoutant la hauteur de la table au préalable) pour obtenir la position en Y réèle de cette ligne.

    ...mais ca ne marche pas tout le temps !!

    En effet, il est très possible que dans les 3 enregistrements hors table, 1 soit au dessus et 2 en dessous de celle-ci dans le cas ou j'aurais utilisé l'ascenceur pour me balader au milieu de la table !

    Dans ce cas la ligne selectionnée n'est pas du tout la quatrième mais plutot (7 - 1) la sixième !

    Bref le code calcule uniquement le nombre d'enregistrement hors table, et non le nombre d'enregistrement a soustraire pour obtenir le vrai numero de ligne...

    Cette methode ne marche pas... Ai-je été assez clair ? Quelqu'un à une idée pour règler ce problème ?
    Merci beaucoup ! la résolution de ce problème est importante pour la bonne marche de mon projet dont l'echeance arrive bientot à son terme !

  6. #6
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 125
    Points : 158
    Points
    158
    Par défaut
    Utilise TablePosition (MaTable) pour connaitre le numéro de la ligne affichée.
    Dans la doc il est indiqué que ça ne fonctionne que sur une table mémoire, mais je viens de tester avec une table fichier et ça marche parfaitement.

    Donc ensuite avec un calcul du genre :
    tableselect (MaTable) - tableposition (MaTable) tu devrais connaitre le numéro de la ligne affichée.

    Bon courage

    Bob.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 42
    Points : 26
    Points
    26
    Par défaut
    Ca marche !!!!

    Il suffisait effectivement d'implémenter cette fonction dans le code de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VraiPos est un entier = TableSelect(TABLE_Commande) - (TablePosition(TABLE_Commande) - 1)
    Tout marche nickel ! Reste un petit bug lorsque l'utilisateur utilise la roulette souris. Il semble que l'evenement ne soit pris en compte qu'apres quelque a-coup ce qui fait que le bouton à un petit peu de retard dans certain cas mais bon ca doit être optimisable facilement.

    Merci grandement !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Positionner un <div> par rapport à une ancre
    Par zouetchou dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/11/2010, 15h06
  2. Réponses: 3
    Dernier message: 27/01/2010, 12h37
  3. trier couleur par rapport à une ligne selectionnée
    Par calvi2002 dans le forum Excel
    Réponses: 2
    Dernier message: 16/07/2009, 10h53
  4. [Débutant] Deplacement par rapport à une ligne
    Par Spiff__ dans le forum Flash
    Réponses: 0
    Dernier message: 20/02/2009, 15h10
  5. positionnement de texte par rapport à une image
    Par maysa dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 03/12/2007, 13h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo