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.
jeudi, mai 10, 2007
WebDev - Comment après un code serveur utiliser la fonction NavigateurOuvre ?
Il faut utiliser la fonction NavigateurOuvre. Toutefois, cette fonction est disponible qu'en code navigateur et pas en code serveur.
L'astuce consiste à utiliser un champ caché, qui fera office de booléen.
Dans un code serveur, on effectue le traitement souhaité, puis on affecte 1 au champ caché.
Puis dans le code d'onload de la page, on utilise la syntaxe suivante :
SI SAI_MonChamp <> 0 alors
NavigateurOuvre("http://www.monsite.fr")
FIN
mercredi, mai 02, 2007
Style CSS et WebDev 11
Prenons le champ lien, par exemple. Il faut aller dans la description du lien dans l'onglet Style.
Puis cliquer sur "Editer".
Ensuite dans la description du style dans l'onglet CSS, on va mettre un code css de survol du lien.
Sélectionner Survol et mettre le code (exemple) :
color:#411;
background:#aaa;
border-bottom: 1px solid #555;
Il faut oublier la syntaxe : "a{ }" et mettre que les attributs.
Voilà un effet de survol en CSS.
jeudi, avril 26, 2007
Mise à jour WD Véhicule
Vous pouvez télécharger la mise à jour à l'adresse suivante : http://progwdm.free.fr/#sect1.8.
mercredi, avril 25, 2007
Récupérer un flux RSS dans WebDev
Voici le code :
sURL est une chaine = "http://nomDomaine.com/rep_du_Fichier_XML"
HTTPRequête(sURL,ProjetInfo(piNomProjet)) //
sres est une chaîne = HTTPDonneRésultat(HTTPRésultat)
Voila sres contient le fichier XML du flux RSS.
Ensuite il faut parcourir le fichier pour extraire les éléments. L'utilisation de fonction "XML" permet facilement d'obtenir le contenu.
Il existe un exemple complets dans WinDev : "Lecteur RSS", les procédures et classes sont utilisables dans WebDev.
Trouver des infos à partir de l'adresse IP
Cela est utile pour afficher des informations liées à la ville, ou positionner l'internaute sur une carte.
C'est possible avec le projet HostIp.
Voici une collection de procédures permettant de récupérer ces infos :
Déclarations des procédures globales :
Infos est un tableau associatif (*, *, *, 4) de chaînes
PROCEDURE RecupInfos(sIp est une chaîne)
s est une chaîne
// On interroge Hostip.
SI PAS HTTPRequête("http://api.hostip.info/get_html.php?ip="+sIp+"&position=true") ALORS
Erreur()
SINON
sres est une chaîne = HTTPDonneRésultat(HTTPRésultat)
// sRes est de la forme
// Country: FRANCE (FR)
// City: (Unknown city)
// Latitude:
// Longitude:
POUR TOUTE CHAINE s DE sres SEPAREE PAR Caract(10)
Infos[SansEspace(ExtraitChaîne(s,1,":",DepuisDébut))] = ExtraitChaîne(s,2,":",DepuisDébut)
FIN
FIN
PROCEDURE Pays()
RENVOYER Infos["Country"]
PROCEDURE Ville()
RENVOYER Infos["City"]
PROCEDURE Lattitude()
RENVOYER Infos["Latitude"]
PROCEDURE Longitude()
RENVOYER Infos["Longitude"]
jeudi, avril 05, 2007
Demarrer...Executer dans une Combo WinDev

A chaque saisie de caractère, la combo propose les fichiers et répertoires commençant par ce caractère. Une sorte de saisie assistée.
Voici le code Utilisé :
Le code d'entrée de la combo.

