lundi, décembre 22, 2008

WinDev 14 : Table avec colonne Conteneur

Les colonnes de type conteneur permettent une plus grande liberté d'affichage :


Dans la description du champ, il suffit d'indiquer dans la colonne concernée, son type et de définir un champ principal. Utile pour le tri sur la colonne.

Ensuite, il faire un Drag&Drop dans champs (disponibles dans la deuxième barre d'outil de l'éditeur de fenêtre) et de les placer dans la colonne de type conteneur.
Pour alimenter la colonne conteneur par programmation, il faut utiliser l'indice de l'élément ajouter dans la table :

exemple de code :
i est un entier
POUR TOUT CLIENT SUR NomClient
i = TableAjouteLigne(MoiMême,0,"","")
TABLE_Table1.COL_Client[i].LIB_NOM_Prénom = CLIENT.NomClient
TABLE_Table1.COL_Client[i].LIB_Adresse1 = CLIENT.Adresse1
TABLE_Table1.COL_Client[i].LIB_Adresse2 = CLIENT.Adresse2
TABLE_Table1.COL_Client[i].LIB_CP_Ville = CLIENT.CodePostal+" "+CLIENT.Ville
FIN

Les champs LIB_xx sont placés dans une colonne de type conteneur.

samedi, décembre 20, 2008

Tracer un chemin avec les fonctions Google de Windev 14

Il est possible de tracer un chemin avec la fonction gglrecupèreCarte. Il faut pour cela utiliser tous les paramètres de la fonction. Quelques difficultés peuvent être rencontrées, voir astuces en bas de cet article.

Il faut déterminer les différents paramètres du trait de la structure gglParamètreCarte. De plus il faut déterminer un marqueur si vous utilisez le zoom automatique (la zone ne fonctionne pas contrairement au message d'erreur affiché dans le cas où aucun marqueur n'est défini)
Ici j'ai utilisé un tableau de structure pour les différents points du tracé. Ce qui a permis d'utiliser les [ ] pour le remplissage du tableau dynamique.
Le POUR TOUT ELEMENT est très pratique pour le parcours du tableau.
Remarquez également l'utilisation de la fonction Ajoute pour ajouter un élément à un tableau. On aurait pu aussi utiliser la fonction TableauAjoute.

Voici le code utilisé lors du clic sur le bouton :

point est une structure
lat est un réel
longi est un réel
FIN

cléGoogle est une chaîne = "VotreClé"
Chemin est un gglParamètreCarte
stUnPoint est un point
sCoord est un gglCoordonnée
tabCoord est un tableau de 0 point
Trajet est un gglChemin
UnMarq est un gglMarqueur

// définition du trait
Chemin.Chemin..Couleur = iRougeFoncé
Chemin.Chemin..Epaisseur = 2
Chemin.Chemin..Opacité = 100

//définition du tableau de point
tabCoord = [[40.7078,-74.0021],[46.7140,-56.3968],[51.0165,-29.5967],[51.1067,-25.1016],
[49.8997,-6.1730],[48.9577,2.1423]]
// définition des points du tracer
POUR TOUT ELEMENT stUnPoint DE tabCoord
sCoord.Latitude = stUnPoint.lat
sCoord.Longitude = stUnPoint.longi
Ajoute(Chemin.Chemin..Point,sCoord)
FIN
Chemin.Format = gglJPG
// quand on met un Zoom auto il faut préciser une Zone ou un marqueur
// mais marche pas avec une zone alors on met un marqueur
//chemin.Zone.Latitude = 40.7078
//chemin.zone.Longitude = -74.0021
// définition du marqueur
UnMarq.Latitude = 40.7078
UnMarq.Longitude = -74.0021
UnMarq.Taille = gglPetit
Ajoute(Chemin.Marqueur,UnMarq)
IMG_Image1=GglRécupèreCarte(cléGoogle,40.7078,3.9483,gglZoomAuto,600,400,gglHybride,Chemin)

CAS ERREUR:
Erreur(ErreurInfo(errComplet))


ASTUCES :
Lorsque Google ne renvoie pas la carte, il n'y a pas de message d'erreur, rien ne se passe. Donc si lors du clic sur le bouton, vous avez tout de suite la main sur l'appli, c'est que vous avez trop de points.

Il faut faire attention au nombre de point du tracé. En effet on est limité à 100 points, sauf que celui-ci diminue si on met des marqueurs. Donc si la carte ne s'affiche pas, c'est que vous dépassez le nombre de points. Dans mes tests en mettant 7 marqueurs, je n'ai pu mettre que 70 points au tracé.

Le cas erreur, c'est la gestion automatique des erreurs, inutile de le saisir directement, vous aurez une erreur. Il faut cliquer sur le lien "Si erreur : par programme" du pcode pour avoir le "cas erreur".


