Plein d'infos sur WinDev, WebDev et WinDev Mobile et d'autres choses aussi. N'hésitez pas me laisser des commentaires ou des suggestions.
vendredi, août 20, 2010
comment géolocaliser une adresse et la centrer avec WEBDEV (Google Maps v3) ?
mercredi, juillet 21, 2010
WEBDEV 15 - Google maps V3


Ce code permet d'afficher la carte sur tous les navigateurs. Sans ce code sous chrome la carte prends tout le navigateur.
La variable gObjCarte est utilisée dans plusieurs fonction de manipulation de la carte elle est donc déclarer en global navigateur.
Pour une facilité d’utilisation et de réutilisation création d’une collection de procédure dans les procédures globales navigateur
Nom de la collection : pGestionCartes
La procédure est écrite en javascript. Il faut donc cliquer sur WL après création de la procédure
Création de la carte :
// Résumé : Création de la carte google map
// Syntaxe :
//CreeCarte (
//
// Paramètres :
// sNomChampCarte : Nom du champ HTML (
// nlat : latitude du centre de la carte
// nlong : longitude du centre de la carte
// Valeur de retour :
// Aucune
//
function CreerCarte(sNomChampCarte,nlat,nlong)
{
if (nlat==0){
nlat = 48.856558;
};
if (nlong==0){
nlong = 2.350966;
};
// Création de la carte
var latlng = new google.maps.LatLng(nlat, nlong);
var myOptions = {
mapTypeControl: true,zoom: 5, center: latlng, mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},navigationControl: true,mapTypeId: google.maps.MapTypeId.ROADMAP
}
// création de la carte
gObjCarte = new google.maps.Map(document.getElementById(sNomChampCarte),myOptions);
}
lundi, décembre 22, 2008
WinDev 14 : Table avec colonne Conteneur

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 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 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
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 :
//[
//
// 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]
mercredi, octobre 17, 2007
WebDev - Récupérer le User name Windows de l'internaute
Si vous saisissez cette URL : http://localhost/?user=%USERNAME% vous verrez apparaitre le nom d'utilisateur du poste dans l'URL. (Seulement valable sous IE)
Il est donc possible grâce à une applet Java de récupérer cette information. Dans la LST 68 page 35, l'exemple WD Applet FTP permet de le faire.
Dans l'applet la fonction RéseauUtilisateur() permet de récupérer le nom d'utilisateur Windows.
Dans le site WebDev une fonction Javascript permet de récupérer la valeur de la variable.
mercredi, septembre 12, 2007
Achat sur Internet : PCSOFT lance la commande en ligne
Sur la page tarif, on peut se constituer un panier et régler par carte bancaire via paybox.
Depuis le temps qu'on attendait cette possibilité, c'est enfin une réalité.
lundi, septembre 10, 2007
Créer la database sur MySQL avec WinDev, WebDev
Lors de la connexion avec l'accès natif, il faut préciser le nom de la base. Il est donc necessaire d'utiliser PHPMyAdmin ou SQLylog pour créer la base.
Je souhaitais créer par programmation la database puis lancer le script des tables.
La fonction SQLConnecte permet d'effectuer ce traitement si on utilise la connexion ODBC.
Voici le code permettant de créer la database :
id est un entier = SQLConnecte("MysqlODBC","root","mdp","","ODBC ",hODBC)
SI id <> 0 ALORS
sNomDatabase est une chaîne = "Database"
// création de la base de données
sSql est une chaîne = "CREATE DATABASE IF NOT EXISTS %1"
sSql = ChaîneConstruit(ssql,sNomDatabase)
// execution de la requête
SI PAS SQLExec(ssql,"REQ") ALORS
SQLInfoGene()
Erreur("La Database n'a pas pu être créée. Code erreur : " + SQL.Erreur +RC+...
SQL.MesErreur)
FIN
SINON
// La connexion a échoué : affichage d'un message explicatif
SQLInfoGene()
Erreur("La connexion à la source de données" + "localhost" + ...
"a échoué."+RC+...
"Code erreur : " + SQL.Erreur +RC+...
SQL.MesErreur)
FIN
// Dans tous les cas (connexion OK ou pas)
SQLDéconnecte()
Ensuite on peut utiliser les fonctions "H*" avec l'accès natif MySQL.
Un peut contraignant, car il faut le drivers ODBC d'installé sur le poste.
lundi, août 13, 2007
Arrêt du support de PHP 4
Il va falloir penser à passer à la version 5 de PHP.
En espérant que la prochaine version de WebDev supporte la version 5 de php.
jeudi, août 09, 2007
WebDev 11. Image dynamique et répertoire des données.
Dans l'aide en ligne il est indiqué que pour une image de type dynamique, les images doivent se trouver dans le répertoire _WEB ou un sous répertoire de celui-ci.
Toutefois, en déploiement, l'invité internet n'a pas les droits en écriture dans le répertoire _WEB.
Par conséquent, lorsque une page d'administration permet au Webmaster de modifier et changer des images, il faut que celles-ci se trouvent dans le répertoires de données seul répertoire ou l'invité internet à les droits de lecture/écriture.
Malheureusement on ne peut pas accéder à ce répertoire en code navigateur, car la fonction WLangage fRepDonnées est disponible qu'en code serveur.
De plus si le type d'image est défini en dynamique, même en code serveur, il faut un chemin relatif pour pouvoir afficher une image.
Solution 1 : Créer un Alias ou répertoire virtuel sur le répertoire des données.
Sous Apache 2.2.x l'alias se créer de la façon suivante dans le fichier httpd.conf
<Directory "C:/temp/Test_Image_Timer/Exe/DATA/">
Alias /DATA/ "C:/temp/Test_Image_Timer/Exe/DATA/"
Order allow,deny
Allow from all
</Directory>
NOTE : Pour les tests j'ai créé un alias sur un sous répertoire du répertoire exe du projet. En déploiement se répertoire correspond au répertoire données décrit dans la création du compte WebDev.
PS : pour ceux qui utilisent le CCHerbergement, il faudra dans IIS créer un répertoire virtuel supplémentaire depuis la console de configuration du serveur Web.
Ensuite dans le code WebDev on peut écrire le code suivant :
Le champ Image est de type dynamique
// Code initialisation de la page (serveur)
IMG_Image1 = "../DATA/ImgAcc/ImgAcc01.jpg"
Solution 2 :
Modifier les droits sur un sous répertoire du répertoire _WEB. Cela signifie de demander à son hébergeur une modification.
lundi, août 06, 2007
WinDev 11 . Procédures Stockées MySQL 5.x
Vous trouverez l'accès natif à l'adresse suivante :
http://www.pcsoft.fr/st/telec/modules-communs-11/mysql.htm
Soit un fichier client :
Version : Serveur MySQL 5.0.45
- Exemple de procédure stockée avec passage de paramètres :
1 – Création de la procédure stockées sur le serveur
sProc est une chaîne = [
"DROP PROCEDURE IF EXISTS `procstok`.`simpleproc1` ;
CREATE PROCEDURE simpleproc1 (OUT param1 INT) BEGIN SELECT COUNT(*) INTO param1 FROM client; END;
]
scReq est une Source de Données
// Exécution de la requête
SI PAS HExécuteRequêteSQL(scReq,MaConnexion1,hRequêteSansCorrection,sProc) ALORS
Erreur()
SINON
Info("Procédure stocké créée")
FIN
2 – Exécution de la procédure stockée :
sdReq est une Source de Données
SI PAS HExécuteRequêteSQL(sdReq,MaConnexion1,hRequêteSansCorrection,"call simpleproc1(@a);select @a;" ) ALORS
Erreur()
SINON
Info("Gagné")
// Lecture du résultat de la procédure
HLitPremier(sdReq,hSansRafraîchir)
Trace(sdReq.@a)
FIN
NOTE : la constante hSansRafraîchir permet de ne pas ré-exécuter la requête.
jeudi, juin 28, 2007
CCNG très utile.
Le lecteur de news (LST 68) intégré aux éditeurs PC SOFT, en vraiment très pratique, si l'on utilise l'option "Afficher uniquement les messages non lu", car j'avais mis en suivi un message concernant le calcul de clé de lettre recommandé qui date du mois d'avril.
Récemment une réponse a été faite. Du coup j'ai été notifié et en plus les messages apparaissent dans la liste. Pas besoin d'effectuer de recherche, tout est là.
Code-Cible Conditionnel
Très utile lors de création de procédure utilisable dans WinDev, WebDev et WinDev Mobile.
Le Code-Cible Conditionnel permet de mettre un code différent en fonction de la plateforme choisie.
Ainsi une procédure créer en WinDev, avec l'utilisation de fonction non disponible en WebDev pourra être utilisée grâce au code cible.
Exemple la fonction "Dialogue" n'est pas disponible en WebDev. Donc dans WinDev on mettra les codes suivants.
Conseil : Bien suivre l'aide pour ajouter les zones de code-cible conditionnel.