Code à chaque modification de la combo :
ch est une chaîne = MoiMême..ValeurAffichée // Recupération de la valeur saisie dans la combo
pos est un entier = Position(ch,"\",0,DepuisFin) // Position du curseur.
SI Taille(ch) >= 2 ALORS // A partir du deuxième caractère on recherche les fichiers et répertoires
// Suppression du contenu de la combo
POUR i = ListeOccurrence(MoiMême) A 1 PAS -1
ListeSupprime(MoiMême,i)
FIN
SI ListeOccurrence(MoiMême) > 0 ALORS ListeModifie(MoiMême,"",1)
// Le premier caractère doit correspondre à une unité de disque : de A à Z
SI Asc("A") < pertoire =" fRep(ch+">""
// Liste des répertoires
ListeAjoute(MoiMême,ch[[1 A 2]]+["\"]+ch[[3 A pos]]+["\"]+sRépertoire)
// Répertoire suivant
sRépertoire = fRep("", frRépertoire)
FIN
// Ajout des fichiers qui sont à la racines
ListeAjoute(MoiMême,fListeFichier(ch+"*",frNonRécursif))
// Ouverture de la combo
ComboOuvre(MoiMême)
FIN
FIN
Code de Sélection de la Combo :

la propriété ..Curseur permet de positionner le curseur à la fin de la chaine saisie
lundi, avril 02, 2007
Mise à Jour WD Vehicule (Mobile)
La mise à jour sera proposée lors de la prochaine ouverture de l'application sinon vous
pouvez la télécharger à l'adresse suivante http://progwdm.free.fr/#sect1.7.
vendredi, mars 16, 2007
Combo : clic sur la flèche
Comment afficher dans une combo, la liste des bases disponibles sur un serveur Hyper File, au clic sur la flèche (Ouverture de la combo) de la combo ?
Il faut utiliser l'événement : WM_NCLBUTTONDOWN.
Ne pas oublier de mettre EXTERN "WinConst.wl" dans la déclaration globale de la fenêtre.
Branchement de l'évènement : (Code global de la fenêtre)
Evénement("RemplitComboBaseHF","COMBO_Base",WM_NCLBUTTONDOWN)
Création de la procédure "RemplitComboBaseHF" :
PROCEDURE RemplitComboBaseHF()
// Ouverture de la connexion
SI PAS HOuvreConnexion("Moi",SAI_LoginHFCS,SAI_MdpHFCS,SAI_Serveur+":"+SAI_Port,"",hAccèsHFClientServeur) ALORS
Erreur()
SINON
// Récupération de la liste des bases disponibles
ListeBase est une chaîne = HListeBaseDeDonnées("Moi",hLstNormal)
ListeSupprimeTout(COMBO_Base)
s est une chaîne
// Ajout des bases dans la combo
POUR TOUTE CHAINE s DE ListeBase SEPAREE PAR TAB
ListeAjoute(COMBO_Base,s)
FIN
// Sélection de la première base.
SI ListeOccurrence(COMBO_Base) > 0 ALORS ListeSelectPlus(COMBO_Base,1)
HFermeConnexion("Moi")
FIN
vendredi, mars 09, 2007
Nouveau sur le Site Progwdm
Développé en version 11 de WinDev Mobile, l'utilitaire s'enrichit d'un clavier virtuel à grosse touche, permettant la saisie sans le stylet, et gère maintenant le véhicule bi-carburation.
La mise à jour de application est automatique. Tous les 7 jours au lancement, WD Véhicule vérifie si une mise à jour est disponible.
[En savoir plus..]
Suggestion, signalement bug : progwdm@free.fr
vendredi, mars 02, 2007
VérifieExpressionRegulière (bis)
Dans un précédent poste, j'avais déjà abordé l'utilisation de la fonction VérifieExpressionRégulière.
Récemment, j'ai eu l'occasion de l'utiliser avec récupération d'éléments dans des variables.
Le but : vérifier un format de Date comme :
Tue, 11 Apr 2006 18:25:09 +0200
ou
Thu, 1 Mar 2007 04:12:26 +0100 (CET)
Etape par étape :
Chaine / Format
Chaine | Expression régulière | Commentaires |
Tue, | [A-Za-z]{3,3}[,] | |
| [ ]* | Il peut y avoir 1 à plusieurs espaces |
11 Apr 2006 | ([0-9]{1,2}) ([A-Za-z]{3,3}) ([0-9]{4,4}) | |
18:25:09 | ([0-9]{2,2}[:][0-9]{2,2}[:][0-9]{2,2}) | |
+0200 | [\+][0-9]{4,4} | |
| [ ]* | |
(CET) | [\(]*[A-Z]*[\)]* | * siginifie 0 ou plusieurs fois |
Les parenthèses en permettent de définir des parties de l'expression régulière que l'on veut extraire.
Dans ce cas, on peut vérifier et récupérer la date et l'heure en 1 opération.
Il faut ajouter des parenthèses dans l'expression régulière. Ce qui donne au final :
[A-Za-z]{3,3}[,][ ]*([0-9]{1,2}) ([A-Za-z]{3,3}) ([0-9]{4,4}) ([0-9]{2,2}[:][0-9]{2,2}[:][0-9]{2,2}) [\+][0-9]{4,4}[ ]*[\(]*[A-Z]*[\)]*
Ainsi voici le code obtenu :
sJour,sMois,sAnnée,sheure,sDateAVerif sont des chaînes
sDateAVerif = "Tue, 11 Apr 2006 18:25:09 +0200"
SI PAS VérifieExpressionRégulière(sDateAVerif ,"[A-Za-z]{3,3}[,][ ]*([0-9]{1,2}) ([A-Za-z]{3,3}) ([0-9]{4,4}) ([0-9]{2,2}[:][0-9]{2,2}[:][0-9]{2,2}) [\+][0-9]{4,4}[ ]*[\(]*[A-Z]*[\)]*",sJour,sMois,sAnnée,sheure) ALORS
Info("Incorrect")
SINON
Info("Correct",sJour+"/"+sMois+"/"+sAnnée,sheure)
FIN
PS : Comme dirait un vieil ami (très vieux!), lorsqu'on manipule les expressions régulières, il faut un fenêtre de test avec un champ en taille 24. Ainsi on peut voir clairement l'expression régulière.
jeudi, janvier 04, 2007
PersoMenu WinDev, WebDev et WinDev Mobile.
Dans le billet précédent, je parlais de WebDev 11 (35c) qui ne configurait pas le serveur Apache 2.2.3 automatiquement.
J'ai donc fait un programme en Wlangage permettant d'ajouter l'alias pour chaque site dans le fichier httpd.conf.
Puis dans WebDev j'ai créé un Perso menu :
La ligne de commande est la suivante :
"D:\Projet\ModifHttpd.conf\Exe\ModifHttpd_conf.exe" "C:\Program Files\Apache Software
Foundation\Apache2.2\conf\httpd.conf" "{$RepProjet}"
{$RepProjet} : c'est une macro disponible est cliquant sur le bouton « Macro ». Elle renvoie le chemin du répertoire du projet.
ModifHttpd_conf.exe : Mon programme WinDev permettant d'ajouter l'alias au fichier httpd.conf.
Astuce : Dans l'aide il n'est pas précisé comment créer une ligne de commande avec un chemin d'accès contenant des espaces. Le plus simple est de tester la ligne de commande dans « Demarrer...executer » de windows.
Code du programme WinDev « ModifHttpd_conf.exe » :
// Code de déclaration global du projet
LOCAL
gsRes est une chaîne
gnIdFic est un entier
gsCheminFic est une chaîne
gsALias est une chaîne
gsNomSite est une chaîne
gbRes est un booléen
// exemple de ligne de commande:
//"D:\Projet\ModifHttpd.conf\Exe\ModifHttpd_conf.exe" "C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf" "C:\WebDev 11\Exemples\Exemples complets\WW_Editeur_HTML"
gsCheminFic = LigneCommande(1) //C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf
gsALias = LigneCommande(2) //C:\WebDev 11\Exemples\Exemples complets\WW_Editeur_HTML
// Ligne de code pour test
SI EnModeTest() ALORS
gsCheminFic = "C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf"
gsALias = "C:\WebDev 11\Exemples\Exemples complets\WW_Editeur_HTML\"
FIN
SI gsCheminFic <> "" ALORS
// Ouverture du fichier httpd.conf
gnIdFic = fOuvre(gsCheminFic,foAjout)
SI gnIdFic <> -1 ALORS
SI gsALias <> "" ALORS
// On rajoute _WEB au chemin du site
SI Droite(gsALias,1) = "\" ALORS
gsALias = gsALias[[1 A (Taille(gsALias)-1)]]
FIN
gsNomSite = ExtraitChaîne(gsALias,1,"\",DepuisFin)
gsNomSite = "/"+Majuscule(gsNomSite)+"_WEB/"
// Change les \ en /
gsALias = Remplace(gsALias,"\","/")
// On construit le chemin complet
gsALias = gsALias+gsNomSite
// Construction de la chaîne à ajouter au fichier httpd.conf
gsRes = [
Alias %1 "%2"
Options None
AllowOverride None
Order allow,deny
Allow from all
]
gsRes = RC+ChaîneConstruit(gsRes,gsNomSite,gsALias)
// Écriture dans le fichier
gbRes = fEcritLigne(gnIdFic,gsRes)
SI PAS gbRes ALORS
Erreur()
FIN
fFerme(gnIdFic)
// Redemarrer le serveur.
sr est une chaîne = [
"%1" "%2"
]
sr = ChaîneConstruit(sr,"C:\Program Files\Apache Software Foundation\Apache2.2\bin\httpd.exe","-k restart")
LanceAppliAssociée(sr)
SINON
fFerme(gnIdFic)
gsRes = [
"%1"
]
gsRes = ChaîneConstruit(gsRes,gsCheminFic)
// que sous windows
LanceAppliAssociée(gsRes)
FIN
FIN
FIN
mardi, janvier 02, 2007
Comment configurer Apache 2.2.3 pour WebDev 11 et PHP 4.x
Quelques recherches sur le web, m'ont permis de comprendre pourquoi.
Cette version d'apache ne fonctionne pas de la même manière que la version 2.0.59. Le fichier httpd.conf a été découpé en plusieurs fichiers ce qui le rend plus facile à lire.
Dans ce qui suit, on suppose que PHP est déjà installé sur le poste et que la version précédente d'Apache a été désinstallée.
Les étapes de la configuration :
1 – Installation d'Apache 2.2.3
Adresse téléchargement : http://www.apachefrance.com/Telechargement/4/
2 – Configuration d'Apache pour PHP
Avant de commencer il faut télécharger le fichier : php4apache2.dll-php4.4.x.zip
à l'adresse suivante : http://www.apachelounge.com/download/
Ensuite suivre les indication du fichier : Readme First.txt
Après ces manipulations, dans le fichier httpd.conf, les lignes suivantes apparaissent:
LoadModule php4_module "c:/php/php4apache2.dll"
AddType application/x-httpd-php .php
# configure the path to php.ini
PHPIniDir "C:/php"
Ensuite ajouter index.php dans la clause DirectoryIndex
Pour constater le bon fonctionnement, créer un fichier index.php contenant le code suivante :
phpinfo();
Le placer dans le répertoire \htdocs (DocumentROOT) du serveur et le lancer.
3 - Configuration d'Apache pour WebDev 11 :
Avant il suffisait d'ajouter ceci au httpd.conf :
ScriptAlias /WD110AWP/ "C:/WebDev 11/Programmes/Moteur/Windows/AWP/"
AddType application/WebDev11-awp .awp
Action application/WebDev11-awp /WD110AWP/WD110Awp.exe
maintenant en version 2.2.3 :
AddType application/WebDev11-awp .awp
Action application/WebDev11-awp /WD110AWP/WD110Awp.exe
<IfModule alias_module>
ScriptAlias /WD110AWP/ "C:/WebDev 11/Programmes/Moteur/Windows/AWP/"</IfModule>
<Directory "C:/WebDev 11/Programmes/Moteur/Windows/AWP">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
Puis pour chaque site il faut ajouter :
Alias /HAWAII_WEB/ "C:/WebDev 11/Exemples/Exemples complets/Hawaii/HAWAII_WEB/"
<Directory "C:/WebDev 11/Exemples/Exemples complets/Hawaii/HAWAII_WEB/">
Options None
AllowOverride None
Order allow,deny
Allow from all
</Directory>
« Page Not Found » au lancement d'un site WebDev :
Le ScriptAlias ou l'Alias du site n'ont pas été déclarés dans le httpd.conf
« Forbidden » au lancement d'un site WebDev :
Manque les droits sur le répertoire du moteur WebDev. Ajouter :
<Directory "C:/WebDev 11/Exemples/Exemples complets/Hawaii/HAWAII_WEB/">
Options None
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Les images n'apparaissent pas sur la page ou erreur javascript :
C'est la clause
<Directory « X:/..../MonSITE_WEB/ » sur le répertoire <MonSite>_WEB
qui est manquante.
« Impossible de démarrer le serveur apache » lors du chargement du projet ou la mise à niveau du projet :
Webdev ne semble pas trouver le serveur Apache et ne peut donc pas le configurer. Cette erreur n'est visiblement pas bloquante. Penser à créer l'Alias dans le fichier httpd.conf (voir §3)
mercredi, décembre 27, 2006
WinDev 11 : Table hiérarchique
Je viens de me mettre à la table Hiérarchique. Afin de tester le fonctionnement, je me suis servi de l'analyse et des fichiers de l'exemple CRM livré avec WinDev 11.
But du test :
Afficher dans la table Hiérarchique la liste des lignes de commandes par commande et par client.
Résultat :
Code :
nIndiceParent est un entier
nIndiceFils est un entier
nIndiceProd est un entier
POUR TOUT CLIENT SUR NumClient
nIndiceParent = TableAjouteLigne(TABLEH_TableHierarchique1,CLIENT.Civilité+" "+CLIENT.NomClient)
// Affichage pour chaque client la liste de ses commandes
POUR TOUT COMMANDE AVEC NumClient = CLIENT.NumClient
nIndiceFils = TableAjouteFils(TABLEH_TableHierarchique1,nIndiceParent,"Commande n° : " +COMMANDE.NumCommande)
POUR TOUT LIGNECDE AVEC NumCommande = COMMANDE.NumCommande
// Recherche du libellé du produit
HLitRecherche(PRODUIT,Reference,LIGNECDE.Référence)
nIndiceProd = TableAjouteFils(TABLEH_TableHierarchique1,nIndiceFils,PRODUIT.LibProd+" "+LIGNECDE.Référence,LIGNECDE.Quantité,LIGNECDE.PrixVente)
FIN
FIN
FIN
TableEnrouleTout(TABLEH_TableHierarchique1)
Look de la table plutôt agréable. L'utilisation des fonctions est simple.
Il est possible de modifier les images enroulées et déroulées grâce aux propriétés ..ImageEnroulée et ..ImageDéroulée.
NB : Voici le code pour mettre des images dans l'entête des colonnes.
TABLEH_TableHierarchique1.COL_Colonne1..Titre = gImage("01058-16-5.png")+"Clients /"+gImage("VST13340-16-5.png")+" Cde /"+gImage("01389-16-5.png")+" LigneCde"
Possibilité d'utiliser gStylo pour écrire dans une autre couleur.
lundi, décembre 18, 2006
WinDev Mobile 11 : Le Debugger sur le Pocket PC !
Simple d'utilisation, il suffit dans le code de mettre la commande "STOP" puis de faire un GO sur le Pocket.
L'éditeur de code s'ouvre et se positionne sur le code.
Ainsi il est possible :
- de consulter les valeurs des variables,
- suivre pas à pas le déroulement du code.
Grand avantage, on voit ce que ça donne directement sur le Pocket.
vendredi, novembre 24, 2006
Comment récupérer la valeur d'une combo dans une table mémoire ?
he! bien non
Voici la bonne syntaxe :
NomColonneCombo[NomTable,NomTable]..valeur.
Cette syntaxe est uniquement valable pour une combo dans un table mémoire.
Pour une table fichier utiliser : NomColonneCombo..Valeur.
Comment modifier la police d'un libellé d'un champ de saisie

Pour modifier la police de du libellé "Champ de saisie", il utiliser le code suivant :
sLibel est une chaîne = SAI_Saisie1..Libellé
SAI_Saisie1..Libellé = gPolice("Arial")+sLibel
jeudi, novembre 23, 2006
Enlever les caractères Spéciaux tel que =E9,=E8,..
[En savoir plus]
Pour afficher une chaine sans ces caractères, voici donc une procédure permettant de les remplacer :
PROCEDURE RemplaceCaractères(pMachaine est une chaîne)
ch est une chaîne = SansEspace(pMachaine )
// Remplacement des caractères
ch = Remplace(ch,"=?ISO-8859-15?Q?","")
ch = Remplace(ch,"=?ISO-8859-1?Q?","")
ch = Remplace(ch,"=E9","é")
ch = Remplace(ch,"=E8","è")
ch = Remplace(ch,"=EA","ê")
ch = Remplace(ch,"=E7","ç")
ch = Remplace(ch,"=C9","é")
ch = Remplace(ch,"=7E","~")
ch = Remplace(ch,"?=","")
ch = Remplace(ch,"=?","")
ch = Remplace(ch,"=27","'")
ch = Remplace(ch,"=22","""")
ch = Remplace(ch,"=28","'(")
ch = Remplace(ch,"=29","')")
ch = Remplace(ch,"=2E",".")
ch = Remplace(ch,"=3A",":")
ch = Remplace(ch,"=3F","?")
ch = Remplace(ch,"=E0","à")
ch = Remplace(ch,"=3B",";")
ch = Remplace(ch,"=2B","+")
ch = Remplace(ch,"_"," ")
RENVOYER ch
dimanche, novembre 19, 2006
Site ProgWdm
L'utilitaire s'intitule WD Véhicule.
Il permet la gestion de carburant et d'entretien d'un ou plusieurs véhicules.
Il délivre également des statistiques sur la consommation, la station service la moins chère. D'autres fonctionnalités sont à venir...
Disponible en Téléchargement à la page suivante :
http://progwdm.free.fr/#sect1.5.
samedi, novembre 11, 2006
OpenXML de Microsoft (Part 1)
OpenXML est le nouveau format des fichiers de la suite office. Ce sont en fait des fichiers Zip. Celui-ci contient une arborescence et des fichiers décrivant le document. En apparence on pourrait croire qu’il sera désormais simple de créer un fichier Word, par exemple, au format .docx. Cependant le format est très complexe.
Juger plutôt. Voici l’arborescence d’un document Word 2007.
Quelques explications sont données sur l’utilité des différents répertoires et fichiers sur la page suivante : http://www.microsoft.com/france/msdn/office/OpenXML/structure-fichiers-OpenXML.mspx. On s’aperçoit rapidement que le code XML n’est pas simple.
Des exemples de création de documents Word sont données pour les langages .NET, Java et bientôt disponibles en PHP.
La bonne nouvelle c’est qu’avec WinDev on peut utiliser des package .Net et avec WebDev utiliser du code PHP. Il reste plus qu’a installé le FrameWork .NET 3.0.
A noter que dans la Version 11 de WinDev, ce FrameWork .NET 3.0, sera indispensable pour utiliser le champ carrousel et le champ cube. (Nouveauté 62 et 63)
A suivre…
WinDev - Comment récupérer des valeurs persistantes dans la base de registre ?
Soit un projet "MonProjet" contenant plusieurs fenêtres (fnt1, fnt2 etc) dont certains champs ont l'option "Mémoriser la valeur" cochée.
Cette option est disponible dans la "Description du champ", onglet "Détail.
Soit chp1 l'un des champs de fnt1 dont je veux récupérer la valeur mémorisée (chaîne alphanumérique). Etant en mode test, cette valeur est stockée à l'endroit suivant de la base de registres :
HK_CURRENT_USER\Software\PCSoft\WinDev\10.0\ModeTest\MonProjet\fnt1\chp1
Pour récupérer la valeur, Il faut utiliser :
ChargeParamètre("fnt1\chp1\Val")
Dans le cas d'une application en production la clé sera légèrement différente, puisque au lieu d'avoir PC SOFT, ça sera le nom de votre application.
La clé de registre, peut-être récupérée par programmation par la fonction WLangage :
ProjetInfo(piRegistre)
Voir l'aide en ligne pour plus de détail sur les fonctions.