Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Membre régulier
    Inscrit en
    août 2005
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : août 2005
    Messages : 69
    Points : 99
    Points
    99

    Par défaut Windev 14 : Dessiner dynamiquement dans une cellule de table avec les fonctions de dessin (dDebutDessin etc.)

    Voici une petite astuce pour dessiner dynamiquement des images dans une cellule de table, avec les fonctions de dessin de Windev : http://doc.pcsoft.fr/fr-FR/?3029033&...nctions_Dessin

    Dans mon exemple, la colonne Col_Conteneur de la table table1 est de type "Conteneur" (cf : http://doc.pcsoft.fr/fr-FR/?colonne-...type-conteneur).

    Dans ce conteneur, j'ai placé un champ image "Image1" (Mode d'affichage 100% dans le coin haut gauche).
    Dans ma fenêtre, j'ai aussi un champ image nommé "Image1" (Qui n'est pas forcément visible).

    Voici le code :

    Code :
    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
    LOCAL
    	iLargeurColonne est un entier
    	iHauteurLigne est un entier
    	iIndice est un entier 
    	bfImg est un Buffer
    
    iIndice = TableAjouteLigne(Table1)
    
    iLargeurColonne = Table1.Col_Conteneur[iIndice]..Largeur-1
    iHauteurLigne    = Table1.Col_Conteneur[iIndice]..Hauteur-1
    
    Image1..Largeur = iLargeurColonne
    Image1..Hauteur = iHauteurLigne
    
    dDébutDessin(Image1)
    dRectangle(0,0,iLargeurColonne-1,iHauteurLigne-1,iJauneClair,iNoir)
    
    bfImg  = dSauveImagePNG(Image1,enMémoire)
    
    Table1.Col_Conteneur[iIndice].Image1..Largeur = iLargeurColonne
    Table1.Col_Conteneur[iIndice].Image1 = bfImg
    
    //Ces exemples ne fonctionnent pas, c'est la raison pour laquelle je doit passer par un champ Image de ma fenêtre : 
    //dCopieImage(Image1,Table1.Col_Conteneur[iIndice].Image1)
    
    //dDébutDessin(Table1.Col_Conteneur[iIndice].Image1)
    //dRectangle(0,0,iLargeurColonne-1,iHauteurLigne-1,JauneClair,iNoir)
    Si vous avez une idée pour optimiser ce code, je suis preneur !

    Bonne prog

  2. #2
    Modérateur
    Avatar de mail.spam
    Homme Profil pro Sylvain
    Développeur Windev et technicien maintenance
    Inscrit en
    janvier 2008
    Messages
    1 805
    Détails du profil
    Informations personnelles :
    Nom : Homme Sylvain
    Âge : 36
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2008
    Messages : 1 805
    Points : 3 639
    Points
    3 639

    Par défaut

    Bonjour,

    Il serait bien de rappeler la version mini a avoir pour faire ce genre de manipulation.

    Car la colonne de type conteneur d'après l'aide n'est apparut qu'en version 14.
    Si quelqu'un peux confirmer.
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

  3. #3
    Modérateur
    Avatar de L.nico
    Homme Profil pro Nicolas LAURET
    Chef de projet en SSII
    Inscrit en
    novembre 2003
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Nom : Homme Nicolas LAURET
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2003
    Messages : 1 104
    Points : 2 530
    Points
    2 530

    Par défaut

    Je confirme, la colonne conteneur est apparue avec la version 14
    Modérateur Business Intelligence / Windev

    A lire avant de poster
    Si vous avez obtenu la réponse à votre question alors cliquez sur le bouton

  4. #4
    Expert Confirmé
    Profil pro
    Inscrit en
    mars 2005
    Messages
    1 682
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : mars 2005
    Messages : 1 682
    Points : 2 531
    Points
    2 531

    Par défaut

    Une méthode plus optimisée serait de se passer de l'étape intermédiaire "dessin dans une zone, enregistrement vers fichier, chargement du fichier vers nouvelle zone". Ce sera plus propre et certainement plus rapide.

    Les fonctions gXXX permettent de dessiner directement dans les listes, combos et cellules de table. De plus l'utilisation de conteneur est inutile, vous pouvez dessiner dans une cellule "texte".

    Exemple rapide :

    Créez un champ table rempli par programmation avec une colonne texte et le code suivant :
    Code :
    TableAjouteLigne(Table1,gRectangle(0,0,18,18,iJauneClair,iNoir))

  5. #5
    Membre régulier
    Inscrit en
    août 2005
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : août 2005
    Messages : 69
    Points : 99
    Points
    99

    Par défaut

    Une méthode plus optimisée serait de se passer de l'étape intermédiaire "dessin dans une zone, enregistrement vers fichier, chargement du fichier vers nouvelle zone". Ce sera plus propre et certainement plus rapide.
    Il est certain que cela serait plus propre, mais je n'ai pas trouvé d'autre façon de faire.

    Quoi qu'il en soit, il n'y a pas d'écriture dans un fichier (sur le disque) mais en mémoire avec la fonction bfImg = dSauveImagePNG(Image1,enMémoire).

    Je connais la méthode que vous proposez, mais elle est limitée :
    Je ne peut pas par exemple faire en sorte que la cellule soit de deux couleurs différentes, ce qui était mon objectif à la base (Dessin de planning en fusionnant les cellules).
    Pour afficher un rectangle de couleur avec un contour, c'est effectivement le plus simple.

    J'ajoute que la méthode peut être utilisée avec une colonne de type "image" mais avec moins de souplesse que la colonne "Conteneur" :
    -Si l'on souhaite ajouter du texte, on doit l'écrire sur l'image avec les fonctions de dessin.
    -Je ne suis pas parvenu a ajuster l'image affichée au pixel par rapport à la taille de la cellule (Décalage d'un pixel à gauche).

  6. #6
    Expert Confirmé
    Profil pro
    Inscrit en
    mars 2005
    Messages
    1 682
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : mars 2005
    Messages : 1 682
    Points : 2 531
    Points
    2 531

    Par défaut

    Mea culpa pour la partie écriture fichier, je n'ai pas vu la subtilité en effet.

    Concernant la couleur double, par contre, je vous corrige. Il possible de dessiner plusieurs éléments dans la même cellule :

    Code :
    TableAjouteLigne(Table1,gRectangle(0,0,30,18,iJauneClair,iJauneClair) + gRectangle(31,0,60,18,iVertClair,iVertClair)))
    Toutes les combinaisons de fonctions gXXX sont permises et les possibilités nombreuses.

    Le plus gros inconvénient que je vois avec cette méthode est que le redimensionnement de la colonne n'est pas appliqué contrairement à une image avec redimensionnement.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •