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

Contribuez Discussion :

[WD10] [Source] Ascenseur dans fenêtre


Sujet :

Contribuez

  1. #1
    Membre actif Avatar de Gulix
    Inscrit en
    Septembre 2005
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2005
    Messages : 268
    Points : 273
    Points
    273
    Par défaut [WD10] [Source] Ascenseur dans fenêtre
    Bonjour,

    Dans le cadre d'une application, j'ai une fenêtre qui possède un grand nombre de boutons, inconnu à l'avance (ChampClone depuis une BDD). Les boutons sont groupés, et j'en ai trop pour la taille de la fenêtre.
    J'ai recherché un moyen d'avoir un ascenseur dans une fenêtre, sans résultat (les ChampClone() m'empêchent d'utiliser une fenêtre interne).

    J'ai finalement réussi à obtenir un résultat super intéressant en codant moi-même mon ascenseur. Voici le résultat. C'est une classe (plus facile à exporter) avec 2 fonctions globales :

    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
     
    PROCEDURE GLOBALE InitialiseAscenseur(sFenetre est une chaîne, sAscenseur est une chaîne)
     
    yDebut est un entier = 0
    yTemp est un entier = 0
    yFin est un entier = 0
    iChamp est un entier = 1
    // On recherche l'élément de la fenêtre positionné le plus en bas
    sChamp est une chaîne = EnumèreChamp(sFenetre, iChamp)
    TANTQUE (sChamp <> "")
    	// On récupère la position du champ
    	SI (sChamp <> sAscenseur) ALORS
    		yTemp = {sChamp, indChamp}..Y + {sChamp, indChamp}..Hauteur + 35 // 35 pour l'écart avec le bas de la fenêtre
    		yFin = Max(yTemp, yFin)
    	FIN
    	// On passe au champ suivant
    	iChamp++
    	sChamp = EnumèreChamp(sFenetre, iChamp)
    FIN
    // L'écart se calcule par rapport au bas de la fenêtre
    yFin = yFin - {sFenetre, indFenetre}..Hauteur
    // Si l'écart est négatif (l'élément le plus bas est dans la fenêtre), l'ascenseur est invisible
    SI (yFin <= 0) ALORS
    	{sAscenseur, indChamp}..Visible = Faux
    	RETOUR
    FIN
    // Initialisation des bornes de l'ascenseur
    {sAscenseur, indChamp}..BorneMin = yDebut
    {sAscenseur, indChamp}..BorneMax = yFin
    {sAscenseur, indChamp}..AvanceRapide = (({sFenetre, indFenetre}..Hauteur) / ({sFenetre, indFenetre}..Hauteur + yFin)) * yFin
    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
     
    PROCEDURE GLOBALE RafraichitAscenseur(sFenetre est une chaîne, sAscenseur est une chaîne)
     
    iChamp est un entier = 1
    sChamp est une chaîne
    // On parcourt la liste des champs
    sChamp = EnumèreChamp(sFenetre, iChamp)
    TANTQUE (sChamp<>"")
    	// On modifie la position des champs (sauf celle de l'ascenseur
    	SI (sChamp <> sAscenseur) ALORS
    		{sChamp, indChamp}..Y = {sChamp, indChamp}..YInitial - {sAscenseur, indChamp}..Valeur
    	FIN
    	iChamp++
    	sChamp = EnumèreChamp(sFenetre, iChamp)
    FIN
    // On repeint la fenêtre
    FenRepeint(sFenetre)
    La première fonction permet d'initialiser les bornes de l'ascenseur, la second rafraîchit la fenêtre selon la position de l'ascenseur. Les 2 paramètres à passer sont le nom de la fenêtre et le nom du champ Ascenseur, placé dans la fenêtre (en vertical).

    InitialiseAscenseur(...) doit être appelé après que tous les champs soient placés sur la fenêtre.
    RafraichitAscenseur(...) doit être appelé à chaque modification de l'ascenseur.

    En espérant que ça serve à quelqu'un
    "L'univers... on croit qu'il est infini mais quand on arrive au bout un gorille géant vous balance des tonneaux."
    Phillip J. Fry

    http://www.gulix.fr/

    BlindShark, Logiciel de Blind Test - Pull N' Bounce - Jeu XNA

  2. #2
    Membre chevronné
    Avatar de mogwai162
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Points : 1 860
    Points
    1 860
    Par défaut
    Moi j'aime bien les zones répétées
    Patrick Catella

    Je ne réponds pas aux messages privés si ceux ci suivent un sujet. Il est préférable pour tous de poursuivre la discussion dans le sujet d'origine.

    Je suis Concepteur développeur Windev (10 ans) et Windev mobile (4 ans) en recherche d'emploi. J'etudie toute proposition

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 63
    Points : 36
    Points
    36
    Par défaut
    ça m'a bien servi ...

    un grand merci a toi !!!

Discussions similaires

  1. [WD19] Problème avec l'ascenseur dans un Champ Fenêtre Interne
    Par sbernard dans le forum WinDev
    Réponses: 0
    Dernier message: 12/03/2015, 22h15
  2. Détecter la présence d'un ascenseur dans la fenêtre
    Par michaeljeru dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 25/11/2011, 19h05
  3. [WD10] exploiter un ascenseur dans une fenêtre interne
    Par cool dans le forum WinDev
    Réponses: 1
    Dernier message: 12/09/2009, 16h55
  4. [WD10] créer un ascenseur dans un champs image
    Par lepirate dans le forum WinDev
    Réponses: 11
    Dernier message: 25/03/2009, 13h47
  5. [WD11]Ascenseur dans une fenêtre interne
    Par kuranes dans le forum WinDev
    Réponses: 4
    Dernier message: 24/05/2007, 18h43

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