Académique Documents
Professionnel Documents
Culture Documents
ffi
+Il
.=ENI/UI DESMSffi
: *t .
g hIULTI.PRESTATAIITES
Envoi de SMS par Webservice u
f: i avec choix du prestataire #
EE0L[EALISATIIN rP il§]
Application complÈte de gÉolocalisation
des intervenants pour i0S E Android
X&
ü
1
3;. -
*i
(gabarit "Heyoo")
Fonctions Pl( : exemples
cryptage asymétrique
Le Saviez-Vous ?
WLangage : présentation de
Iolor Picker Web
5 fonctionnalités utiles
Personnalisation du look de
Analyse de texte via lAPl
la salsie assistee WEBDEV
[ognitive (Microsoft)
Si:^ner, gestion du
Exemples d Ul du
'::.1-\,'efSO et dU baC
\llNDEV Tour 25
!rtr i: [,)
(
PC SOI.T
§',
ffittt,
#ft
. Exemples LST
. Gobqrils
. Ambionces et Poletles
NFC (Near Field Communication) est une technologie de communication
sans fil à courte portée et haute fréquence permettant l'échange de données
(nommées "tag"). L'exemple "WM NFC" illustre comment lire et écrire dans
des tags NFC (identifications d'appareils, de marchandises, etc.).
e NFC (pour Neaf Fie d Communication, Mode non bloquant Attention: la fonction NFCEcritTog réécriI
ou CCP pour Communication Champ Dans ce mode, une procédure callback est I ensemble des données du tag. Pour conser-
Proche en français), permet d'échanger automatiquement appelée à chaque fois qu un ver les données actuellement stockées, il est
des données entre un lecteur et un tag NFC est apposé sur l'appareil. nécessaire de les ajouter à lavariable nfcTog
terminal mobile compatible, voire entre les Cette méthode permet de lire rapidement utilisée pour l'écriture.
terminaux eux-mêmes. plusieurs tags à la suite.
Dans notre exemple, le processus d écriture est
Cette technologie est aujourd'hui largement Un cas d'utilisation est la réalisation d un
géré dans la procédure EcritureMiseAJourTog
répandue: paiement sans contact des cartes inventaire de matériels, chaque matériel étant
de la fenêtre "FEN_DATA'
bancaires ou depris un telephone, appairage équipé d'un tag NFC.
entre appareils electroniques, ...
C est cemode de lecture qui est utilisé dans
Les fonctions NFCxxx du Wlangage per-
Test de l'exemple
notre exemple.
mettent de manipuler les puces ou autres tags 1. Depuis la fenêtre principale, appuyez sur
NFC en lecture comme en écriture. NFCLitTag ( le gros bouton'Lire' pour lancer la lecture
_LectureTag)
L'exemple "WM NFC" est un exemple didac- ' ''.::".:..:,..:.4 :.,: en mode non bloquant (un halo rouge cli-
-- r!:i: :.:r:r..1
tique d'utilisation de ces fonctions. ,,,,:. gnotant indique que la lecture en attente est
' t:.i!': a,1a):\:ri- toujours en cours).
Lire un tag NFC PROCEDURE _LectureTag (...
2. Approchez votre mobile de différents tags
un nfcTag)
La lecture d'un tag s'effectue avec la fonction ..:run "r, NFC pour les lire.
Chaque lecture de tag ajoute une ligne dans
WLangage NFCLitTog.
La procédure callback reçoit en paramètre la fenêtre indiquant l'identifiant du tag et le
Pour lire un tag NFC, 2 méthodes sont pos
une variable de type nfcTog, qui contient nombre de données.
sibles.
. la lecture à la demande (mode bloquant), les données du tag lu. Ce type de variable 3. Pour visualiser les données, cliquez sim-
. la lecture attentive (mode non bloquant). contient differentes proprietes pour recuperer: plement sur la ligne du tag.
. l'identifiant unique, Chaque donnée est affichée sur une ligne
Mode bloquant . les données du tag avec leur type, distincte affichant différentes informations.
Dans ce mode, l'appel de la fonction . la possibilité d'écrire dans le tag, type du tag, taille, ...
N FCLitTog déclenche automatiquement Un appui sur une ligne permet de visualiser
l'ouverture d'une fenêtre système invitant Dans notre exemple, la lecture complète la donnée.
l'utilisateur à approcher son appareil d'un d'un tag est effectuée dans la procédure Un appui long sur une ligne permet d'afficher
autre appareil compatible NFC. AduoliseDonnées de la fenêtre 'FEN DATA". le menu contextuel qui permet de supprimer
Cette fenêtre sera automatiquement fermée la donnée.
après a lecture (ou si l'utilisateur appuie sur !.
la touche 'Back' du périphérique).
Ecrire dans un tag NFC 4. Le bouton "+" permet d'ajouter une nou-
velle donnée dans le tag.
Le cas d'utilisation de ce mode est Ie paiement
Si le tag en lecture seule (propriété
n est pas
sans contact.
..LedureSeule à Foux),il est possible d écrire I
une ou plusieurs données sur le tag via la
fonction WLangage N FCEcritTog.
APPLICATION COMPLETE o{
IOS & ANDROID
/
GEOLOCALISATION
DES INTERVENANTS LE
b,
.qti
sJ^
30
COMPANS
TBS
o
4/h^
_.- Basilique Sarnt-Ser
i
@ cla
O,.
.,e44a de Toulor
*dtÿ
go
Ê
:,
Yii',i',ili,-ç
Fo *âkd'" "*+e3"'*'*" &..=+ 1 Caprtole
fl ,: §
Claudia
k.:
:i "cl (
LOPEZ ûarontP
§SELARDIÏ
UARTIER DE ID È
ÿâ
,ffi','Ji:I:§ I
RTOUCHERIE
LOP-OO7 î
r;
:a
a
Ye2
h.fi
,,'â
r.
BG}I'\tEFûY ot 12
rÇvs s,!t8
§
^ùt*
§
4e' s.§'
Ç'*
.e
isv
rà
t^§ JIJI.ICÀ§
À*ü*lJt
§d des itinirrre:
fi
; C HÂL§T§
fY:&*§§ü§
â,§ûi,iT ,4
-C,
MÂ ÂarAu ô
l.^
* '€-
:
l:ç § Cimetière
erre ca ç
§*UP
4k
vêz
't)
À'r d€ \ô
*ti§* it
LJ
: il;
APIT*LÊ
Vot re po s it ion
à
s§
GUILX
tien*e
ç*r s
tt
{i
? 4y,
§ "r.ror{.,.ll
{r}
§.
-:
rn de Toulouse {
â
,É.BUSCA
!E ^.§'
4 ra*r?^
a Nougar^
A
Il-§ \
*
{.
'f"
M'§IM: ES
tialisation de lü HctToo
Suivi de la
E<CotlPILE 5I
Typeconfiguration<> Hebservice>
I Côltbar-\ ce gÉc1c:a1i:.aticn géoloca lisation
L céosuiviProcédure(CB-Position)
F <STNON> Pour suivre la position de chaque utilisateur, l'exemple utilise
L "C-ÉaticnSiIne..iitàrt " ' les fonctions WLangage géoSuiviActive eT géoSuiviProcédure.
<FIN>
Ces procédures permettent d'effectuer un suivi à faible précision.
FiI'l f,g erocéaure global.e CB-Position En effet, les événements sont envoyés unrquement en cas de chan-
EpnocÉotlng cB Position(pPosition Êst une géoPosition) gements significatifs de la position et à des intervalles supérieurs
Trace("Position acquise: " + pPosition.Latitude + " à plusieurs minutes.
.-- Utilisateur. i-ti1i;êteJ':rCcu-:.-Latitude = Pour notre exemple, ce type de suivi est largement suffisant.
-. rÉiri--i^,.-,:+i1l--+-,-;-a-,,-- l^--i+,,â-
Pour effectuer un suivi très précis, il est préférable d'utiliser la fonction
WLa n ga ge G PSSU itDéplocement.
7 I 9
La procédure CodePlNVolide du Champ Métier a été adaptée
pour reporter la saisie du code PIN dans le champ de saisie adapté.
Génération d'un
identifiant perso
Saisir un identifiant L'exemple permet d'obtenir les informations de géoloca-
lisation de ses contacts.
4r
Pour simplifier la saisie d'un nouveau contact, l'idée est d'attribuer
à chaque contact un identifiant personnalisé court.
W I N,O Dans notre exemple, le format de l'identifiant est "AAA-999".
! cxÂLsrs
n Look de popup
I ;r :l;:î;î::::ï1ï::
look popup:
:r ;'J::i::!:: ;ï:::i
d'affichage de la carte, l'exemple utilise des fenêtres au
.?, i&iendleiË
Webservice REST
taaaàd.fitI?:=ffik:= Pour mémoriser les utilisateurs et leur position, l'application
a.mdi.::.ie!*< = :l::,:lî;: h.ê{e.«iêt mobile communique avec un Webservice REST qui utilise
=
une base HFSQL locale.
FdèÈr€!.É!: Ie8fiFq
=
- /IglooilË
Avec WINDEV WEBDEV et WINDEV Mobile, la définition d'un
.: §€r
i*6id,Fæ§
*e*rdilk.:é{* Webservice REST est très simple: il s'agit d'une simple configuration.
M«hod.ffiP: € R.§sour(.r llest ensuite possible de définir les points d'entrée du Webservice:
= = . chemin d'accès (par exemple "/user/connect"),
. méthode HTTP (GET, POSI PUI ...),
Fd de b réponrÊ: ,s[nr{
= . procédure WLangage appelée,
: . format de la requête / de la réponse (texte, JSON, XML,
^slE€e ...).
Tims.&orédur. dffiÉréÊ
procéd u res
a Thred L'appel à un Webservice et la réception de sa réponse
ThrÊad hnd9àl peuvent prendre un certain temps (selon la connexion entre le
mobile et le serveur qui héberge le Webservice).
Commed i Pour éviter de bloquer l'utilisateur de l'application mobile lors des
fiorbrcd.loB: O l toB lffini
interrogations du Webservice, ces appels sont effectués dans un
E F<.m.d dr.lês appêt§: ;:
-:: :. : (HH:sM:ss:cc)
O $nr ûilieton d. HrSQt thread via un automatisme de procédure (voir par exemple la pro,
Avr( di[dion dr HFSQI:.opi. d..ontdc romplèt. konncrionr, po§{ions, r.quêtÈr, d.,,.) céd u re t/ÿS_ Ufi lisate u rC re e).
tu.( ûfidion dê HE5Qi.: {opic d. contd. téqèG (ronnuion5 uniqu.ncn0
I
DEV EVW EV
fonction CrypteGénèreCléRSA :
n Webservice REST est un Pro- Prérequis
gramme hébergé sur un serveuI
Pour une meilleure compréhension de cet bufCléPrivée est un Buffer
contenant des fonctions accessibles
article, il est préférabie de connaître: br-rfCléPublique est un Buffer
via des requêtes HTTP.
. le fonctionnement d'un Webservice REST ll Genéraiion de clés privées, publiques
Chaque fonction (également appelée API ou (bufCléPrivée,bufCléPublique) = ...
("https://doc.pc soft.f r /?10000227 92").
point d'entrée) correspond à un traitement CrypteGénèreCléRSA0
. le principe du cryptage asymétrique (LST 116,
exécuté sur le serveur. pages 70-71).
Pour réaliser un cryptage asymétrique depuis
Ces programmes, le plus souvent hébergés
en ligne, sont accessibles par n'importe quel
un couple de clés privé / publique, il faut
internaute: selon la nature du Webservice,
Principe utiliser les fonctions DécrypteAsymétrique
il peut donc être nécessaire de le sécuriser. et C ry pte Asy mét r iq u e'.
Cryptage asymétrique
Dans la LST 112, plusieurs solutions de sécu- La cryptographie asymétrique est un chiffre-
/1 Cryplage d'une chaîne de caractères
risation d'un Webservice ont été présentées. ment avec une clé publique et privée. bufMessageCryPté = ...
Cet article présente une autre manière de Le terme asymétrique s'applique dans le fait CrypteAsymétrique(...
sécuriser un Webservice via un cryptaqe qu'il y a deux clés de chiffrement, telles que si bufACrypter,
asymétrique. l'on réalise un cryptage avec la première clé, sFichierCléPublique,
seule la deuxième clé permet de retrouver le sMotDePasseCléPublique,
Les exemples "WW-APl-Crypte" et "WM API cryptePoddingPKCSl)
message initial.
Crypte" sont une mise en pratique de cette
solution. Pour générer un couple de clés privé / // ùécryptage
publique en WLangage, il faut utiliser la bufMessageDécryPté = ...
DécrypteAsymétrique(...
buf MessageCryPté,
sFichierCléPrivée,
s MotDePasseCléPrivée,
cryptePoddingPKCSl\
c,
*1"
o
aF '"--;.?-
'
1O - LA LETTRE DIJ SUPPORT TECHNIQUE PC SOFT - N'I 1.9
1. Pour chaque utilisateur de la base autorisé à se connecter
via I'application mobile, le couple de clés "privée /
publique" est généré et mémorisé en base.
F
Fflr
r')
C
T'
Fllr
2. L'utilisateur se connecte au site avec F
son login et mot de passe.
à
ô
^-, z
(]
4. Depuis l'application mobile,
l'utilisateur scanne le QR Code. E#E trt
t-
Ëffi ô
t-
5. La clé publique est enregistrée 3. Si l'authentification est Fllr
sur !e périphérique. correcte, le site affiche
la clé sous !a forme d'un
QR Code.
ï,
T
1. Lorsde I'appel au Webservice, l'application mobile T'
crypte les envois avec Ia clé mémorisée.
.f.ô,
m
t-
1/r
t:t. I m
t=iu@l - N
lll@l 3. Le Webservice envoie Ia réponse à l'application
lEl- mobile. ô
m
Rappel: une signature permet de s'assurer Ce site permet de gérer les utilisateurs et leur L'application cliente pourra alors crypter les
que les données n'ont pas été modifiées via clé de cryptage. données que l'utilisateur envoie au Webservice
un hash des données envoyées avant leur Pour cet exemple, l'utilisateur appelle un via cette clé publique.
cryptage. Webservice depuis une application mobile.
À chaque appel, le Webservice récupère la clé
Pour calculer un hash, il faut utiliser la fonction Le principe est le même pour une application
privée de l'utilisateur et décrypte les données.
HoshChoîne: desktop.
Le schéma ci-dessus présente l'architecture
//Signe une information Pour chaque utilisateur, le site génère un
de la solution proposée.
sSignature = HashChaîne(... couple "clé privée / clé publique". Le site
HA_M D5_1 28, sChaineASig ner)
fournit la clé publique à I'utilisateur au moyen
La mise en place de l'exemple est présentée
d'un QR Code. dans les pages suivantes.
Protection du Webservice
L'utilisateur scanne alors ce QR Code via son
La protection du Webservice passe par l'uti-
lisation d'un site lié au Webservice. application mobile pour récupérer sa clé.
ii
lâl Generation
Affiche ie QR CODE
.// dans un champ Ccde-barres
Iâi'iï5
CBÀ QRCode = MonQRCode
f o.t clés
La première étape est la génération
des clés (privée et publique) d'un utilisateur.
Dans l'exemple "WW-APl-CryPte", la
page "PAGE-Connexion" permet à l'utilisateur
Récu pérer
de se connecter. la clé de
Cette étape doit être réalisée en amont: il suffit
d'utiliser la fonction CrypteGénèreCléRSA Ce site doit partager les mêmes données que cryptage
pour chaque utilisateur autorisé à utiliser le le Webservice.
Pour cela, le mieux est d'utiliser un serveur La clé publique de l'utilisateur doit ensuite
Webservice.
HFSQL et de partager les données via ce être récupérée et mémorisée par I'application
Les 2 buffers obtenus doivent être mémorisés
cliente mobile.
dans le fichier de données "Utilisateur". serveur.
Note: pour faciliter le test de l'exemple, les Pour faciliter la lecture du QR Code, l'exemple
// Génère les clés de i'utilisateur
données de test ne sont pas présentes dans
bufCléPublique est un Buffer 'WM API Crypte" utilise le champ métier
bufCléPrivée est un Buffer un serveur HFSQL, mais elles sont dupliquées "Lecture de code-barres".
(bufCléPublique,bufCléPrivée) = ... dans les 2 configurations (site et Webservice).
Ce champ métier se compose de:
CrypteGénèreCléRSA0 . un bouton, qui ouvre une fenêtre dédiée
// Ménronse les clés Lorsque l'utilisateur se connecte au site, la
à la capture,
Utilisateur.ClePublique = bufCléPublique page "PAGE-Acces-APl" lui affiche sa clé . une fenêtre "FEN-CameraLectureCodeBarres"
Utilisateur.ClePrive = bufCléPrivée publique au moyen d'un QR Code.
comportant un champ Caméra paramétré
,// Autorise l'acces à I'utilisateur pour scanner automatiquement un code-
Utilisateur.CleActive = ÿroi //Récupère la cle de la base
barres de type QR Code.
H Modifie(Utilisateu0 sHexa est une chaîne
sHexa = BufferVersHexa(... Dès que le QR Code est lu par I'appareil mobile,
Pour faciliter le test de l'exemple, un fichier Utilisateur.ClePublique) une procédure callback locale à la fenêtre est
de données "Utilisateur" simplifié est présent, // Convertit le buffer en clrairre exécutée (dans notre exemple, il s'agit de la
avec un utilisateur "demo" déjà présent.
sHexa est une chaîne = bufHexa procédure Resultotlectu reCodeBarres).
//Genère le, code'bart'r:s Cette procédure reçoit en paramètre une
MonQRCode est un CodeBarres variable de type CodeBorres contenant le
En production, vous devez:
. modifier votre fichier de données "Utilisateur" MonQRCode..Typecontenu = cbïypeTexte
code-barres lu.
MonQRCode..TypeCodeBarres = ...
pour ajouter les rubriques "CléPrivée" et CB_QRCODE
"CléPublique", PROCÉDURE ResultatLectureCodeBarres(
MonQRCode..Contenu = sHexa
. utiliser le code de génération ci-dessus. MonCodeBarreLu est un CodeBarres)
<>
§14
o .\ ,/.
o
-\.
.\\-... -/.:."
-/-
,
A 2 - LA LETTRE DU SIJPPORTTECHNIQUE PC SOFT - N'l 'i9 '
Pour cela, la fonction fSouveBufferesl uTi- ri' Genère,Lr-: hasir (lepuis rÊtie siçn,:irrr-r li Cener'e la siçnature d'apres
lisée : sSignature = BufferVersHexa(... ;'r' iss donirees recuper-ées
HashChaîne(HA- M D 5_1 28, sSignature)) sSignatureCalculée est une chaîne
'/ Salr e t6 1lg 6jgn5 ie :eper'lc,.e
sSignatureCalculée = ...
r/ de l'application sDecrypte + sUtilisateur
fSauveBuffer(... Enfin, il suffit de réaliser l'appel au Webservice
sSignatureCalculée = ...
:.EmplacementCIePu
i; bI ique, via la fonction WLangage RESTEnvoie.
BufferVersHexa(...
HexaVersBuffer(...
HashChaîne(HA_ M D 5_1 28,
MonCodeBarreLu.Contenu)) /i Définit ia requete
sSig natu reCa lcu lée))
oRequete est un restRequête
oRequete.URL = ,.:, URL,WS + ["/"] + "test" . i5 .es sigr:31u's5 sont idenriques
Sl sSignatureCalculée = sSignature ALORS
oRequete.Méth ode = httpPost
oRequete.ContentType = ÿpe M ime Bina ire /r' Les données n'ont pas été modifiées
flâ|ff.î":.
depu rs
.// Ajoute l'utilisateLrr en entète
oRequete.Entête["Utilisateur"] =
sUtilisateur
,/l
...
)nctronnalrtes qul
fonctionnalités gagngl du
font ga9ner
qui Ïont rempl au 9u9ti!i9n;_,,-jr...i,,1
ou Jemps
i;5§l;.;.;'':,1,r.,,1.-' ', f
';..-;à.ii.rr:
';-;'
- .,,
r,l . ,:';'_.r;...,.:
*r,,..t.-,
Hïi:iiriîii;,ii;, i*$rHi+*t{rfi*iffiffi
Simpiifier I acces aux soils-élertreirts grâce au CAS 2 - AVEC <une variable
IL{
*f I "'-:=-
Le
--
rror cleAÿECperret de'anor se'une e.p'Ps AVEC Client
structure ou objet>
trier un tableau selon un tri personnalisé, défini procédure doit renvoyer 0. ,4 Si la longueur de l'élément 1 est plus petite
par une fonction WLangage. // que la longueur de l'élément 2, l'élément 1
Cette fonction sera appelée pour comparer // doit ëtre situé avant
chaque élément du tableau 2 à 2 et ainsi trier le Sl Taille(sElément1) < Taille(sElément2) ALORS
Fonctionnement de la procédure tableau comme attendu. RENVOYER -1
WLangage utilisée par !e tri
// Si lalongueurde l'élément 1 est plus grande
La fonction de tri attend 2 paramètres, qui cor- L'exemple "WD Wlangage LST119" présente la // que la longueur de l'élément 2,
respondent à 2 éléments du tableau à comparer. réalisation de deux tris personnalisés: // l'élément 1 doit être situé après
Sl Taille(sElément1) > Taille(sElément2) ALORS
PRoCÉDURE TriTableauPersonnalisé(... . un tri "basique" selon la longueur de chaînes
RENVOYER 1
sElément1 est une chaîne,... sur un tableau de chaînes.
sElément2 est une chaÎne) . un tri "multi-critères" sur un tableau de struc-
// Si les 2 chaînes sont de longueurs identiques,
// iltaut les trier par ordre alphabétique
La valeur renvoyée permet d'indiquer la position tures. RENVOYER ChaîneCompare(...
de l'élément 1 par rapport à l'élément 2: sElément1, sElément2, ccSonsCosse)
rement utiles pour ana yser, par exenip e es R ESTE nvoi e( rest Req)
est uD Ê:
APlVerif ieAttend
Remarque
.: a: i.i':"'- ::
-';i : .-,i r tr
ELongueCog nitiveAPl
i l: - rr:1. ir.- È,*
'.., APlTextAnolytics' TextAnolytics.AnalyseSentiment
=
D
17
WINDEV WEBDEV
I-
INTEGREZ DANS VOS APPLICATIONS
DES UI VUES AU WINDEV TOUR
Pendant le WINDEV TouL plusieurs exemples
ont été utilisés pour présenter les nouveautés de
WINDEV 25, WEBDEV 25 et WINDEV Mobile 25.
Vous êtes toujours nombreux à nous demander
comment réaliser certains aspects graphiques
utilisés dans ces exemples.
Ce sujet présente 4 looks de fonctionnalités issus
du WINDEV Tour 25 que vous pouvez retrouver
dans l'exemple "ExemplesLookWT25".
n Rearisation
o'une ooouo de
f saisie d'email
-
La saisie d'email est une opération cou-
rante dans une application Web. L'exemple
"ExemplesLookWT25" présente une popup de sai-
sie à l'interface actuelle et facilement réutilisable:
. Utilisation du champ de saisie riche (le contenu
du champ est en HTML). Notez qu'il est possible
d'intégrer une image dans ce champ par un
simple "drag and drop" puis de manipuler l'image
(rotation, recadrage, etc.).
v
ffi
- ffi
>citrier-iimporter-l -eVqlcrbir€\fi€hier.c.*t --
- -
V
Fülrier à importer : c\réperbire\fidrhr.ext
Légende
Lors du déplacement d'un champ, le dessin du magnétisme intelligent indique le ÿpe de magnétisme qui sera appliqué:
. les hachures représentent une marge entre . le trait plein représente un alignement sur . le trait pointillé représente un alignement
champs. Cette marge unique permet d'avoir un le bord d'un champ. sur le centre d'un champ.
espacement toujours identique entre tous les
champs, pour une Ul harmonieuse.
lmpoftant: les fonctionnalités du magnétisme intelligent sont disponibles dans tous les éditeurs (fenêtres, pages, états, ...) !
Cas 2
F+ofir du cûrrtpte : ex : elyne.prences À{ot de Fasse: @
ex : e§me.prences
tctêt d€ pèsse : r Ç
V
Avant le déplacement, le bouton "Outils" 2. Pendant le déplacement, si la position 3. L'espacement entre 2 boutons est également remar-
'1.
n'est pas aligné avec les groupes existants. courante respecte l'espace existant entre les
quable, et donc mis en avant lors du déplacement.
2 groupes, le magnétisme le met en avant. ll
ll est alors possible d'ajouter le bouton au 2ème groupe.
est alors possible de créer un 3ème groupe.
râce au champ lmaqe de des boutons de retablir I mage en parcourant Le composant interne 'OutilDess n" contient
WINDtV l'/obi e et d-. lonct on' le tab eau de l hrstor que. également:
de oessi^ du WLa^gage lçssire' Bien entendu, pour des raisons évidentes de . une fenêtre de paramétraqe du tracé,
dans une application mobrle est consommat on menroire, il est r'écessaire de . une fenêtre de sélection de couleur,
l miter e nombre de sauvegardes / nombre . deux co lections de procédures pour gérer
une opération simPle.
ll reste alors la question de l'Ul proposee de u'oo têIot,' o ' tôrê perm ) les fonctionnal tés des modèles de champs,
. deux classes permettant de gérer les diffé-
aux utllisateurs pour qérer les différentes
fonctionnalités nécessaires à la réaltsation Dans exemp e, t h stor que est implémenté rents outils de dessin.
d'un dessin / croquis / schéma. avec une l m te par defaut de T5 états sau-
vegardes. CettÊ llm te peut être paramétrée lntégration complète
par 1a constante g obale gnMemoireMox. Pour intégrer l'ensemble des fonctionna ités
Principe dans une appl cation existante. il suffit d im
L'exemple "WM Dessin" utilise les fonctions Définir des outils porter le composant nterne 'OutilDessin'
de dessin dXXX dtt Wlangage pour tracer Les drfférents crayons sont matérral ses sous puis d intégrer e modè e de champs MDLC-
des formes sur une image. forme de classes assoc ees à un modèle de App iDessin dans a fenêtre c ble.
L exemple 'WM Dessin" est composé de: champs afin de pouvoir proposer plusieurs
. un champ lmage qui sera modifié au toucher outi s ayant des proprétés différentes, par lntégration uniquement du
exemple un n-arqueur'1aune, au trait épais "Undo / redo"
de lécran (au doigt ou à laide d'un stylet),
. plusieurs outils permettant de modifier la mais transpa[ent. Si vous voulez permettre I ut lisation de his-
torique, la collection de procédures'COL
couleur, l'opacité et la taille de I'outii de dessin,
. une gestion de l'historique qui permet de Dans l exemp e Wh/ Dessin 3 nstances outi s UndoRedo contient toutes les procédures
re atives à a manipulation d'un h stor que.
revenir en arrière en cas d'erreur,
. des fonctionnalités de suppression ou d en-
sont déf inies ar,'ec leurs propr etés respectives.
Ces propriétes peuvent errslite etre nrod f ees
'e -
1. Ajoutez un aope à AjoutHistorique arx t)
registrement.
.Ae.eerlôu'Oero.lo.' Pr'- endroits oÙ vous vou ez enregistrer un nouvel
etat à sauveçlarder (en généraL, dans es évé-
nements reâché duchamplmage, MG-Note
Mise en æuvre Réutilisation page).
dans I exemp e, et à | initialisat on de 1a
Dessiner sur un champ lmage Le composant tnterne'OLttiiDess I es: co"l-l Aiortii is ic ric ue(d SauvelmagePNG (...
FË
"9
OæII -:à
50
Ajouter un historique
Pour implémenter un historique, il suffit de
sauvegarder l'image dans un tableau d'images IJndo/redo, taltle de crayon, opacité et régLoge de [a couLeur
après chaque modification et de permettre, via
tonctionr.r itls [.lnc]o i'1 Rr'(la al., ( (,rr I lntégration uniquement d'un EXemple
Inter nc. support de dessin
'\, I
barre d'outils l. :.
(r',:t',: lr,rrrrl.s l,'L-rLL
6,M
M.
t 'llL ili r
:,etlll,ll"
. , ..
,
I.
-f
""# - ïc
tuffi Ll:
i{iffi{
fuu
''\
etr|."
hs&kTr
hü.f
"fr*t-
\Yl,{ l,{esserrger WlllDE\./ À\obile 25 l'{esserrgPr (or]ligur atr,l
Do;r ciei-rcouer cirecterrent sur r-rr-r llerillherique Android, il suffit *%:
['#1.1
cr .rt I ser le nouveau cho x cle \'VINDEV Moblle 25: 'Déboguer sur
hb..T
;pparerl rrobile' .
Le periphérique à uti iser do i aLr pr.ea able être connecté à l'ordinateur Wi;
I
r
tl Déboguer sur appareil nrobile
et permettre e debogage.
l'.lote. lors du 'Go, une apDr cation spécifique est générée sur le
ffi:Ë
,jo*&.,,
ffi
L'
péripherique afin Ce ne pas ecraser ou perturber les données de
: l.r^r,., .,..,'L:tt-r. I.:.,.,'-- :: : :t . -.-
1'application fina e' qu peut être présente sur le périphérique.
Iii:.:1 ,; .,'.':rr- ::c::-i .' :,' r ::-e :1.'
\= L application lors d.r Go a alors pour nom GO <NomApplication>'.
INDEV permet de créer des témoin. s les 2 images sont différentes, une
tests automatiques de va i- erreur est générée dans le test. POUR i = 1 -À- lmageTémoin..Largeur
dation et de non-régression
POUR j = 1 -À- tmageTémoin..Hauteur
Sl lmageTémoin..Pixel[ij] < >
pour les projets. Mise en æuvre imagevariante..PixelIi,'J] ALORS
ll est possib e de créer un test r,, 1,, r i,,, ,t 'i l:'
. pour une fenêtre spécifique, La fonction WLangage dCopielmogeFe' NbDifférences+ +
. pour toute une application, nêtre permet d obtenir très facilement 'image FIN
. pour une procédure, correspondant à une fenêtre actuellement FIN
affic hée. FIN
Dans le cas d un test sur une fenêtre ou une CaptureFenetre est une lmage Si le nombre de prxels différents entre les 2
application complète, il peut être intéressant images dépasse un seuil (paramétrable), les
de vérifier 'visue lement" le rendu des fenêtres images sont considérées comme différentes et
(par exemple si a fenêtre utilise un champ CaptureFenetre = dCopielmageFenêtre(...
le test génère une erreur (fonction WLangage
Disposition qui affiche/masque des champs). Exemple, dSonsOmbre)
TestEcritRésultot\
L exemple 'WD Test Capture [crar' montre
En mode "enregistrement", I image est sim-
comment rnettre en place une vérification plement sauvée dans un fichier sur e disque
visuelle dans un test existant pour vérifier TestEcritRésultal(te r E r re u r, ...
pour servir de témoin. "La fenêtre ne correspond pas à son
si l'affichage d une fenêtre est identique à
témoin")
l'affichage attendu.
Temoin = fRepExe0 +"\FEN-Exemple.png"
Attention: pour comparer les captures de
Principe dSauvelmagePNG(... fenêtres entières, il faut prendre en considé-
CaptureFenetre, Temoin) ration les bordures de fenêtres. En effet, les
Pour tester le rendu visuel d une fenêtre lors
pixels en bordure dépendent du système et
d'un test, le principe est d enregistrer dans un
En mode "test". la capture effectuée est com peuvent donc varier d'un poste à | autre (si les
premier temps une image témoin (ou étalon
parée au fichier mémorisé lors du passage en tests sont exécutés sur des postes différents).
de comparaison) en jouant le test.
mode'enregistrement'.
L'image témoin est mémorisée physiquement
sur le disque. Pour déterminer s'il existe des différences,
I
les images sont comparées pixel par pixel.
Lorsque le test est rejoué par la suite, le rendu
visuel de la fenêtre est comparé à l'lmage
4. Pour indiquer que le prochain test est en mode "enregistrement", il est nécessaire de positionner la variable gbEnregîstrementde la collection
"COL_VérificationCapturesFenêtres" à ÿroi. Pour faciliter les prochains enregistrements, nous vous conseillons de positionner cette affectation
dans l'événement "Déclaration des globales" du test. m
// Enregistrement des interfaces
z
COL_VérificationCapturesFenêtres.g bEnregistrement = Foux
5. Par défaut, les images témoins sont sauvées dans le répertoire d'exécution de l'application. ll est possible de personnaliser ce répertoire en
7
m
mod if ia nt si m plement la v ariable gsRépe rtoireTémoin.
//Répertoire de stockage ô
COL_VérificationCapturesFenêtres.gsRépertoireTémoin = "C:\Mes tests automatiques\MonApplication\"
I- tt
6. Lancer un "Go" du test automatique: le test va se dérouler et enregistrer une image pour chaque appel à VértfteCaptureFenêtrc.
+
Si une erreur survient pendant l'enregistrement d'une image témoin, une erreur sera générée dans le compte-rendu du test.
Remarque: si une fenêtre met un certain temps à s'afficher (temps d'initialisation plus long que les autres), il est possible que la capture de
l'image ne s'effectue pas comme il faut. En effet, lors de l'appel à VérifieCoptureFenêtrc,la procédure effectue une pause avant d'effectuer
7
m
la capture. Par défaut, cette pause est de 1 seconde. ll est possible de modifier cette temporisation pour:
. toutes les fenêtres, en modifiant la variable globale gduAüente,
m
//lemps d'attente d'affichage des fenêtres par défaut
COL_VérificationCapturesFenêtres.gduAttente = 2s
. une fenêtre particulière, en ajoutant la temporisation souhaitée en paramètre à VérifieCopturcFenêtre.
z{
=
(l
7. Après enregistrement du test lorsque toutes les images témoins sont disponibles,lavariable gbEnrcgisfremeaf doit être repositionnée à fuux.
De cette façon, les prochains lancements de tests automatiques effectueront un contrôle des fenêtres par rapport aux images témoins.
\
EBDEV : ÉCRIRE 2 FOIS Mô INS
: CODE GRÂCE AU CODE M IXTE !
Web, le code se partage entre le navigateur et le serveur: c'est une
tion fondamentale de ce type d'application.
Avec WEBDEV il est possible de créer des procédures qui peuvent être
exécutées à la fois en navigateur et en serveur: ce sont les
procédures mixtes. Cet article présente un cas d'utilisation.
IT
o -------!
I
a
La fonction de vérification est d'abord exécu- Pour être encore plus génériques, les modèles est correcte).
tée côté navigateur pour éviter un aller-retour de champs permettent la saisie de n'importe Le champ Modèle de champs est ensuite
inutile au serveur, quel texte:adresse lP email, code référence, ... autonome et gère les appels aux procédures
Cette fonction est également exécutée sur le ll suffit de préciser aux modèles de champs et l'affichage tout seul.
serveur, en tant que "garde-fou" (quelqu'un une procédure de vérification et le libellé si
Note: En WEBDEV il est nécessaire de définir
peut altérer les données au milieu de la com- nécessaire (si celui-ci doit être modifié).
deux procédures de vérification:
munication). // Fonction cle validatiorr de l'adresse lP . une vérification basique (taille du champ,
Cette fonction de vérification est donc une ClvlOD,Saisie.:, ProcValidationSaisie = ...
expression régulière, ...), effectuée en navi-
fonction mixte. ValidationAd resselP
gateur.
// Fixe le Iibellé
. une fonction de validatlon, qui valide entiè-
CllCD,Saisie.SAl Saisie..Libellé = ...
Réutilisation "Adresse lP : " rement la saisie (ping d'une adresse, ...), effec-
tuée en serveur.
Pour faciliter la réutilisation du champ
Cette procédure doit:
avec vérification de saisie, l'exemple pro-
. accepter en paramètre une chaîne, qui sera
pose 3 modèles de chamPs (1 Par Pro-
renseignée avec la saisie de l'utilisateur,
I
duit), regroupé dans un composant interne . renvoyer le message d'erreur (si la saisie
"SaisieAvecVerification".
est incorrecte) ou une chaîne vide (si la saisie
,'J
aè -- -*4u.".
_drr 5 '-
Rappeler un rendez-vous à un contact? Prévenir un client d'une promotion
exclusive? Les occasions d'envoyer un SMS Sont nombreuses!
Dans la majorité des cas, les prestataires mettent à disposition une API sous
forme de Webservice pour envoyer des SMS.
L'exemple "WD SMS" propose de regrouper I'envoi d'un SMS via différents
prestataires dans un appel unifié.
ri i
ujourd hui, il existe p usieurs plate- Principe :
U .i ,......."'.",-."-',---.
k
j
' PicXXX t
..Rcl.rt;or(25)
:,,,, -i -::ll r::i-.
. . ir,-:ta:1.-
3()-
t.-
/i DéTinir un frligr'ane
oFiligraneDessin est une lmage
l/ Ecriture d'Lrn texte cians l'irnage
oFiligraneDessin.DessineTexte(0, 0, "MonFiligrane", RougeCloir)
// A)oule I'inrage dans ;n calque
gCalque est un picCalque = oFiligraneDessin
Note: À partir de Ia version "25 Update'1", il est possible d'utiliser un calque de type texte.
Lorsque le filigrane est défini, il suffit de le rendre visible (par défaut les calques créés sont
invisibles) puis de l'ajouter à l'image WDPic.
Redimensionnement d'u ne
image
Pour redimensionner une image, il suffit d'utiliser a fonction PicRedimensionne
Lorsque l'image est redimensionnée, il est possible de la sauver via la fonction PicSouve.
// Génère Lrrr WDPic clepuis le champ lmage
imgMini est un WDPic = IMG Redimensionner
// lmage rniniature
PicRedimensionne(imgMini, 32, 32, d rHomothétiqueCe ntré)
PicSauve(imgMini, fRepExe0 + ffSepl +
" Redimensionner\ProduitMini.png")
La fonction WLangage PicRedimensionne permet de redimensionner une image avec plusieurs
calques sans être obligé de manipuler chaque calque 1 par 1 et sans aplatir l'image.
I
/ /
Ajouter un filtre de validation d'image
Un autre exemple de manipulation de calques: il est possible de faire valider des
images à l'utilisateur en ajoutant un filtre de couleurs avec une opacité légère. Le fait
d'utiliser un calque pour réaliser cette opération permet de garder l'image de base
intacte (seul le calque est modifié).
Définit un fond
cFond est une Couleur
cFond = RVB(67,160,71)
cFond..Opacité = 110
dRectangle(oFondCouleur, 0, 0, oFondCouleur..Largeur, oFondCouleur..Hauteur, cFond)
// Aloute l'irnage dans un calque
gCalque est un picCalque = oFondCouleur
//Rend le calque visible
gCalque..Visible = Vroi
/i AjoLrte le calque au tableau des calques de I'image
TableauAjoute(oResultat.Calque, gCalque)
II
Pour récupérer l'image sans le voile de couleurs, il suffit de supprimer le calque avec la couleur
de fond.
I
LA LETTRE DU SUPPORTTECHNIQUE PC SOFT - N'I I9 - 31
DEV WEBDEV WI
J ou rna lisation
La jounalisation des modifications de HFSQL se configure
directement dans l'éditeur d'analyses de WINDEV ou WEBDEV
La journalisation des modiflcations est disponible pour HFSQL
des modiËitations Êffe.tuées depuis le c9/]2./2019 à 0û:o0:o0 Classic et HFSQL Client/Serveur, certaines informations spécifiques
n'étant disponibles qu'en mode Client/Serveur.
o*tf h.* §Jrq ;1;
opér*ticn I= rpplitatiæ p'
Êl Modifi(ation 11n2f/n1911:2z:gwdtst-urct Pour activer la.journalisation d'un fichier de données, il suffit d'éditer
t vt D€otPtc ,l tâtt Pt sold. les rubriques d'un fichier de données (menu conte)ctuel "Description
Etr.ÊgistrrEent ilënt noditi(ôtion 3
des rubriques"), puis de choisir une rubrique et d'activer l'option
Enreqirtre*st après nodifitôtion 5
"Journaler la rubrique" de l'onglet "Avancé".
ll est possible de consulter à tout moment l'ensemble des journaux
È Modificatian 11n2.r201911:2È?8 wdtst-urcr
depuis le Centre de Contrôle HFSQL (onglet "lournaux").
FAA "Historique"
1t110/2019 I t17,06€ Lorsqu'une rubrique journalée est lié à un champ (que ce
soit un champ de saisie ou même un champ Table), le menu
contextuel du champ concerné propose la FAA "Historique".
Cofer '15lllll'à0I9'
Cette FAA "Historique" ouvre une fenêtre présentant les 100 dernières
Copier la l§ne
modifications sur la valeur de la rubrique pour l'enregistrement lié.
Copier la colonne
Cette fenêtre de FAA présente non seulement les valeurs successives
de la rubrique, mais également des informations complémentaires
très utiles comme: la date et l'heure de modification, le poste et
tdsàjr§er - {Ha:
l'application ayant effectué la modification ou encore une informa-
yidtst_Er r 1167 € tion personnalisable.
/l Composant lnterne
tabHistorique est un tableau de structHistorique
// On se positionne sur I enregistrement
LitRecherchePremier(Compte, lDCompte,...
O I "HistoriqueJournal" H
TAB LE-Compte.CO L_l DCompte)
i-tntmantùrri
--.
lournalisâtion
Optimisations
ÿ ,ourmlcr la rubriquc 1. Journaler une rubrique occupe de l'espace de stockage
r/r"".1""-È-iii"üi:"i et ralentit les écritures. ll est donc important de sélectionner
Le RAD doit generer pour cette rubrique : les rubriques à journaler.
ÿ unr (olonne en modc tabla 2. Ajouter des clés dans les fichiers journaux pour des manipulations
ÿ un chèmp cn modcfichc avancées sur des rubriques qui ne sont pas clés dans l'analyse. Pour
ÿ un chômp pour l.r états cela, il suffit d'activer l'option "La rubrique est une clé dans le jour-
- nal" dans l'onglet "Avancé" de la rubrique dans l'éditeur d'analyses.
GUID de la rubrique
3. Purger desjournaux "trop anciens" : c'est une solution extrême
mais toujours possible par l'outil "WDJournal".
Anatyse 5.5 (par compatibilité)
4. Récupération de l'historique de modifications de plusieurs rubriques
Rubriqu. Bigrér d'une aBbEc WinDd 5.s/Wrboë 1,5
en un seul appel au composant interne "Historiqueiournal" ou à la
fonction WLangage HHistoriqueModificotion (attention I'analyse
du résultat peut alors être complexe).
HFSQL Classic et
Client / Serveur
Si fonctionnellement la journalisation des modifications est
/ Serveuç ce n'est pas le cas des
similaire en mode Classic et Client
bases permettant de stocker les informations des journaux.
I
LA LETTRE DU SUPPARTTECHNIQUE PC SOFT - N'I I9 - 33
Lr SnvrEZ-VüLJs î
ry
Ranger les procédures locales d'un élément {fenêtres, collection...)
Les "Perso-dossiers" permettent de simplifier I'organisation des projets en permettant de regrouper les éléments
(fenêtres, classes, collections de procédures, ...) de votre application par thèmes.
ll est également possible d'ajouter des perso-dossiers dans un élément (une fenêtre par exemple) pour organiser
les procédures de cet élément. Cette fonctionnalité est particulièrement utile si un élément contient un grand
nombre de procédures pour lesquelles le tri alphabétique ne suffit pas à regrouper les éléments "thématiques".
Pour créer un perso-dossier dans un élément, il suffit de sélectionner I'option contextuelle "Nouveau perso-dossier"
de l'élément (ou sur le sous-élément "Procédures locales" dans le cas des fenêtres).
Remarque: I'option contextuelle "Déplacer vers ... " permet de déplacer les procédures dans un perso-dossier ou de
les remettre à la racine de l'élément.
ÿù Aperçulmg6coprÊ
Bçbrateur th prrjet - x 'È ApsçulmgsErmsÊnt
pi*. t ApsçulrugsFclre
rffi FEN-GDS| r* ltn{r:
il
.î #-,..e'l'-
» ChampÊ 'è optAffiôslmgrc0ansRcpL«al
! optlmgcAnnuls[rdra<tion
tg optlmgtAperculaillefléelle
}È optlmage(mvwtir
! tt H",rret. p*.0*!"."F }1 ofilmgdopitrApacu
t1 -c*caom-suppfnll -
;È
-c*é9.ri.-9rp;-d X.-,r**"atlr- ! optlmagckportMac
-CmptàgcSouEÈr ,/ N
o1
-lma9e-Annulerortra, l* l^l
Supprimü
.l ,
Dhbvtr ?N
* Editsl..oa. l.\
Editr h codc daæ uh\àrych roet
Paramês ls autmatirc de h Ptré
§ wDt«tærnss
*î t§orr n§s - TUSlfV 25 - tFEll-Prhc[* - Procddrre bc* nÆ-ltrcta (G6 : tbt ocrf$l
tgrtüi$[ potaio.r:
ü.n-I- ÀÉ*È
dC
tlrtfliÇic dc rdi.ii.n:
â:r'4 ilûEar
.
RÊtour llüil
ffi
AIct r
fâér:nf
lisateur, la couleur est récupérée via e code . gCouleur contient la couleur dans une
à chaque changement du champ HTML, Javascript suivant: variable de Iype Couleur.
l'événement navigateur "Action de <CMP EXTERNE document
MonChamp> ' sera appelé. Note: le modèle de champs doit obligatoi
rement être initialisé avec une cou eur dans
Depuis cet événement, il est possible d accé Hex est une chaîne
' Hex = document:getElementByld(... I événement ' nitialisation' de la page.
der au serveur en utilisant simplement la fonc-
"textcolor"):value
tion WLangage AJAXExécuteAsynchrone
(ot AJAXExécute). I
franl
a saisie assistée permet d'afficher à L'astuce consiste donc à surcharger ces 2 Réutilisation
I utilisateur des propositions perti- styles dans la page HTML afin d appliquer le
nentes par rapport à sa saisie et au rendu souhaité. Pour faciliter la personnalisation de la saisie
balise <sÿle>.
I
complete-term") sur la partie du texte qu Cette opération est réalisée via la propriété
correspond à la saisie courante. ..HTMLEntête sur la page.
tüocliie i'extete de la page actuelle
,'.;
Le code HTML correspondant est: MaPage..HTMLEntête + = 1
Polynésie .ui-autocomplete-term i
< span class= "ui-autocomplete-term" > font-weight:bold!important;
fra n color:#9999ff i m portant;
!
</span > )
çaise
< /STYLE >
</a> l
GESTI
n entrepr se, i est tres frequent de Cette fonction permet d activer ou de para Pour savoir sl un scanner dispose de cette
disposer de scanners mult pages. Dans métrer es options avancées des scanners fonctlonna lté i suffit d utiliser la fonct on
vos applicatrons W NDEY i est sou récents. WLangage TwoinPropriété avec la constante
vent nécessaire d ut l ser cette capa . détection de bord, TwoinRestoVerso.
cité, par exempLe pour scanner une iste de . détection de codes-barres,
bons de corrmande. . redimens onnement autornatiqJe,
. saut de page blanche,
L utilisat on du chargeur du scanrer est beau
coup plus rap de que a numer sation à la RectoVerso..Visible = TwainPropriété(...
main page par page . Bien entendu, il est uniquement possib e Twa i.n RectoVerso)
laque le a gestron des scanners mu tipag."s Pour actlver la propriété Chargeur , il suffit co n sta nte Twa in RectoVersoActivé :
Vos questions,
les réponses du Support Technique Gratuit !
Par exemple:
Pour un projet nommé "MonProjet" dont la configuration se nomme
D
Perfoiffiânces ', ,
Lorsqu'une application WINDEV met un temps anormalement long Exemple de code côté serveur (application
pour effectuer un traitement, il peut être utile de demander le lance- WEBDEV ÿpe Webservice REST)
ment de cet outil pour obtenir un rapport immédiat.
Pour activer I'analyseur de performances, il suffit d'utiliser le raccourci PROCÉDURE uploadO
"Windows+Shift+F10". bufUploadedFile is Buffer = WebserviceParametre(paramBuffer)
L'analyse sera stoppée avec le raccourci "Windows + Shift + Fl1" SlfSauveBuffer("uploadedFile.txt", bufUploadedFile) ALORS
ou à l'arrêt de l'application. RENVOYER bufUploadedFile
FIN
Comment expliquer une différence Le fichier sera sauvegardé dans le répertoire des données du Webservice.
mm
Par exemple le code suivant:
Exemple de code côté client (application Afin de lever l'ambiguité et permettre la compilation, il suffit de préfixer
WINDEV) le ÿpe par son emplacement (le nom de I'assemblage, le nom du
Webservice, le nom de la collection de procédures, ...).
cMaRequete est un restRequête
cMaRequete..Méthode = httpPost Pour notre exemple, la ligne de code devient ainsi:
cMaRequete..URL = "http://monserveur/u pload'
cMaRequete..Contenu = KhargeBuffer(... //Projet ayant l'assemblage
fRepDonnées + fSep + "fileToupload.txt") //"Microsoft.Exchange.WebServices" importé
oServiceExchange:Url = new System.Uri(...
RESTEnvoie(cMa Requete)
'https://msmail.montest.com/ews/Exchange.asmx")
peut proposer une application Un exemple parlant de cette combinaison est le code utilisé dans le
Champ Métier "Bouton avec Jauge".
WINDEV Mobile pour les
Ce bouton permet d'afficher automatiquement une jauge infinie
smartphones mais pas les tablettes? par-dessus le champ Bouton, le temps d'exécution du "traitement long".
Dans l'assistant de génération de l'application Android, à l'étape Voici le code (simplifié pour I'article) de ce bouton. N'hésitez pas à
"Google Play Store", la table des fonctionnalités contient les limitations tester ce Champ Métier directement depuis WINDEV.
déduites des traitements de l'application.
Par exemple, si I application utilise la fonction Wlangage telDiolerAf- ,r/ Desactivë le boutori
Éîlj_Traitement..Etat = Grisé
fiche (qui permet d'ouvrir l'application de téléphonie), la fonctionnalité
"android.hardware.telephony" est automatiquement a.joutée. il CrÉe ie charnp -l6ugs par-dessus ie bouton
Malauge est un Champ <- ChampCrée("JAUGE-lnfinie",
Cette fonctionnalité permet d'indiquer au Play Store qu'il doit proposer
ÿplougel nfinie, BTN_Traitement..X, 3îN-Traitement..Y,
cette application uniquement aux périphériques capables de téléphoner. Bîi'j,Traitement..Largeur, 3-iN-Traitement..Hauteur,
Vroù
Android tr x Malauge..Opacité = 25
Génération de l'application Ma.lauge..Altitude = 3Tl'i-Traitement..Altitude+ 1
Afin de mieux faire découvrir les FAA aux utilisateurs finaux des applications,
WINDEV propose plusieurs mécanismes.
I
j ILe
^ +^^-+ I l-.)l )!
LUclS L La i)Crptli- -:-
I tJ
1*Xji: .\. t),r r ' .1. .r ,..,!., r .-r Llr :1,:-i t::l I
,1,.1:-' - .1 .1., rr i i'l
;4r u
'rI::' ',':.' l,r, r' .r,. .'. '"i[-', . t'
,-:,
lell-l)i ar, :P']]lri.l II i,tt-.' -. :.. : .: .. r.,:r: :,:h':...,. r,il :itLtrI
. -ti:,. .;.:. .i: ,ir)l)
Le ta.l,t D.r: i)it, .t a.,rr Ê:,; a,it :j--:--'
" '- l : r' j