Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > WinDev > Contribuez
Contribuez Vos contributions pour la rubrique Windev : articles, cours, tutoriels, faq, comparatifs, tests, sources, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 11/03/2011, 17h49   #1
bastiencb
Membre régulier
 
Inscription : août 2005
Messages : 56
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 56
Points : 70
Points : 70
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
bastiencb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 14h20   #2
mail.spam
Modérateur
 
Avatar de mail.spam
 
Homme Sylvain
Développeur Windev et technicien maintenance
Inscription : janvier 2008
Messages : 1 640
Détails du profil
Informations personnelles :
Nom : Homme Sylvain
Âge : 34
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 640
Points : 3 820
Points : 3 820
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
mail.spam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 14h57   #3
L.nico
Modérateur
 
Avatar de L.nico
 
Homme Nicolas LAURET
Chef de projet en SSII
Inscription : 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 597
Points : 2 597
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
L.nico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 16h05   #4
vmolines
Membre Expert
 
Inscription : mars 2005
Messages : 1 682
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2005
Messages : 1 682
Points : 2 494
Points : 2 494
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))
vmolines est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 19h15   #5
bastiencb
Membre régulier
 
Inscription : août 2005
Messages : 56
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 56
Points : 70
Points : 70
Citation:
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).
bastiencb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 10h23   #6
vmolines
Membre Expert
 
Inscription : mars 2005
Messages : 1 682
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2005
Messages : 1 682
Points : 2 494
Points : 2 494
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.
vmolines est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h30.


 
 
 
 
Partenaires

Hébergement Web