mercredi, mars 19, 2014

WEBDEV 19 - Intégration d'une gallerie d'image avec JQuery

On trouve beaucoup de de gallerie d'image sur le web. La plus part utilise JQuery et d'autres bibliothèques JavaScript.
J'ai choisi "Galleria", une version demo est téléchargeable sur le le site http://galleria.io/

Pour intégrer la gallerie d'image "galleria" dans WEBDEV 19, il faut commencer par télécharger sur le site de galleria le zip : galleria-1.3.5.zip. il contient les JS, CSS et une page HTML de démo.

mettre dans le répertoire _WEB/FR/gallerie , les fichiers suivants :



Dans WEBDEV, mettre un champ HTML puis dans le d'initialisation de la page :


ensuite mettre le code HTML de la demo de galleria

en fait il faut mettre tout le contenu de la div "galleria" du fichier classic-demo.html

Pour finir mettre dans le code navigateur de chargement de la page (onload) l'appel de la fonction initialise() qui faut déclarer en procédure local navigateur (code en JS) :

function initialise()
{
// Load the classic theme
Galleria.loadTheme('./gallerie/galleria.classic.min.js');

// Initialize Galleria
Galleria.run('#galleria', {
height: parseInt($('#galleria').css('height')),
wait: true
});
}

Il reste plus qu'à personnaliser le code HTML du champ HTML.

Modèle de champ avec Menu contextuel

Dans un modèle de champ si vous ajoutez un menu contextuel, ce dernier sera copié dans la fenêtre lors de l'insertion de champ modèle de champs. Or lorsque l'on supprime ce champ modèle de champ, le menu contextuel n'est pas supprimé de la fenêtre par conséquent, dans certain cas, des erreurs de compilation peuvent apparaître sur des variables globales du modèle champ.

Astuce, dans le menu contextuel, dans le code des options de menu, ne pas utiliser directement les variables globales du modèle. Il faut mieux faire l'appel du procédure local au modèle qui effectuera le traitement.

En cas de suppression du modèle de champs dans la fenêtre, ne pas oublier du supprimer également le menu contextuel.

mercredi, février 12, 2014

Variables de type date et heure initialisées avec la date et heure du jour !!!

Avant une variable date ne contenait rien lors de la déclaration. J'en ai eu marre d'avoir mes variables de type date et heure initialisées avec la date et heure du jour, j'ai donc cherché et j'ai trouvé la fonction du va bien : DateHeureParDéfaut