Attention :
Si vous utilisez la syntaxe Chemin.Chemin..Point, vous ne pouvez pas l'utiliser dans la fonction Ajoute, il faudra écrire Chemin.Chemin.point. (signaler au ST)

Vous ne pouvez pas non plus utiliser les [] pour remplir un tableau de structure si vous avez déclaré votre tableau : tab est un tableau dynamique de 0 gglCoordonnées (signaler au ST).
C'est pour ca que dans le code il y a une déclaration d'une structure "Point".

Utilisation des fonctions google en WinDev 14

Pour afficher une carte dans un champ image, il faut utiliser les fonctions gglRecupèreCarte et la structure gglCoordonnée. De plus une fonction bien utile pour trouver les coordonnées géographiques d'une ville ou une adresse : gglAdresseVersCoordonnées.

Pour utiliser les fonctions google, il faut s'inscrire sur le site de Google afin d'obtenir la clé indispensable pour la récupération de carte.

Voici les quelques ligne de code pour obtenir ce résultat :
cléGoogle est une chaîne = "Votre clé"
sCoord est un gglCoordonnée

sCoord = GglAdresseVersCoordonnées(cléGoogle,SAI_Adresse)

IMG_Image1 = GglRécupèreCarte(cléGoogle,sCoord.Latitude,sCoord.Longitude,12,631,408,gglHybride)

Astuce : attention au zoom, il va de 0 à 19, toutefois à 19, si google ne peut pas fournir ce niveau de détail, il se passera rien dans votre fenêtre. par conséquent indiquer un niveau de détail normal.

vendredi, mai 16, 2008

Comment connaitre la taille en pixel d'une chaine de caratère

La fonction TexteLargeur permet de connaitre la taille en pixel d'une chaine de caractère.
Toutefois, cette fonction admet en premier paramètre un champ de saisie.
De plus il faut faire attention à la police utilisé.

Si par exemple vous créez la police suivante :

polPolice est une Police
polPolice = PoliceCrée("Tahoma", 7, iNormal, iNoir)

Il faut alors associé la police au champ de saisie :

SAI_Saisie1..Police = polPolice

Ensuite :

NbPixel = TexteLargeur(SAI_Saisie1,"Ma chaîne")

vendredi, janvier 18, 2008

WinDev 12 – Splitter une chaîne dans un tableau

Voici une procédure qui permet de mettre les valeurs d'une chaîne de caractères séparées par un séparateur défini, dans un tableau :

// Résumé : Permet de remplir un tableau de chaine à partir d'une chaine et d'un séparateur

// Syntaxe :

//[ = ] Split ( est chaîne, est chaîne [, est booléen [, est entier]])

//

// Paramètres :

// sChaineCara (chaîne) : Chaine de caractères à splitter

// sSeparateur (chaîne) : Le séparateur à utiliser

// bTrié (booléen - valeur par défaut=0) : Faux (valeur par défaut) le tableau n'est pas trié, vrai pour avoir un tableau trié

// pType (entier - valeur par défaut=1) : Type de trie : ttCroissant ou ttDécroissant

// Valeur de retour :

// tableau : // Tableau contenant les valeurs de la chaine passée en paramètre.

//

// Exemple :

// tabSP est un tableau dynamique de 0 chaines

//

// tabSP = Split("toto;abc;zoro;aab;tata",";",Vrai,ttCroissant)

PROCEDURE Split(sChaineCara est une chaîne, sSeparateur est une chaîne,bTrié est un booléen = Faux,pType est un entier = ttCroissant)

tabSplit est un tableau dynamique de 0 chaînes

s est une chaîne // variable de boucle

POUR TOUTE CHAINE s DE sChaineCara SEPAREE PAR sSeparateur

TableauAjouteLigne(tabSplit,s)

FIN

SI bTrié ALORS

SI pType = 0 ALORS pType = ttCroissant

TableauTrie(tabSplit,pType)

FIN

RENVOYER tabSplit

Exemple d'utilisation :

tabSP est un tableau dynamique de 0 chaîne

tabSP = Split("toto;abc;zoo;aab;tata",";",Vrai,ttCroissant)

mardi, janvier 15, 2008

WinDev 12 - Utilisation de MesParamètres

Cette instruction WLangage permet de passer autant de paramètres à une procédure que l'on souhaite grâce à l'opérateur *.

Exemple :

PROCEDURE Calcul(pParam1, *)

Dans cette procédure * représente les autres paramètres possibles.

Ces paramètres optionnels sont accessibles via l'instruction MesParamètres.

Le plus intéressant, avec cette instruction, c'est que l'on peut accéder à des propriétés d'un objet. Par exemple si on veut modifier la visibilité d'une colonne dans une procédure globale on peut passer en paramètre à la procédure le nom complet de la colonne :

Exemple code :

// Code d'un bouton
ModInterface(Fen_Fenêtre1.Table1.Col_Colonne1, faux)

PROCEDURE ModInterface(*)

MesParamètres[1]..visible = MesParamètres[2]