Permet de définir la valeur par défaut des variables de type Date, Heure, et DateHeure (dixit l'aide)

bien, mais on peut pas passer une chaine vide ou la valeur null....dommage

lundi, février 10, 2014

Permutation : Changer un bouton en lien

Je viens de découvrir les permutations. Pouvoir passer d'un bouton à un lien sans avoir à le recréer.




vendredi, février 07, 2014

Imprimer des états dans une langue différente de l'application

Si on veut faire une édition dans une langue différente de l'application sans modifier la langue de l'application, dans ce cas on utilise la fonction : iNationImpression

WINDEV Mobile 19 : Android/iOS Réplication de données (Réplication Universelle Assistée)

J'attendais la version 19 pour mettre la réplication en place sur des application Android/iOS. Au départ j'avais testé sur Android avec une base abonnée SQLite mais la réplication ne fonctionne qu'avec HFSQL. Pas grave et ça m'arrange.

Pourquoi la Réplication Universelle Assistée et pas la programmée ?

Car la Réplication Universelle Assistée permet de faire de la réplication avec un minimum de code (une dizaine de ligne). La plupart de la configuration s'effectue avec des assistants.

Mise en place 

J'ai réalisé quelques tests en m'appuyant sur la documentation : http://doc.pcsoft.fr/fr-FR/?1000021071. Les étapes sont bien précisées. Juste quelques commentaires :

1 - Installation du serveur de réplication.

L'aide en ligne sur le sujet est bien faite. Il cohabite très bien avec un Serveur d'application WEBDEV.
Si on utilise une base HFSQL classic, il faut penser à donner les droits à "l'invité internet" sur le répertoire des données (base maître).
Si les droits sont pas défini, un message pas très explicite apparaît sur le terminal du type "impossible d'accéder aux fichiers ....".

A noter également, qu'il n'est pas nécessaire de créer des comptes. Celui par défaut est largement suffisant.

Dans le volet publication, on peut ajouter une publication. Attention : le nom de l'application que l'on donne doit être identique au nom du fichier .wer (sans l'extension)

2 - Définition de la réplication. (ReplicEdit)

Pas de problématique, a part pour les pamaètres. Dans la description d'un fichier de données, onglet "Filtre". Si on souhaite mettre un paramètre, il faut bien dans la combo seléctionner "Nouveau Paramètre" exemple :


Autre chose également, si utilisation d'une base HFSQL classic, ne pas oublier de définir le répertoire de la base maître dans le menu "Réplication...Description de la réplication" onglet "Fichiers maîtres"

Si utilisation d'une base HFSQL client/serveur. Il faut avant même de lancer ReplicEdit avoir une connexion décrit dans l'analyse sinon c'est rapé.

3 - Publication

On peut le faire dans l'administrateur du serveur de réplication ou depuis ReplicEdit. Attention à la fin de l'assistant on propose un code. celui-ci ne contient ni le nom de la réplication, ni le login, ni le mot de passe défini dans l'assistant.

4 - Programmation dans WINDEV Mobile.

tout le code est donner dans l'aide. Attention à réplicSynchro dans le cas d'un replica immédiat, bien définir le deuxième paramètres ReplicaImmédiat. Sinon on a l'impression que ca marche pas.

Conclusion

Le résultat est assez bleuffant. Ajout, modification, suppression (par swipe) depuis une même application avec deux configuration de projet Android et iOS. Un code unique. Pas testé avec WINDEV et WEBDEV mais d'après la doc le code ne change.

Pour les tests j'ai utilisé que quelques fichiers avec 2 ou trois paramètres, on va voir à à l'usage...

par contre si Modification automatique des fichiers de données ou modification du .wer, ben à priori rien de prévu. Je pense qu'il faut refaire un ReplicInitialise après avoir fait un HModifieStructure. Mais bon cette dernière focntion ne me dit pas si la structure à vraiment changer ou pas.

Je sais pas comment vais faire pour l'instant. Mais on va tester....







vendredi, janvier 31, 2014

WINDEV Editeur de code : Sélection en colonne

La sélection en colonne dans l'éditeur de code est très pratique. Voici une petite vidéo rapide .
voir aide : http://doc.pcsoft.fr/fr-FR/?2010031#NOTE4_1


jeudi, janvier 30, 2014

WLangage : Opérateur Dans

L'opérateur DANS permet de comparer une valeur à une liste de valeurs. Son évaluation renvoie un booléen. très pratique et évite les opérateur _OU_ ou _ET_.

Si Mavaleur DANS(5,6,7) alors
         // trt

Fin

mercredi, janvier 29, 2014

Zone Répétée et Rupture : Comment récupérer le premier élément de la rupture ?

Dans une Zone Répétée avec rupture si on double clic sur une rupture l'indice renvoyé par (ou ZoneRépétéeSelect) est soit l'indice de la première ligne ou l'indice de la ligne sélectionnée par l'utilisateur.

Pour récupérer l'indice de la première ligne de la rupture, il faut :
- Ajouter le code optionnel :
Bouton Gauche double-clic



avec le code suivant :

ZoneRépétéeSelectPlus ( ZoneRépétée1 , ZoneRépétéeInfoXY ( ZoneRépétée1 , tiNumLigne , SourisPosX (), SourisPosY ()))


Cela va forcer la sélection de la première ligne de la rupture

Champ calendrier : Comment "déselectionner" toutes les dates sélectionnées par programmation

Le champ calendrier, avec l'option "Sélection de période" dans l'onglet détail de la description du champ calendrier, permet de sélectionner une période. le code est alors du type :

CAL_SansNom1..DateDébut = "20140115"
CAL_SansNom1..DateFin = "20140129"

Pour désélectionner une période il faut faire :

CAL_SansNom1..DateDébut = ""
CAL_SansNom1..DateFin = ""

Si le calendrier est avec l'option : "Selection multiple" alors dans ce cas il faut utiliser la fonction CalendrierSelectMoins() :

Sélection de date :
CalendrierSelectPlus(CAL_SansNom1,"20140115")
CalendrierSelectPlus(CAL_SansNom1,"20140120")
CalendrierSelectPlus(CAL_SansNom1,"20140122")

Dé sélection de date :

CalendrierSelectMoins(CAL_SansNom1,"20140115")
CalendrierSelectMoins(CAL_SansNom1,"20140120")
CalendrierSelectMoins(CAL_SansNom1,"20140122")

Voir les fonctions de manipulations du champ calendrier : cliquer-ici