Documente Academic
Documente Profesional
Documente Cultură
1 BASIC .......................................................................................................................................... 6
1.1 B4x ....................................................................................................................................... 6
1.1.1 B4A Android ................................................................................................................. 6
1.1.2 B4i iOS .......................................................................................................................... 6
1.1.3 B4J Java Desktop ........................................................................................................... 7
1.1.4 B4R Arduino ................................................................................................................. 7
2 Variables et objets ........................................................................................................................ 8
2.1 Types de Variable ................................................................................................................ 8
2.2 Noms de variables .............................................................................................................. 12
2.3 Dclaration de variables ..................................................................................................... 12
2.3.1 Variables simples ........................................................................................................... 12
2.3.2 Tableaux (array) de variables ......................................................................................... 14
2.3.3 Tableaux dobjets Views / Nodes ................................................................................. 16
2.3.4 Variables Type B4A, B4i et B4J seulement................................................................. 19
2.4 Assignation (Casting) ......................................................................................................... 20
2.5 Porte (Scope) .................................................................................................................... 21
2.5.1 Variables Processus ........................................................................................................ 21
2.5.2 Variables Activity B4A seulement................................................................................ 23
2.5.3 Variables Locales ........................................................................................................... 23
2.6 Conseils .............................................................................................................................. 23
3 Flux du programme / cycle de vie .............................................................................................. 24
3.1 B4A .................................................................................................................................... 24
3.1.1 Dmarrage dun projet ................................................................................................... 25
3.1.2 Variables Process global ................................................................................................ 26
3.1.3 Variables Activity .......................................................................................................... 26
3.1.4 Starter service ................................................................................................................. 27
3.1.5 Flux du programme ........................................................................................................ 28
3.1.6 Sub Process_Globals / Sub Globals ............................................................................... 29
3.1.7 Sub Activity_Create (FirstTime As Boolean) ................................................................ 29
3.1.8 Rsum des dclarations de variables ............................................................................ 30
3.1.9 Sub Activity_Resume Sub Activity_Pause (UserClosed As Boolean) .......................... 31
3.1.10 Activity.Finish / ExitApplication ............................................................................. 32
3.2 B4i ...................................................................................................................................... 33
3.3 B4J ..................................................................................................................................... 34
3.4 B4R .................................................................................................................................... 35
3.5 Comparaison du flux B4A / B4i / B4J .............................................................................. 36
3.5.1 Dmarrage du programme B4A / B4i / B4J .................................................................. 36
3.5.2 Rotation du dispositif B4A / B4i ................................................................................... 36
4 Langage Basic ............................................................................................................................ 37
4.1 Expressions ........................................................................................................................ 37
4.1.1 Expressions mathmatiques ........................................................................................... 37
4.1.2 Expressions relationnelles .............................................................................................. 38
4.1.3 Expressions boolennes ................................................................................................. 38
4.2 Mots cl standard ............................................................................................................... 39
Abs (Number As Double) As Double ............................................................................ 41
ACos (Value As Double) As Double ............................................................................. 41
ACosD (Value As Double) As Double .......................................................................... 41
Array .............................................................................................................................. 41
Asc (Char As Char) As Int ............................................................................................. 41
ASin (Value As Double) As Double .............................................................................. 41
ASinD (Value As Double) As Double ........................................................................... 41
ATan (Value As Double) As Double ............................................................................. 41
ATan2 (Y As Double, X As Double) As Double........................................................... 41
Table des matires 3 B4x Langage Basic
Pour chercher un mot ou une phrase particulire veuillez utiliser la fonction Rechercher dans
le menu Edition.
1 BASIC
En programmation, le BASIC (acronyme pour Beginner's All-propose Symboliques Instruction
Code, littralement Code d'instructions symboliques multi-usages du dbutant ), est une famille
de langages de programmation de haut niveau ayant pour but la facilit d'utilisation.
Le langage BASIC a t conu en 1964 par John George Kemeny (1926-1993) et Thomas Eugene
Kurtz (1928-) au Dartmouth Collge pour permettre aux tudiants des filires autre que
scientifiques d'utiliser des ordinateurs. Les langages de programmation de l'poque taient en effet
plus adapts la carte perfore qu'aux terminaux interactifs. Mme le Fortran II, peu volu bien
que dj complexe, tait inadapt aux calculs matriciels dont on faisait dj usage en sciences
humaines. Non interactifs, ces langages exigeaient qu'un programme ne comporte pas une seule
erreur de syntaxe pour tre excut (source Wikipedia).
B4R, B4A, B4J et B4i constituent ensemble la meilleure solution de dveloppement pour lInternet
des Objets (IdO), en anglais Internet of Things ou IoT)
1.1 B4x
B4X est une suite d'diteurs (IDE) de dveloppement rapide d'applications qui permet la cration
d'applications pour les plates-formes suivantes: Google Android, Apple iOS, Java, Raspberry Pi et
Arduino. B4X utilise un dialecte propritaire de Visual Basic (ci-aprs dnomm "B4X") et dispose
galement d'un concepteur visuel (Visual Designer) qui simplifie le processus de cration
d'interfaces utilisateur.
B4J - Outil de dveloppement moderne similaire VisualBasic VB6 pour les solutions
multi plate-forme de bureau, serveur et IOT.
B4J est un outil de dveloppement 100% gratuit.
Avec B4J, vous pouvez facilement crer des applications de bureau (IHM, Interfac
Homme Machine), des programmes de console (non-IHM) et des solutions de serveur.
Les applications compiles peuvent tre excutes sur des cartes Windows, Mac, Linux et ARM
(telles que Raspberry Pi).
2 Variables et objets
Une variable est un nom symbolique donn une quantit ou information connue ou inconnue, afin
de permettre l'utilisation du nom indpendamment de l'information qu'il reprsente. Un nom de
variable dans le code source dun programme d'ordinateur est gnralement associ un
emplacement de stockage de donnes et donc aussi son contenu, et ceux-ci peuvent changer au
cours de l'excution du programme (source Wikipedia).
B4R
Byte 0 - 255
Int (2 bytes) -32768 - 32768. Similaire au type Short type dans les autres langages B4x.
UInt (2 bytes) 0 - 65535. Spcifique B4R.
Long (4 bytes) -2,147,483,648 - 2,147,483,647. Similaire au type Int dans les autres B4x.
ULong (4 bytes) 0 - 4,294,967,295 spcifique B4R.
Double (4 bytes) virgule flottante 4 octets. Similaire Float dans les autres langages B4x.
Float est identique Double. Short est identique Int.
Les indications ci-dessus sont valables pour toutes les cartes, y compris la Arduino Due.
Autres types :
Boolean True ou False (vrai ou faux). Sauv en tant que octet (byte) avec les valeurs de 1 et 0.
String Strings sont des tableaux de octets (bytes) finissant avec un octet nul (octet avec une valeur
0).
Object Objets pouvant contenir nimporte quel type de valeurs.
2.1 Types de variables 10 B4x Langage Basic
Les types primitives sont toujours passs par valeur dautres routines (Sub) ou sils sont attribus
dautres variables.
Par exemple :
Sub S1
Private A As Int
A = 12 La variable A = 12
S2(A) Elle est passe par valeur la routine S2
Log(A) ' Affiche 12 La variable A est toujours gale 12,
mme que la variable B a t change dans la routine S2.
End Sub
Tous les autres types, inclus des tableaux de types primitive ou des objets String sont considrs
comme type non-primitif.
Si vous passez un type non-primitif une routine ou si vous lassignez une autre variable, une
copie de la rfrence est passe.
a veut dire que la donne elle-mme nest pas duplique.
Ceci est diffrent de passer par rfrence car on ne peut pas changer la rfrence de la variable
dorigine.
Vous vous attendez ce que 2 soit affich. Toutefois cest 10 qui sera affich !
Nous avons cr un tableau simple et ajout 5 rfrences de ce tableau la List.
Les valeurs dans le tableau sont les valeurs dfinies lors de la dernire itration.
2.1 Types de variables 11 B4x Langage Basic
Pour corriger ceci, nous devons crer un nouveau tableau chaque itration.
Ceci est fait en dclarant Private arr(3) dans chaque itration :
C'est vous de dfinir le nom dune variable, sauf pour les mots rservs.
Un nom de variable doit commencer par une lettre et doit tre compos des caractres suivants A-Z,
a-z, 0-9 et soulign "_", pas d'espaces, pas de parenthses etc.
Les noms de variables sont insensibles la casse, cela signifie que Indice et indice se rfrent la
mme variable.
Pour les objets Views (B4A, B4i), Nodes (B4J), il est utile dajouter au nom un prfixe de trois
caractres qui dfinissent le type de lobjet.
Exemples :
lblCapital lbl > Label Capital > fonction
edtInterest edt > EditText Interet > fonction
btnSuivant btn > Button Suivant > fonction
Les variables doivent tre dclares avec les mots cl Private ou Public suivis par le nom de la
variable, puis le mot cl As et suivi par le type de variable. Pour plus de dtails, voir chapitre Porte.
Il existe aussi le mot cl Dim, qui est maintenu pour compatibilit.
Exemples :
Private i As Int Dclare deux variables en tant que Int, nombres entiers.
Private j As Int
Les mmes variables peuvent aussi tre dclares de manire plus courte.
Les noms des variables spares par des virgules et suivies par la dclaration du type.
2.3 Declaration de variables 13 B4x Langage Basic
Private txt = "test" As String, valeur = 1.05 As Double, flag = False As Boolean
Les noms dobjets (View, Node) doivent tre dclars si on veut les utiliser dans le code.
Par exemple, si nous voulons changer le texte dun objet Label dans le code tel que
lblCapital.Text = "1200",
nous devons au pralable rfrencer cet objet Label avec son nom lblCapital, ceci est ralis avec
la dclaration Private lblCapital As Label.
Si nous ne font jamais rfrence cet objet Label nimporte o dans le code, aucune dclaration
nest ncessaire.
Si nous utilisons une routine vnement pour cet objet, l aussi, aucune dclaration nest ncessaire.
Pour allouer une valeur une variable crivez son nom suivi par le caractre gal et suivi par la
valeur, comme :
Capital = 1200
NomDeFamille = "SMITH"
Notez que pour Capital nous avons crit 1200 car Capital est un nombre.
Mais pour NomDeFamlle nous avons crit "SMITH" car NomDeFamille est une variable texte (String).
Les textes doivent tre mis entre deux guillemets.
2.3 Declaration de variables 14 B4x Langage Basic
Les tableaux sont des collections de donnes ou dobjets qui peuvent tre slectionns par des
indices. Les tableaux peuvent avoir plusieurs dimensions.
Les dclarations comprennent le mot cl Private ou Public suivi par le nom de la variable
NomDeFamille, le nombre dlments entre parenthses (50), le mot cl As et le type de la
variable String.
Pour des dtails, voir le chapitre Porte. Il existe aussi le mot cl Dim, qui a t maintenu pour
compatibilit.
Exemples :
Public NomDeFamille(50) As String
Tableau de Strings une dimension, nombre total dlments 50.
Public Matrix(3, 3) As Double
Tableau de Doubles deux dimensions, nombre total dlments 9.
Public Data(3, 5, 10) As Int
Tableau de Int trois dimensions, nombre total dlments 150.
Lexemple ci-dessous montre comment accder aux lments dans un tableau trois dimensions.
For i = 0 To 2
For j = 0 To 4
For k = 0 To 9
Donnes(i, j, k) = ...
Next
Next
Next
Une manire plus gnrale pour dclarer des tableaux est dutiliser une variable.
Nous dclarons la variable Public NbPers = 10 As Int et lui attribuons la valeur 10.
Nous dclarons les tableaux avec cette variable au lieu du nombre 10 auparavant.
Lavantage de cette faon de dclarer des tableaux est lorsqu on doit une fois changer le nombre
dlments on ne modifie quUNE seule valeur.
Et la routine daccs.
For i = 0 To NbX - 1
For j = 0 To NbY - 1
For k = 0 To NbZ - 1
Donnes(i, j, k) = ...
Next
Next
Next
Des objets Views / Nodes ou autres objets peuvent aussi tre des tableaux (Array).
Dans B4A et B4i les objets dinterface utilisateur sappellent View et sappellent Node dans B4J.
Dans lexemple ci-dessous les boutons (Buttons) sont ajouts lobjet View / Node parent dans le
code.
B4A
Sub Globals
Private Boutons(6) As Button
End Sub
For i = 0 To 5
Boutons (i).Initialize("Boutons")
Activity.AddView(Boutons(i), 10dip, 10dip + i * 60dip, 150dip, 50dip)
Boutons (i).Tag = i + 1
Boutons (i).Text = "Test " & (i + 1)
Next
End Sub
Sub Boutons_Click
Private btn As Button
btn = Sender
Log("Bouton " & btn.Tag & " cliqu")
End Sub
B4i
Sub Process_Globals
Private Boutons(6) As Button
End Sub
Private i As Int
For i = 0 To 5
Boutons (i).Initialize("Boutons")
Page1.RootPanel.AddView(Boutons (i), 10dip, 10dip + i * 60dip, 150dip, 50dip)
Boutons (i).Tag = i + 1
Boutons (i).Text = "Test " & (i + 1)
Next
End Sub
Sub Boutons_Click
Private btn As Button
btn = Sender
Log("Bouton " & btn.Tag & " cliqu ")
End Sub
2.3 Declaration de variables 17 B4x Langage Basic
B4J
Sub Process_Globals
Private Boutons(6) As Button
End Sub
Private i As Int
For i = 0 To 5
Boutons (i).Initialize("Boutons")
MainForm.RootPane.AddNode(Boutons (i), 10, 10 + i * 60, 150, 50)
Boutons (i).Tag = i + 1
Boutons (i).Text = "Test " & (i + 1)
Next
End Sub
Les boutons (Buttons) auraient aussi pu tre dfinis dans un fichier layout, dans ce cas, ils ne
doivent pas tre initialises, ni ajout un objet parent et les proprits Text et Tag dfinies dans le
concepteur visuel.
Dans ce cas, le code serait le suivant :
B4A
Sub Globals
Private b1, b2, b3, b4, b5, b6, b7 As Button
Private Boutons() As Button
End Sub
Sub Boutons_Click
Private btn As Button
btn = Sender
Log("Bouton " & btn.Tag & " cliqu ")
End Sub
2.3 Declaration de variables 18 B4x Langage Basic
B4i
Sub Process_Globals
Sub Boutons_Click
Private btn As Button
btn = Sender
Log("Bouton " & btn.Tag & " cliqu ")
End Sub
B4J
Sub Process_Globals
Une variable Type ne peut pas tre prive (private). Une fois dclare, elle est disponible
nimporte o (similaire aux modules Class).
Lendroit le plus appropri pour dclarer les Type est dans la routine Process_Globals dans le
module Main.
Le nouveau type personnel est Personne, puis nous dclarons soit des variables uniques ou des
tableaux de ce type.
Pour accder un lment particulier utilisez le code ci-dessous.
UtilisateurActuel.NomDeFamille
UtilisateurActuel.PrNom
Utilisateur(1).NomDeFamille
Utilisateur(1).PrNom
On peut aussi assigner une variable type une autre variable du mme type comme ci-dessous.
UtilisateurActuel = Utilisateur(1)
2.4 Assignation (Casting) 20 B4x Langage Basic
B4x assigne automatiquement les types aux besoins. Des nombres sont automatiquement convertis
en objets String et vice et versa.
Dans beaucoup de cas vous devez manuellement assigner un type dfini un objet.
Cela se fait en assignant lobjet une variable du type requis.
Par exemple, le mot cl Sender reprsente lobjet qui a gnr un vnement.
Le code ci-dessous change la couleur du bouton press.
Notez quil y a plusieurs boutons qui partagent la mme routine dvnement.
Sub Globals
Private Btn1, Btn2, Btn3 As Button
End Sub
Sub Btn_Click
Private btn As Button
btn = Sender ' Assigne lobjet Button
btn.Color = Colors.RGB(Rnd(0, 255), Rnd(0, 255), Rnd(0, 255))
End Sub
Sub Globals
End Sub
Sub Btn_Click
Private btn As Button
btn = Sender ' Cast the Object to Button
btn.Color = Colors.RGB(Rnd(0, 255), Rnd(0, 255), Rnd(0, 255))
End Sub
2.5 Porte /(Scope) 21 B4x Langage Basic
Nanmoins, dans B4A, pas tous les types de variables peuvent tre dclares en tant que variables
processus.
Par exemple, des objets views / nodes ne peuvent pas tre dclares comme variables processus.
La raison est que nous ne voulons pas garder des rfrences pour des objets qui sont dtruits en
mme temps que lActivity.
Autrement dit, lorsque lActivity est dtruite, tous les objets view qui sont contenus dans lActivity
seront aussi.
Si nous maintenions une rfrence pour une objet view, le collecteur de ressources (garbage
collector) ne pourrait pas librer les ressources et nous pourrions avoir un manque de mmoire. Le
compilateur soutient cette exigence.
Pour accder des variables processus dans dautres modules que celui o elles sont dclares on
doit ajouter son nom le nom du module o elles sont dclares en prfixe avec un point.
Exemple :
Variable dfinie dans un module avec le nom : MonModule
Sub Process_Globals
Public MaVar As String
End Sub
On peut dclarer des variables prives dans la routine Sub Process_Globals comme :
Private MaVar As String
Cette variable est prive pour le module dans lequel elle est dclare.
Pour des Activities il est prfrable de les dclarer dans la routine Sub Globals.
Pour des variables dclares dans des modules Class dans la routine Sub Class_Globals les mmes
rgles que ci-dessus sappliquent.
Les variables dclares dans une sousroutine sont locales cette sousroutine.
Elles sont "prives (private)" et ne sont disponibles que dans la routine o elles sont dclares.
Tous les types dobjets peuvent tre dclars en tant que variables locales.
A chaque excution de la routine, les variables locales sont initialises leur valeur par dfaut ou
toute autre valeur que vous aurez dfinie dans le code et elles seront dtruites lors de la sortie de la
routine.
2.6 Conseils
Un objet view / node peut tre assign une variable et vous pouvez aisment changer des
proprits communes de ces objets.
Par exemple, le code ci-dessous dsactive tous les objets view / node appartenant lobjet Panel /
Pane :
For i = 0 To MonPanel.NumberOfViews - 1
Private v As View
v = MonPanel.GetView(i)
v.Enabled = False
Next
For i = 0 To MonPanel.NumberOfViews - 1
Private v As View
v = MonPanel.GetView(i)
If v Is Button Then ' vrifie si cest un Button
v.Enabled = False
End If
Next
Note : MonPanel est un objet Panel dans B4A et B4i mais est un objet Pane dans B4J.
3 Flux du programme / cycle de vie 24 B4x Langage Basic
3.1 B4A
Commenons simplement :
Chaque programme B4A est execute dans son propre processus.
Un processus a une tche principale (main thread) qui est aussi appells tche IU (interface
utilisateur) (UI thread) qui est actif aussi longtemps que le processus. Un processus peut avoir plus
quune tche qui sont utiles pour des tches en arrire-plan.
Un processus dmarre lorsque lutilisateur dmarre votre programme, en admettant quil nest pas
excut en arrire-plan.
La fin du processus nest pas vraiment dtermine. Cela survient quelque temps aprs que
lutilisateur ou le systme naient ferme toutes les Activities.
Si, par exemple, vous avez une Activity et que lutilisateur a press la touche Retour (back key),
lActivity sera ferme. Plus tard, quand le dispositive arrive court de mmoire (ce qui peut arriver)
le processus sera dtruit.
Si lutilisateur rexcute le programme et que le processus ntait pas dtruit, alors le mme
processus sera repris.
Une des diffrences majeures est que, quand une Activity nest pas en avant-plan elle peut-tre
dtruite pour preserver de la mmoire. Il est judicieu denregistrer ltat de lActivity avant quelle
ne soit perdue. Soit dans une mmoire persistante ou dans une mmoire qui est associe au
processus.
Plus tard, cette Activity sera recre en cas de besoin.
Le Service Starter est utilis pour dclarer toutes les variables ProcessGlobal, et ces variables sont
accessibles depuis nimporte quel module dans le projet.
LActivity Main est lActivity de dmarrage et ne peut pas tre supprime.
Les variables peuvent tre globales ou locales. Les variables locales sont des variables dclares
lintrieur dune routine autre que Process_Globals ou Globals.
Les variables locales sont locales dans la routine ou le module o elles sont dclares. Lorsque la
routine se termine, les variables nexistent plus.
Les variables globales sont accessibles depuis toutes les routines dans le module o elles sont
dclares.
Ces variables sont actives aussi longtemps que le processus est actif.
Vous devez dclarer ces variables comme Public dans la routine Sub Process_Globals du Service
Starter, comme ci-dessous.
Sub Process_Globals
'These global variables will be declared once when the application starts.
'These variables can be accessed from all modules.
Public MaVariable = "Test" As String
Nanmoins, pas tous les types dobjets peuvent tre dclars comme variables processus.
Toutes les Views ne peuvent pas tre dclares comme variables processus.
La raison est que nous ne pouvons pas garder des rfrences des objets qui seront dtruits en
mme temps que lActivity.
En d'autres termes, lorsque l'activit est dtruite, toutes les Views contenues dans l'Activity sont
galement dtruites. Si nous ne le faisions pas, et garderions des rfrences pour des Views aprs
que lActivity ne soit dtruite, le collecteur de ressources ne pourrait plus librer ces ressources et
pourrait conduire un manque de mmoire.
Le compilateur soutient cette exigence.
Un des problmes que les dveloppeurs rencontrent avec de grandes applications est la multitude de
points dentre possibles.
Tout va bien pendant le dveloppement. Mais, lapplication plante de temps en temps sur le
dispositif de lutilisateur final.
La raison de ces plantages est que le systme dexploitation peut dmarrer le processus partir
dune Activity ou dun service diffrent. Par exemple, si vous utilisez StartServiceAt et que le
systme dexploitation dtruit le processus pendant quil est en arrire-plan.
Dans ce cas, lobjet SQL et les autres ressources ne seront pas initialises.
A partir de B4A v5.20 il y a une nouvelle fonctionnalit appele service Starter qui fournit un point
dentre unique. Si le service Starter existe, le processus dmarrera toujours partir de ce service.
Le service Starter sera cr et dmarr, et seulement aprs lActivity ou le service qui devait
dmarrer sera excut.
Ce qui veut dire que le service Starter est le meilleur endroit pour initialiser toutes les ressources
pour lapplication.
D'autres modules peuvent accder en toute scurit ces ressources.
Le service Starter devrait tre l'emplacement par dfaut pour toutes les variables publiques globales
process. Des objets SQL, des donnes lues partir de fichiers et des bitmaps utiliss par plusieurs
Activities devraient tre initialises dans la routine Service_Create dans le service Starter.
Notes
Le service Starter est identifi par son nom. Vous pouvez ajouter un nouveau service, avec
le nom Starter un projet existant et il deviendra le nouveau point dentre.
Ceci se fait dans le menu Projet > Ajouter un nouveau module > Module Service.
Cest une fonctionnalit optionnelle. Vous pouvez supprimer le service Starter.
Vous pouvez excuter StopService(Me) dans Service_Start si vous ne voulez pas que le
service continue fonctionner. Mais, a signifie que le service ne sera plus mme de grer
des vnements (vous ne pourrez plus, par exemple, utiliser les fonctions SQL asynchrones).
Le service Starter doit tre exclu de bibliothques compiles.
Son attribut #ExcludeFromLibrary est True par dfaut dans la Rgion Service Attributes.
3.1 Flux du programme / cycle de vie B4A 28 B4x Langage Basic
Globals
Ici nous dclarons toutes les variables et objets privs (Private) pour lActivity concerne.
Sub Activity_Create
Ici nous chargeons les layouts et initialisons les objets Activity ajouts dans le code.
Activity_Resume
Cette routine est excute chaque changement dtat de de lActivity concerns.
Activity_Pause
Cette routine est excute lorsque lActivity est mise en veille, changement dorientation,
lancement dune autre Activtiy etc.
3.1 Flux du programme / cycle de vie B4A 29 B4x Langage Basic
Dans toute Activity, les routines Process_Globals et Globals devraient tre utilises pour dclarer
des variables.
Vous pouvez aussi attribuer des valeurs des variables "simples" (nombres, strings et boolens).
En rsum, vous pouvez vrifier si FirstTime est True et initialiser les variables processus qui sont
dclares dans la routine Process_Globals de lActivity.
3.1 Flux du programme / cycle de vie B4A 30 B4x Langage Basic
Les variables accessibles depuis toutes les routines dans une Activity et qui ne sont
initialises quune seule fois.
Elles doivent tre dclares comme Private dans la routine Process_Globals de lActivity
concerne comme :
Sub Process_Globals
Private MyList As List
Private MyMap As Map
End Sub
Les variables simples tel que Int, Double, String ou Boolean peuvent tre initialises directement
dans la ligne de dclaration mme dans les routines Process_Globals comme :
Public Origin = 0 as Int
Activity_Resume est excut juste aprs Activity_Create ou aprs la reprise dune Activity en veille
(Activity mise en veille et reprise au premier plan).
Notez que lorsque vous ouvrez une Activity diffrente (en appelant StartActivity), lActivity
actuelle est dabord mise en veille et lautre Activity est cre si besoin mais toujours resumed
(excution de Activity_Resume).
Chaque fois que lActivity est en veille (passant du premier plan vers larrire-plan), la routine
Activity_Pause est excute.
La routine Activity_Pause est aussi excute quand lActivtiy est active et quun changement de
configuration survient, ce qui conduit sa mise en veille puis sa destruction.
Activity_Pause est le dernier endroit pour enregistrer des informations importantes.
En gnral il y a deux mcanismes permettant denregistrer ltat dune Activity. Des informations
relevant seulement de linstances courante de lapplication peuvent tre enregistres dans une ou
plusieurs variables processus.
Dautres informations devraient tre enregistres dans une mmoire persistante (fichier ou base de
donnes).
Par exemple, si lutilisateur a modifi quelques rglages, vous devez enregistrer ces changements
dans une mmoire persistante dans cette routine. Sinon ces modifications peuvent tre perdues.
La routine Activity_Pause est excute chaque fois que lActivity est dsactive (mise en veille).
Ceci survient quand :
1. Une Activity diffrente est lance.
2. Le bouton Home a t press.
3. Un vnement de changement de configuration a t gnr (changement dorientation par
exemple).
4. Le bouton Retour (Back) a t press.
Dans les cas 1 et 2, lActivity sera mise en veille et maintenue en mmoire car elle est suppose tre
rutilise plus tard.
Dans le cas 3, lActivity sera mise en veille, dtruite et cre et reprise (resumed) nouveau.
Dans le cas 4, lActivity sera mise en veille puis dtruite. Presser le bouton Retour (Back) est
similaire fermer lActivity. Dans ce cas il nest pas ncessaire denregistrer des informations
spcifiques linstance.
Le paramtre UserClosed est gal True dans ce cas et False dans tous les autres. Notez quil sera
aussi gal True lexcution dActivity.Finish. Cette fonction met aussi lActivity en veille puis
la dtruit, similaire au bouton Retour (Back).
Vous pouvez utiliser le paramtre UserClosed pour dfinir quelles donnes seront enregistres ou
de rinitialiser des variables processus leur valeur initiale.
3.1 Program flow / Process life cycle B4A 32 B4x Langage Basic
En principe, on ne devrait pas utiliser ExitApplication mais lui prfrer Activity.Finish qui
laisse le systme dexploitation (OS) dcider quand dtruire le processus.
Vous ne devriez lutiliser que si avez rellement besoin de dtruire compltement le processus.
Nous devrions utiliser Activity.Finish avant de dmarrer une autre Activity seulement si nous ne
voulons pas retourner vers cette Activity avec le bouton Retour.
3.2 Flux du programme / cycle de vie B4i 33 B4x Langage Basic
3.2 B4i
Le flux dun programme est beaucoup plus simple dans B4i par rapport B4A.
Lorsque vous lancez un nouveau projet vous obtenez le modle de code ci-dessous :
Sub Process_Globals
'These global variables will be declared once when the application starts.
'Public variables can be accessed from all modules.
Public App As Application
Public NavControl As NavigationController
Private Page1 As Page
End Sub
End Sub
End Sub
Lorsque vous excutez le programme, les routines sont excutes dans lordre ci-dessus.
Notez que les dimensions de Page1 ne sont pas connues dans Application_Start, elles ne sont
connues que dans la routine Page1_Resize dans les paramtres Width et Height.
Si vous voulez rajuster des objets, dimensions ou position, il faut le faire ici.
3.3 Flux du programme / cycle de vie B4J 34 B4x Langage Basic
3.3 B4J
Le flux dun programme est beaucoup plus simple dans B4J par rapport B4A, similaire B4i.
Lorsque vous lancez un nouveau projet vous obtenez le modle de code ci-dessous :
Sub Process_Globals
Private fx As JFX
Private MainForm As Form
End Sub
'Return true to allow the default exceptions handler to handle the uncaught exception.
Sub Application_Error (Error As Exception, StackTrace As String) As Boolean
Return True
End Sub
Lorsque vous excutez le programme, les routines sont excutes dans lordre ci-dessus.
Si vous voulez rajuster des objets lorsque lutilisateur redimensionne une fentre (Form) vous
devez ajouter une routine Resize pour cette fentre, comme :
3.4 B4R
Lorsque vous lancez un nouveau projet vous obtenez le modle de code ci-dessous :
Sub Process_Globals
'These global variables will be declared once when the application starts.
'Public variables can be accessed from all modules.
Public Serial1 As Serial
End Sub
Starter Process_Globals
Main Globals
Main Activity_Create
FirstTime = True
Main Activity_Resume
B4A B4i
Main Activity_Pause
Main Activity_Create
FirstTime = False
3 Language Basic 37 B4x Langage Basic
4 Langage Basic
4.1 Expressions
Dans les langages de programmation, une expression est un lment de syntaxe qui combine un
ensemble de lexmes retournant une valeur.
C'est une combinaison de littraux, de variables, d'oprateurs, et de fonctions qui est value (ou
calcule) en suivant les rgles de priorit et d'associativit du langage de programmation pour
produire (ou renvoyer) une nouvelle valeur (source Wikipedia).
Par exemple, 2 + 3 est une expression arithmtique qui vaut 5. Une variable est une expression car
elle reprsente une valeur contenue en mmoire, donc y + 6 est une expression (source Wikipedia).
Niveau de priorit
Operateur Exemple Opration
des oprations
+ x + y 3 Addition
- x - y 3 Soustraction
* x * y 2 Multiplication
/ x / y 2 Division
Mod x Mod y 2 Modulo
Power Power(x,y) xy 1 Puissance
Niveau de priorit des oprations : Dans une expression, les oprations avec le niveau 1 sont
excutes avant les oprations de niveau 2, qui seront excutes avant les oprations de niveau 3.
Exemples :
4 + 5 * 3 + 2 = 21 > 4 + 15 + 2
(4 + 5) * (3 + 2) = 45 > 9 * 5
- 22 = - 4
(-2)2 = 4
3.1 Expressions 38 B4x Langage Basic
En informatique dans les expressions relationnelles, un oprateur teste une sorte de relation entre
deux entits. Ceux-ci incluent une galit numrique (par exemple, 5 = 5) et des ingalits (par
exemple, 4> = 3).
Dans B4x, ces oprateurs renvoient True (vrai) ou False (faux), selon que la relation conditionnelle
entre les deux oprandes est valable ou non.
Une expression boolenne est une expression qui donne une valeur boolenne (vrai ou faux). Par
exemple, la valeur pour 5 > 3 est vrai et la valeur pour 5 < 4 est faux.
Les expressions boolennes sont utilises pour le contrle de flot et pour la slection parmi un
ensemble de valeurs selon un prdicat (source Wikipedia.
Des oprateurs boolens sont utiliss dans des expressions conditionnelles tel que IF-Then et
Select-Case.
Operateur Commentaire
Or Ou Boolean Z = X Or Y Z = True si X ou Y est gal True ou les deux sont True
And Et Boolean Z = X And Y Z = True si X et Y sont les deux gal True
Not ( ) Non Boolean X = True Y = Not(X) > Y = False
Or And
X Y Z Z
False False False False
True False True False
False True True False
True True True True
4.2 Mots cl standard 39 B4x Langage Basic
Null As Object
NumberFormat (Number As Double, MinimumIntegers As Int, MaximumFractions As Int) As
String
NumberFormat2 (Number As Double, MinimumIntegers As Int, MaximumFractions As Int,
MinimumFractions As Int, GroupingUsed As Boolean) As String
Power (Base As Double, Exponent As Double) As Double
QUOTE As String
Regex As Regex
Return
Rnd (Min As Int, Max As Int) As Int
RndSeed (Seed As Long)
Round (Number As Double) As Long
Round2 (Number As Double, DecimalPlaces As Int) As Double
Select
Sender As Object
Sin (Radians As Double) As Double
SinD (Degrees As Double) As Double
Sleep (Milliseconds As Int)
SmartStringFormatter (Format As String, Value As Object) As String
Sqrt (Value As Double) As Double
Sub
SubExists (Object As Object, Sub As String) As Boolean
TAB As String
Tan (Radians As Double) As Double
TanD (Degrees As Double) As Double
True As Boolean
Try
Type
Until
While
4.2 Mots cl standard 41 B4x Langage Basic
Array
Renvoie le code unicode du caractre donn ou du premier caractre dans un objet String.
BytesToString (Data() As Byte, StartOffset As Int, Length As Int, CharSet As String) As String
Appel la routine (Sub) donne. CallSub peut tre utilis pour appeler une routine appartenant un
autre module.
Nanmoins, la routine ne sera excute que si lautre module est actif. Sinon, un objet String vide
sera retourn.
Vous pouvez utiliser IsPaused pour tester si un module est actif ou non.
En B4A, cela veut dire que dans une Activity on ne peut pas appeler une routine dans une autre
Activity car celle-ci est forcment inactive (Paused).
Avec CallSub on peut appeler, depuis une Activity, une routine dans un service ou appeler depuis
un service une routine dans une Activity.
Notez quil nest pas possible dappeler des routines dans des modules Code.
CallSub peut aussi tre utilis pour appeler une routine dans le mme module. Passez Me en tant
que Component dans ce cas.
Exemple :
CallSub(Main, "RefreshData")
CallSub3 (Component As Object, Sub As String, Argument1 As Object, Argument2 As Object) As Object
Catch
Toute exception gnre lintrieur dun bloc Try sera capte dans le bloc Catch.
Appelez LastException pour obtenir lexception capte.
Syntaxe :
Try
...
Catch
Log(LastExeption)
End Try
cE As Double
Renvoie la plus petite valeur Double qui est plus grande ou gale la valeur spcifie mais gale
une valeur entire (integer).
4.2 Mots cl standard 43 B4x Langage Basic
Continue
cPI As Double
Constante PI.
CRLF As String
Dim
Dclarer des variables multiples. Toutes les variables seront du type spcifi.
Dim [Const] variable1 [= expression], variable2 [= expression], ..., [As type]
Notez que la syntaxe courte ne sapplique quau mot cl Dim.
Exemple : Dim a = 1, b = 2, c = 3 As Int
Dclarer un tableurs :
Dim variable(Rang1, Rang2, ...) [As type]
Exemple: Dim Days(7) As String
On peut omettre le rang pour un tableau de longueur zro.
Exit
False As Boolean
Renvoie la plus grande valeur Double qui est plus petite ou gale la valeur spcifie mais gale
une valeur entire (integer).
For
Syntaxe:
For variable = valeur1 To valeur2 [Step intervalle]
...
Next
Si le type de litrateur na pas t spcifi auparavant il sera du type Int.
Ou:
For Each variable As type In collection
...
Next
Exemples :
For i = 1 To 10
Log(i) 'Affiche 1 10 (inclusif).
Next
For Each n As Int In Numbers 'un tableau
Sum = Sum + n
Next
Notez que la limite de la boucle nest calcule quune fois avant la premire itration.
If
LoadBitmapSample (Dir As String, FileName As String, MaxWidth As Int, MaxHeight As Int) As Bitmap
Affiche (Logs) un message. Le message sera affich, dans longlet Logs, avec la couleuse spcifie.
Me As Object
Null As Object
4.2 Mots cl standard 46 B4x Langage Basic
QUOTE As String
Regex As Regex
Return
Renvoie une nombre entier alatoire compris entre Min (inclusif) et Max (exclusif).
Select
Sender As Object
Arrte lexcution de la routine courante, puis continue aprs expiration du temps coul.
Sub
TAB As String
True As Boolean
Try
Toute exception gnre lintrieur dun bloc Try sera capte dans le bloc Catch.
Appelez LastException pour obtenir lexception capte.
Syntaxe :
Try
...
Catch
...
End Try
4.2 Mots cl standard 49 B4x Langage Basic
Type
Until
Passe dans la boucle jusqu ce que la condition est vrifie (gale True).
Syntaxe :
Do Until condition
...
Loop
While
Passe dans la boucle tant que la condition est vrifie (gale True).
Syntaxe :
Do While condition
...
Loop
3.3 Expressions conditionnelles 50 B4x Langage Basic
La structure If-Then-Else (si-alors-ou bien) permet deffectuer des tests conditionnels et excuter
diffrentes sections de code en fonction des rsultats des tests.
General case :
If test1 Then
' code1
Else If test2 Then
' code2
Else
' code3
End If
Ces tests peuvent tre nimporte quel test conditionnel avec deux rponses possibles True ou False.
Quelques exemples :
If b = 0 Then
a = 0 La structure If-Then la plus simple.
End If
If b = 0 Then
a = 0 La structure If-Then-Else la plus simple.
Else
a = 1
End If
Dans B4x il y a un blanc entre les deux mots Else et If, alors que cest en un mot dans VB
If b = 0 Then a = 0 : c = 1
Le caractre double point ' : ' dans linstruction est trait dans B4x comme un caractre CR retour
chariot.
La structure Select - Case (Slection - Cas) permet de comparer une ExpressionTest avec
dautres Expressions et dexcuter diffrentes sections de code en fonction des correspondances
entre ExpressionTest et Expressions.
General case :
Exemples :
Select Valeur
Case 1, 2, 3, 4 La variable Valeur est numrique.
Case Activity.ACTION_MOVE
Case Activity.ACTION_UP
End Select
End Sub
3.3 Expressions conditionnelles 53 B4x Langage Basic
Dans une boucle ForNext, le mme code sera excut un certain nombre de fois.
Exemple :
Si la valeur du pas (Step) est gale '+1', le mot cl Step et sa valeur ne sont pas ncessaire.
For i = n3 To 0 Step -1
Next
Dans VB :
La variable dincrment est ajoute aprs le mot cl Next.
Le type de boucle, For dans lexemple, est ajout aprs le mot cl Exit.
Exemple :
Next
Somme = 0
For Each n As Int In Nombres
Somme = Somme + n
Next
Somme = 0
For i = 0 To Nombres.Length - 1
Somme = Somme + Nombres(i)
Next
3.4 Structures de boucles (Loop) 56 B4x Langage Basic
4.4.3 Do - Loop
Do While test
' code
If a = 0 Then Exit Si a = 0 on sort de la boucle.
' code
Loop
3.4 Structures de boucles (Loop) 57 B4x Langage Basic
Exemples :
Do Until Loop :
Private i, n As Int
i = 0
Do Until i = 10
' code
i = i + 1
Loop
Do While Loop :
Private i, n As Int
i = 0
Do While i < 10
' code
i = i + 1
Loop
tr.Initialize(File.OpenInput(File.DirInternal, "test.txt"))
lstText.Initialize
ligne = tr.ReadLine
Do While line <> Null
lstText.Add(line)
ligne = tr.ReadLine
Loop
tr.Close
Dans VB le type de boucle, Loop dans lexemple, est ajout aprs le mot cl Exit.
VB accepte aussi les boucles suivantes, qui ne sont pas implmentes dans B4x.
Do Do
' code ' code
Loop While test Loop Until test
3.5 Subs / routines 58 B4x Langage Basic
Une routine (Sub) est une portion de code. Elle peut tre de nimporte quelle longueur, a un nom
distinctif et une porte dfinie (dans le sens de porte des variables comme voqu auparavant).
Dans le code B4x, une routine est appele Sub, et est quivalente une procdure, fonction,
mthode et sub dans dautres langages de programmation. Les lignes de code, lintrieur dune
Sub, sont excutes de la premire la dernire.
Il est dconseill davoir des routines avec beaucoup de code, elles deviennent moins lisibles.
4.5.1 Dclaration
On dbute avec le mot cl Sub, suivi par le nom, suivi par une liste de paramtres, suivi par le type
de retour et se termine avec les mots cl End Sub.
Les Subs doivent toujours tre dclares au niveau suprieur du module, on ne peut pas dclarer une
Sub lintrieur dune autre Sub.
Pour excuter le code dans une Sub, crivez simplement le nom de la Sub suivi de la liste des
paramtres sil y a lieu.
Par exemple :
Interet = CalculInteret(1234, 5.2)
Une routine dclare dans un module, avec les mots cl Public Sub, est accessible depuis
nimporte quel autre module, mais son nom doit tre prcd par le nom du module dans lequel est
a t dclare.
Au lieu de :
Interet = CalculInteret(1234, 5.2)
3.5 Subs / routines 59 B4x Langage Basic
4.5.4 Noms
Vous pouvez donner nimporte quel nom, une routine Sub. Il est conseill de donner des noms
significatifs, comme CalculInteret dans lexemple, de cette manire vous connaissez le but de la
routine en lisant le code.
Il ny a pas de limite au nombre de routines dans le programme, mais vous ne pouvez pas dfinir
deux routines avec le mme nom dans un mme module.
4.5.5 Paramtres
On peut transmettre des paramtres une routine. La liste suit directement le nom de la routine,
entre parenthses.
Les types des paramtres doivent tre inclus directement dans la liste.
Une routine Sub peut renvoyer une valeur, qui peut tre nimporte quel objet.
Le renvoi dune valeur est effectu avec le mot cl Return.
Le type de la valeur de retour est ajout aprs la liste des paramtres.
Les routines resumable ont t introduites dans B4A v7.00 / B4i v4.00 / B4J v5.50. Elles
simplifient drastiquement les oprations asynchrones.
(Cette fonctionnalit est une variante de stackless coroutines.)
La fonctionnalit particulire des resumable subs est que lexcution peut tre interrompue, sans
interrompre lexcution du reste du programme, puis reprise plus tard.
Le programme nattend pas la reprise du code de la routine, dautres vnements sont gnrs
comme dhabitude.
Toute routine contenant au moins un appel Sleep ou Wait For est une resumable sub.
Dans lditeur elles se distinguent par cet indicateur aprs la dclaration :
4.6.1 Sleep
Log(1)
Sleep(1000)
Log(2)
Vous pouvez spcifier Sleep(0) pour une interruption la plus courte. Ceci peut tre utilise lorsque
vous voulez que lIHM soit ractualis. Cest une bonne alternative DoEvents (qui nexiste pas
dans B4J et B4i et doit tre vit dans B4A).
Sub VeryBusySub
For i = 1 To 10000000
'do something
If i Mod 1000 = 0 Then Sleep(0) 'allow the UI to refresh every 1000 iterations.
Next
Log("finished!")
End Sub
4.6 Routines Subs Resumable 61 B4x Langage Basic
Les langages B4X sont grs par des vnements (programmation vnementielle). Des oprations
asynchrones fonctionnent en arrire-plan et gnrent des vnements lorsque lopration est
termine.
Avec le nouveau mot cl Wait For vous pouvez grer les vnements lintrieur de la routine
courante.
Par exemple, le code ci-dessous attend lvnement Ready de GoogleMap (exemple B4J) :
gmap.Initialize("gmap")
Pane1.AddNode(gmap.AsPane, 0, 0, Pane1.Width, Pane1.Height)
MainForm.Show
Wait For gmap_Ready '<----------------
gmap.AddMarker(10, 10, "Marker")
End Sub
Lorsque le mot cl Wait For est excut, la routine est interrompue et le gestionnaire interne des
vnements prend en charge la reprise de lexcution du reste du code lorsque lvnement est
gnr. Si lvnement nest jamais gnr, le reste du code ne sera jamais excut. Cela nentrave
pas le fonctionnement du reste du programme qui reste parfaitement ractif.
Si Wait For est appel nouveau plus tard, avec le mme vnement, une nouvelle instance de la
routine remplacera la prcdente.
4.6 Routines Subs Resumable 62 B4x Langage Basic
Nous allons crer une routine qui tlcharge une image et lattribue un objet ImageView :
Ceci fonctionne condition de nappeler la routine quune seule fois (ou plus correctement, si nous
appelons la routine nouveau quaprs que lopration prcdente ne soit termine).
Si nous lappelions comme ci-dessous :
DownloadImage("https://www.b4x.com/images3/android.png", ImageView1)
DownloadImage("https://www.b4x.com/images3/apple.png", ImageView2)
Seule la deuxime image sera affiche car le deuxime appel Wait For JobDone va craser le
prcdent.
Ceci nous amne la deuxime variante de Wait For.
Pour rsoudre ce problme, Wait For peut distinguer les vnements bass sur lmetteur
dvnements event sender.
Pour cela, on utilise un paramtre optionnel :
Exemple :
Avec le code ci-dessus, chaque instance de la resumable sub attend des vnements diffrents et
ne sera pas affect par dautres appels la routine.
4.6 Routines Subs Resumable 63 B4x Langage Basic
Sub S1
Log("S1: A")
S2
Log("S1: B")
End Sub
Sub S2
Log("S2: A")
Sleep(0)
Log("S2: B")
End Sub
La rponse est:
S1: A
S2: A
S1: B
S2: B
Chaque fois que Sleep ou Wait For est appel, la routine courante est interrompue. Ce qui quivaut
appeler Return.
4.6 Routines Subs Resumable 64 B4x Langage Basic
Si une routine appelle une autre routine resumable, le code dans la premire routine sera excut
aprs le premier appel de Sleep ou Wait (dans la deuxime routine).
Si, dans la premire routine, vous voulez attendre que lexcution de la deuxime routine soit
termine, vous pouvez gnrer un vnement dans la deuxime routine et lattendre dans la
premire :
Sub PreimiereSub
Log("Premire Sub dmarre")
SecondSub
Wait For DeuximenSub_Termine
Log("Premire Sub termine")
End Sub
Sub DeuxiemeSub
Log("Deuxime Sub dmarre ")
Sleep(1000)
Log("Deuxime Sub termine")
CallSubDelayed(Me, "DeuxiemenSub_Termine")
End Sub
Logs :
Premire Sub dmarre
Deuxime Sub dmarre
Deuxime Sub termine
Premire Sub termine
Notes :
- Il est plus sr dutiliser CallSubDelayed au lieu de CallSub. CallSub ne fonctionnera pas si la
deuxime routine nest jamais interrompue (par exemple si Sleep est seulement appel par une
condition).
- Le code ci-dessus admet que PremiereSub nest jamais appel nouveau tant que son excution ne
soit termine.
4.6 Routines Subs Resumable 65 B4x Langage Basic
4.6.5 DoEvents
A partir de B4A version 7.00, lavertissement suivant sera affich pour tout appel DoEvents :
DoEvents est dprci. It can lead to stability issues. Use Sleep(0) instead (if really needed).
La fonction de DoEvents consistait permettre des mises jour de linterface utilisateur lorsque le
processus principal tait occup. DoEvents, qui partage la mme implmentation que les dialogues
modaux, est une implmentation bas niveau. Il accde la queue des messages du processus et
excute quelques-uns des messages en attente.
Avec lvolution dAndroid, la gestion de la queue des messages est devenue plus sophistique et
plus fragile.
Les raisons de la dprciation de DoEvents sont :
1. Cest une source majeure dinstabilits. Cela peut conduire des crashs difficiles dboguer ou
des messages ANR (application not responding, lapplication ne rpond pas). Notez que ceci est
aussi valable pour les dialogues modaux (tel que Msgbox ou InputList).
2. Il existe de meilleures faons de maintenir le processus principal libre. Par exemple, en utilisant
pour les bases de donnes SQL, les mthodes asynchrones asynchronous SQL methods au lieu des
mthodes synchrones.
3. DoEvents ne fait pas ce que beaucoup de dveloppeur attendant que a fasse. Car DoEvents ne
traite que des messages dinterface utilisateur, la plupart des vnements ne peuvent pas tre
gnrs partir dun appel DoEvents.
4. Maintenant on peut appeler Sleep pour interrompre lexcution de la routine courante et la
reprendre aprs que les messages dattente soient traits. Sleep implementation est totalement
diffrent de DoEvents. Il ne bloque pas le processus. Il le libre tout en prservant ltat de la
routine.
Contrairement DoEvents qui ne traite que les messages de linterface utilisateur, avec Sleep tous
les messages seront gnrs.
(Notez quutiliser Wait For et attendre un vnement est prfrable utiliser Sleep dans une
boucle).
Malgr tout, DoEvents est maintenu et les applications existantes fonctionnent exactement comme
auparavant.
4.6 Routines Subs Resumable 66 B4x Langage Basic
Dialogues modaux = dialogues qui bloquent le processus principal jusqu ce que leur traitement ne
soit termin.
Comme dj voqu dans le chapitre prcdent, les dialogues modaux utilisent la mme
implmentation que DoEvents. Il est donc recommand de passer lutilisation des nouveaux
dialogues asynchrones. Le passage Wait For est vraiment un changement simple :
Au lieu de :
Wait For ne bloque pas le processus principal. Il mmorise ltat actuel de la routine et la libre.
L'excution du code sera reprise lorsque lutilisateur clique sur un des boutons du dialogue.
Les autres mthodes asynchrones similaires sont : MsgboxAsync, InputListAsync et
InputMapAsync.
A lexception de MsgboxAsync, les nouvelles mthodes ont un nouveau paramtre Cancelable. Sil
est gal True, la boite de dialogue peut tre abandonne en cliquant sur le bouton Retour Back
ou en dehors de la boite de dialogue. Ce qui est le comportement par dfaut des mthodes
anciennes.
Comme lexcution du code continue pendant que la boite de dialogue asynchrone est affiche, il
est possible que dautres boites de dialogue soient affiches en mme temps.
Si cest le cas, vous devez dfinir un paramtre de filtre dmetteur, sf dans lexemple, dans lappel
de Wait For :
Ceci autorise laffichage de messages multiples avec un traitement correct des vnements.
4.6 Routines Subs Resumable 67 B4x Langage Basic
La nouvelle fonctionnalit des resumable subs, rend le travail plus simple avec de grandes
quantits de donnes avec une influence minime sur la ractivit du programme.
For i = 1 To 1000
SQL1.AddNonQueryToBatch("INSERT INTO table1 VALUES (?)", Array(Rnd(0, 100000)))
Next
Dim SenderFilter As Object = SQL1.ExecNonQueryBatch("SQL")
Wait For (SenderFilter) SQL_NonQueryComplete (Success As Boolean)
Log("NonQuery: " & Success)
Dans la plupart des cas les requtes sont rapides et devraient donc tre appeles de manire
synchrone SQL1.ExecQuery2. Nanmoins, sil y a une requte lente vous pouvez passer
SQL1.ExecQueryAsync:
Comme dans le cas prcdent, la mthode ExecQueryAsync renvoie un objet qui peut tre utilise
comme paramtre de filtre dmetteur.
Conseils :
1. Lobjet ResultSet dans B4A est une extension de lobjet Cursor. Vous pouvez le changer en
Cursor si vous prfrez. Lavantage dans lutilisation de ResultSet est sa compatibilit avec B4J et
B4i.
2. Si le nombre de lignes renvoy per la requte est grand, la boucle Do While peut devenir lents en
mode Debug. Vous pouvez la rendre plus rapide en la dplaant dans une routine diffrente et en
nettoyant le projet (Ctrl + P) :
4.6 Routines Subs Resumable 68 B4x Langage Basic
Ceci est li une optimisation du dbogueur qui est actuellement dsactive pour les routines
resumable subs.
La performance des deux solutions est la mme en mode Release.
4.6.7.2 B4J
En programmation orient objet nous avons des objets qui peuvent ragir diffrentes actions de
lutilisateur appeles vnements (events).
Le nombre et les types dvnements quun objet peut gnrer dpend du type de lobjet.
4.7.1 B4A
Les objets dinterface utilisateur sont appels 'view' (vue) dans Android.
vnements / Events
CheckedChange
ItemLongClick
FocusChanged
ScrollChanged
ValueChanged
PageFinished
TextChanged
EnterPressed
TabChanged
OverrideUrl
LongClick
ItemClick
KeyPress
KeyUp
Touch
Down
Click
Up
Views
Activity
Button
CheckBox
EditText
HorizontalScrollView
ImageView
Label
ListView
Panel
RadioButton
ScrollView
SeekBar
Spinner
TabHost
ToggleButton
WebView
4.7.1 vnements (Events) B4A 70 B4x Langage Basic
LongClick
vnement gnr lorsque lutilisateur clique sur la view et maintient pour un moment.
Exemple :
Sub Button1_LongClick
' votre code
End Sub
Exemple :
Sub Activity_Touch (Action As Int, X As Float, Y As Float)
Select Action
Case Activity.ACTION_DOWN
' votre code pour Action = 0 donc DOWN
Case Activity.ACTION_MOVE
' votre code pour Action = 2 donc MOVE
Case Activity.ACTION_UP
' votre code pour Action = 1 donc UP
End Select
End Sub
Exemple :
Sub CheckBox1_CheckedChange(Checked As Boolean)
If Checked = True Then
' votre code pour coch Checked = True
Else
' votre code pour non coch Checked = False
End If
End Sub
4.7.1 vnements (Events) B4A 71 B4x Langage Basic
Exemple:
4.7.2 B4i
vnements / Events
ScrollChanged
ValueChanged
IndexChanged
PageFinished
TextChanged
EnterPressed
ItemSelected
OverrideUrl
LongClick
BeginEdit
EndEdit
Resize
Touch
Click
Views
Button
TextField
TextView
ImageView
Label
Panel
ScrollView
Slider
Picker
Stepper
Switch
SegmentedControl
Slider
Stepper
WebView
4.7.2 vnements (Events) B4i 73 B4x Langage Basic
Click vnement gnr lorsque lutilisateur presse, clique sur une view.
Exemple :
Private Sub Button1_Click
' votre code
End Sub
LongClick
vnement gnr lorsque lutilisateur clique sur la view et maintient pour un moment.
Exemple :
Private Sub Button1_LongClick
' votre code
End Sub
Exemple :
Private Sub Panel_Touch (Action As Int, X As Float, Y As Float)
Select Action
Case Panel.ACTION_DOWN
' Votre code pour laction DOWN
Case Panel.ACTION_MOVE
' Votre code pour laction MOVE
Case Panel.ACTION_UP
' Votre code pour laction UP
End Select
End Sub
4.7.3 vnements (Events) B4J 74 B4x Langage Basic
4.7.3 B4J
vnements / Events
SelectedIndexChanged
H / VScrollChanged
CheckedChange
SelectedChange
MouseReleased
MouseDragged
FocusChanged
MouseClicked
MousePressed
MouseMoved
ValueChange
PageFinished
TextChanged
TabChanged
Action
Resize
d
Nodes
Button
Canvas
CheckBox
ChoiceBox
ComboBox
ImageView
Label
ListView
Pane
RadioButton
ScrollPane
Slider
Spinner
TabPane
TextArea
TextField
ToggleButton
WebView
4.7.3 vnements (Events) B4J 75 B4x Langage Basic
Action
vnement gnr lorsque lutilisateur clique sur un node (Button ou TextField).
Exemple :
Private Sub Button1_Action
' votre code
End Sub
4.7.4 B4R
Dans B4R, les objets Pin et Timer sont les seul gnrer des vnements :
Pin
StateChanged (State As Boolean) vnement gnr lorsque une pin change dtat.
Exemple :
Sub Pin1_StateChanged(State As Boolean)
' votre code
End Sub
Timer
Tick vnement gnr pour chaque intervalle de temps donne.
Exemple :
Sub Timer1_Tick
' votre code
End Sub
4.7.5 Rsum dinterfaces utilisateurs 78 B4x Langage Basic
- Si elle nexiste pas, tlchargez-la, dzippez-la et copiez les fichiers < NomBibilithque>.jar
et < NomBibilithque>.xml dans le dossier des bibliothques additionnelles.
- Cliquez avec le bouton droit de la souris dans la liste des bibliothques puis cliquez sur
et cochez la bibliothque dans la liste pour la slectionner.
4.8 Bibliothques (Libraries) 80 B4x Langage Basic
Les bibliothques B4x standard sont sauves dans les dossiers Libraries dans les dossiers des
programmes.
Gnralement dans :
C:\Program Files\Anywhere Software\B4A\Librairies
C:\Program Files\Anywhere Software\B4i\libraires
C:\Program Files\Anywhere Software\B4J\librairies
C:\Program Files\Anywhere Software\B4R\libraires
4.8 Bibliothques (Libraries) 81 B4x Langage Basic
Pour les fichiers des bibliothques additionnelles il est judicieux de crer un dossier spcifique.
Par exemple :
C:\B4A\BiblothequesAddidionnelles, C:\B4i\ BiblothequesAddidionnelles, C:\B4J\
BiblothequesAddidionnelles, C:\B4R\ BiblothequesAddidionnelles
Lorsque vous installez une nouvelle version dun des produits B4x, toutes les bibliothques
standard sont automatiquement mises jour, ce qui nest pas le cas des bibliothques additionnelles.
Lavantage du dossier spcifique est que vous navez pas vous soucier des bibliothques
additionnelles car le dossier spcifique nest pas affect lors de linstallation dune nouvelle version.
Les bibliothques additionnelles ne sont pas mises jour automatiquement lors dune mise jour de
B4x.
Une liste des bibliothques officielles et additionnelles avec des liens sur leur documentation peut
tre trouve sur les pages Documentation sur le site :
Page Documentation B4A : List of Libraries.
Page Documentation B4i : List of Libraries.
Page Documentation B4J : List of Libraries.
Page Documentation B4R : List of Libraries.
Pour trouver les fichiers des bibliothques, utilisez une requte comme
http://www.b4x.com/search?query=betterdialogs+bibliothque
dans lexplorateur internet.
Pour charger ou mettre jour une bibliothque suivez les tapes ci-dessous :
Tlchargez le fichier quelque part sur votre disque.
Dzippez le.
Copiez les fichiers xxx.jar et xxx.xml vers
o Le dossier Library de B4x pour les bibliothques standard
o Le dossier BibliothquesAddionnelles pour une bibliothque additionnelle.
Cliquez avec le bouton droit dans le Gestionnaire des Bibilothques de lditeur puis cliquez
Si vous obtenez un message similaire celui ci-dessous, a veut dire que vous avez oubli de
cocher la bibliothque spcifie ou que vous ne lavez pas !
4.9 Manupulations de textes / objet String 83 B4x Langage Basic
B4A, B4i et B4J autorisent des manipulations de texte (objet String) comme les autres langages
Basic avec quelques diffrences.
4.9.2 B4R
B4R ne supporte pas les manipulations de texte comme les autres langages Basic.
Les objets String dans B4R sont diffrents des ceux dans les autres langages B4x. Les raisons de ces
diffrences sont :
Mmoire trs limite.
Manque dencodage Unicode.
Un objet String dans B4R est la mme chose que char* string dans le langage C.
Cest un tableau doctets (bytes) avec un octet 0 la fin.
La ncessit du 0 la fin rend impossible la cration de textes partiels sans le copier une nouvelle
adresse.
Pour cette raison, les tableaux doctets sont prfrables aux objets String.
Les diffrentes fonctions de manipulation sur les objets String peuvent tre effectues sur des
tableaux doctets.
Convertir un objet String en un tableau doctets est trs simple et ne ncessite pas de copie en
mmoire. Le compilateur le fait automatiquement si ncessaire :
Private b() As Byte = "abc" 'quivalent Private b() As Byte = "abc".GetBytes
Les mthodes pour lobjet String se trouvent dans lobjet ByteConverter dans la bibliothque
rRandomAccessFile.
Notez comment des objets String et des tableaux doctets peuvent tre utiliss vu que le compilateur
les convertit automatiquement.
A lexception de JoinStrings, aucune des mthodes ci-dessus ne fait une copie du texte original.
a veut dire que si on modifie le tableau renvoy, comme trois dernires lignes, on modifie aussi le
tableau dorigine.
Cela se produira galement avec des objets String qui partagent tous le mme bloc mmoire :
Formatage de nombres, afficher des nombres sous forme de texte avec diffrents formats.
Il existe deux mots cl :
NumberFormat(Number As Double, MinimumIntegers As Int, MaximumFractions As Int)
NumberFormat(12345.6789, 0, 2) = 12,345.68
NumberFormat(1, 3 ,0) = 001
NumberFormat(Value, 3 ,0) des variables peuvent tre utilises.
NumberFormat(Value + 10, 3 ,0) des oprations arithmtiques peuvent tre
utilises.
NumberFormat((lblscore.Text + 10), 0, 0) si un des nombres est un objet String mettez-
le entre parenthses.
4.10.2 B4R
Formatage de nombres, affiche des nombres sous forme de texte dans diffrents formats :
NumberFormat(Number As Double, MinimumIntegers As Int, MaximumFractions As Int)
NumberFormat(12345.6789, 0, 2) = 12,345.68
NumberFormat(1, 3 ,0) = 001
NumberFormat(Value, 3 ,0) des variables peuvent tre utilises.
NumberFormat(Value + 10, 3 ,0) des oprations arithmtiques peuvent tre
utilises.
NumberFormat((lblscore.Text + 10), 0, 0) si un des nombres est un objet String mettez-
le entre parenthses.
4.11 Timers / Minuteurs 89 B4x Langage Basic
Les objets Timer (minuteur) gnrent des vnements Tick des intervalles spcifis. Lutilisation
de Timers est une bonne alternative de longues boucles, car ils permettent au systme
dexploitation de traiter dautres vnements ou messages.
Notez que les vnements ne seront pas gnrs lorsque linterface utilisateur est occupe
excuter dautres codes.
Dans B4A, les vnements ne sont pas gnrs lorsque lActivity est dsactive, ou si un dialogue
(comme Msgbox) est visible.
Il est aussi important, dans B4A, de dsactiver les Timers quand lActivity est mise en veille et de
les ractiver lorsque lActivity reprend dans Activity_Resume.
Un Timer a :
Trois paramtres.
o Initialize Initialise le Timer avec deux paramtres, EventName (nom gnrique
de lvnement) et lintervalle en millisecondes.
Timer1.Initialize(EventName As String, Interval As Long)
Ex : Timer1.Initialize("Timer1", 1000)
Un vnement
o Tick La routine Tick est appele tous les intervalles de temps.
Ex : Sub Timer1_Tick
4.11 Timers / Minuteurs 90 B4x Langage Basic
Sub Process_Globals
Public Timer1 As Timer
Mais ils doivent tre initialise dans une des routines ci-dessous dans le module dans lequel la
routine Tick est utilise.
Beaucoup dapplications ont besoin daccder des donnes stockes de manire permanente. Les
deux types de stockage les plus courants sont les fichiers et les bases de donnes.
Android et iOS ont leur propre systme de fichiers. Les programmes B4A ni les programmes B4i
ont accs au systme de fichiers de Windows.
Pour ajouter des fichiers votre projet, vous devez les ajouter dans lditeur dans longlet
Gestionnaire de fichiers. Ces fichiers seront ajouts dans le dossier Files de votre projet.
Lobjet File contient un certain nombre de fonctions pour travailler avec des fichiers.
Emplacements de fichiers
- Il y a quelques emplacements importants o vous pouvez lire ou crire des fichiers.
File.DirAssets
- Le dossier DirAssets contient les fichiers qui ont t ajouts dans longlet Gestionnaire de fichiers
dans lditeur, cest le dossier Files du projet.
Ces fichiers sont en lecture seule !
Vous ne pouvez pas crer de nouveaux fichiers dans ce dossier (qui est inclus dans le fichier apk du
projet).
Si vous avez un fichier de base de donnes dans le dossier DirAssets, vous devez obligatoirement le
copier dans un autre dossier sur lappareil avant de pouvoir lutiliser.
File.DirInternal / File.DirInternalCache
- Ces deux dossiers sont stocks dans la mmoire principale de lappareil et sont privs pour
lapplication. Aucune autre application ne peut accder aux fichiers dans ces dossiers.
Le dossier cache peut tre effac par le systme dexploitation sil a besoin de plus despace
mmoire.
File.DirRootExternal
Dossier racine de la carte mmoire interne.
File.DirDefaultExternal
- Le dossier par dfaut de votre application sur la carte SD.
Ce dossier est : <storage card>/Android/data/<package>/files/
Il sera cr si ncessaire.
Notez que lappel une des deux proprits ci-dessus va ajouter lautorisation
EXTERNAL_STORAGE votre application.
Conseil : Vous pouvez vrifier sil existe une carte mmoire et si elle est disponible avec
File.ExternalReadable et File.ExternalWritable.
4.12 Fichiers 92 B4x Langage Basic
Lobjet File contient plusieurs mthodes pour crire ou lire dans des fichiers.
Pour pouvoir crire ou lire dans un fichier il doit tre ouvert.
Exemple : MonFichier.txt
Notez que les noms de fichier dans B4x sont sensibles la casse !
MonFichier.txt est diffrent de monfichier.txt
4.12.3 Sous-dossiers
Pour accder ce dossier vous devez ajouter le nom du sous-dossier au nom du dossier avec "/"
entre les deux.
ImageView1.Bitmap = LoadBitmap(File.DirInternal & "/Images", "test1.png")
Ou ajouter le nom du sous-dossier devant le nom du fichier avec "/" entre les deux.
ImageView1.Bitmap = LoadBitmap(File.DirInternal, "Images/test1.png")
Il y a deux autres objets utiles pour des fichiers texte : TextWriter et TextReader :
Exemple :
Private Writer As TextWriter
Writer.Initialize(File.OpenOutput(File.DirRootExternal, "Test.txt" , False))
Exemple :
Private Writer As TextWriter
Writer.Initialize2(File.OpenOutput(File.DirRootExternal,"Test.txt" ,False)," ISO-8859-1")
TextWriter.Close
- Ferme le flux.
Exemple :
Il y a deux autres objets utiles pour des fichiers texte : TextWriter and TextReader :
Exemple :
Private Reader As TextReader
Reader.Initialize(File.OpenInput(File.DirRootExternal, "Test.txt"))
Exemple :
Private Reader As TextReader
Reader.Initialize2(File.OpenInput(File.DirRootExternal, "Test.txt", "ISO-8859-1")
TextReader.ReadAll As String
- Lit tout le texte restant et ferme le flux.
Exemple :
txt = Reader.ReadAll
TextReader.ReadLine As String
- Lit la ligne suivante.
Les caractres saut de ligne LF ne sont pas lus.
Renvoie Null sil ny a plus de caractres lire.
Exemple :
TextReader.ReadList As List
- Lit le texte restant et renvoie un objet List avec un lment par ligne.
Puis ferme le flux.
Exemple :
List1 = Reader.ReadList
4.12 Fichiers 97 B4x Langage Basic
Encodage de texte ou codage de caractres en un code (aussi appel page de code) qui associe un
jeu de caractres abstraits dun ou plusieurs systmes dcriture (comme des alphabets ou des
syllabaires) utiliss pour transcrire des langues naturelles avec une reprsentation numrique pour
chaque caractre de ce jeu, ce nombre pouvant lui-mme avoir des reprsentations numriques
diffrentes (source Wikipedia).
Dans Windows les pages de code les plus utilises sont ASCII et ANSI.
ASCII contient les dfinitions pour 128 caractres, dont 33 caractres de contrle non
imprimables (aujourdhui obsolte pour la plupart) que dterminent comment le texte est
rparti dans lespace.
ANSI, Windows-1252 ou CP-1252 est une page de code pour les alphabets latins, utilis par
dfaut dans les composants de Microsoft Windows en Anglais et dautres langues
occidentales avec 256 dfinitions. Les 128 premiers caractres sont les mmes que pour la
page de code ASCII.
Beaucoup de fichiers gnrs par des programmes Windows sont encod avec la page de code
ANSI dans les pays occidentaux. Par exemple : fichiers csv Excel, fichiers crs avec Notepad par
dfaut. Mais, on peut aussi enregistrer des fichiers avec lencodage UTF-8.
Pour lire des fichiers encods avec ANSI utilisez la page de code Windows-1252.
Si vous devez enregistrer des fichiers qui doivent aussi tre utilis sous Windows, utilisez
galement la page de code Windows-1252.
Une autre diffrence entre B4x et Windows est le caractre fin de ligne :
B4x, seul le caractre saut de ligne LF (Line Feed) caractre Chr(10) est ajout la fin dune
ligne.
Windows, deux caractres CR (retour chariot Chr(13)) et LF Chr(10) sont ajouts la fin
dune ligne. Si vous devez enregistrer des fichiers pour Windows vous devez ajouter le
caractre CR vous mme.
Pour lire ou crire des fichiers avec un encodage diffrent vous devez utiliser les objets TextReader
ou TextWriter avec les mthodes dinitialisation Initialize2. Mme pour des fichiers csv.
4.12 Fichiers 98 B4x Langage Basic
Ou
Lire le fichier avec TextReader.Initialize2 et lencodage "Windows-1252".
Le renregistrer avec TextWriter.Initialize avec lencodage standard de B4x.
Lire le fichier avec LoadCSV ou LoadCSV2 de la bibliothque StringUtils.
Private tw As TextWriter
tw.Initialize(File.OpenOutput(File.DirInternal, "TestCSV1_W.csv", False))
tw.Write(txt)
tw.Close
Si vous enregistrez un fichier avec NotePad et lencodage UTF-8, trois caractres supplmentaires
sont ajouts au dbut du fichier.
Ces octets sont appels indicateur d'ordre des octets ou BOM en anglais pour (Byte Oder Mark).
Pour UTF-8 ils sont dfinis par cette squence doctets : 0xEF,0xBB,0xBF.
Un diteur de texte ou un navigateur web qui interprte ce texte comme tant un texte Windows-
1252 va afficher ces caractres .
Pour viter ces caractres vous pouvez utiliser Notepad++ au lieu de NotePad et utiliser Encode in
UTF-8 without BOM.
Une autre possibilit pour changer un texte dun encodage Windows-1252 vers UTF-8 est dutiliser
le code ci-dessous.
Initialize2 (SomeArray)
Initialise un objet List avec les valeurs donnes dans le tableau SomeArray. Cette mthode
peut tre utilis pour convertir des tableaux (arrays) en un objet List. Notez que si vous
passez un objet List au lieu dun tableau, alors les deux objets partagent les mmes donnes,
et si vous passez un tableau, la liste aura une longueur fixe.
Ce qui veut dire que vous ne pourrez pas ajouter ni supprimer des lments.
Exemple 1:
Private List1 As List
List1.Initialize2(Array As Int(1, 2, 3, 4, 5))
Example 2:
Private List1 As List
Private SomeArray(10) As String
' Remplir le rableau ici
List1.Initialize2(SomeArray)
Vous pouvez ajouter ou supprimer des lments dun objet List, la taille sera change en
consquence.
Avec :
Add (item As Object)
Ajoute un lment la fin de lobjet List.
List1.Add(Value)
Un objet List peut contenir nimporte quel type dobjet. Dans B4A, si un objet List est dclar dans
la routine Sub Process_Globals in ne peut pas contenir des objets dActivity (comme des views).
B4x convertit automatiquement des tableaux en objet List. Si un objet List est demand comme
paramtre on peut sans autre passer un tableau.
Utilisez la mthode Get pour extraire un lment de lobjet List (le premier index est 0).
Pour extraire le premier lment utilisez Get(0).
Pour extraire le dernier lment utilisez Get(List1.Size - 1).
Get(Index As Int)
nombre = List1.Get(i)
You can use a For loop to iterate over all the values:
For i = 0 To List1.Size - 1
Private nombre As Int
nombre = List1.Get(i)
...
Next
Des objets List peuvent tre enregistrs et lus dans des fichiers avec :
File.WriteList(Dir As String, FileName As String, List As List)
File.WriteList(File.DirRootExternal, "Test.txt", List1)
File.ReadList (Dir As String, FileName As String)
List1 = File.ReadList(File.DirRootExternal, "Test.txt")
Un objet List peut tre tri (tous les lments doivent obligatoirement tre des nombres ou des
objets String) avec :
Sort(Ascending As Boolean)
List1.Sort(True) tri ascendant.
List1.Sort(False) tri descendant.
SortCaseInsensitive(Ascending As Boolean) tri indpendant de la casse.
Un objet Map est une collection de paires de valeurs, une valeur cl et une valeur qui lui est
associe.
Les cls sont uniques. Ce qui veut dire que si vous ajoutez une nouvelle paire cl / valeur et quil
existe dj une mme cl, la valeur prcdente sera remplace par la nouvelle.
La cl doit tre un objet String ou un nombre. La valeur associe peut tre nimporte quel objet.
Similaire lobjet List, un objet Map peut contenir nimporte quel objet pour la valeur. Mais, dans
B4x, sil est dclar dans la routine Process_Globals il ne peut pas contenir des objets dActivity
(Views).
Les objets Map sont trs utiles pour mmoriser des paramtrages dapplications.
Les objets Map doivent tre initialiss avant de pouvoir les utiliser.
Initialize Initialise un objet Map vide.
Private Map1 As Map
Map1.Initialize
Extraire un lment :
Get(Key As Object)
Language = Map1.Get("Langue")
Supprimer un lment :
Remove(Key As Object)
Map1.Remove("Langue")
Les objets Map peuvent tre enregistrs et lus dans des fichiers avec :
File.WriteMap(Dir As String, FileName As String, Map As Map)
File.WriteMap(File.DirInternal, "settings.txt", mapSettings)
5 Outils daide
Les outils suivants sont utiles pour trouver des rponses beaucoup de vos questions.
Et le rsultat :
Sur le haut vous trouvez des boutons permettant un filtrage selon diffrents critres.
Ce programme affiche les fichiers daide xml. Il tait crit lorigine par Andrew Graham
(agraham) pour B4A. Je lai modifi, avec lagrment dAndrew, pour afficher les fichier xml de
toutes les plateformes B4A, B4J, B4i et B4R.
A ct de la liste des
objets vous trouvez une
autre liste droulante avec
mthodes(M)
vnements(E)
proprits(P)
champs(F)
pour lobjet slectionn.
Moteur de recherche pour trouver des objets avec des mots cl.
Ferme B4AHelp
Bibliothques standard.
Une fois slectionn, le nom du dossier est mmoris pour les dmarrages suivants du programme.
5 Outils daide 108 B4x Langage Basic
Ceci est aussi un programme autonome Windows affichant les fichiers daide des bibliothques.
Un mode demploi en pdf (en anglais) sur son utilisation fait partie du tlchargement.
6 Conseils 109 B4x Langage Basic
6 Conseils
Quelques conseils dErel pour les dveloppeurs B4x ([B4X] Tips for B4X developers).
Introduire des donnes directement dans le code rend votre programme illisible et difficile
maintenir.
Il y a plusieurs possibilits de traiter les donnes. Par exemple, vous pouvez ajouter un fichier texte
dans longlet Gestionnaire de fichiers et le lire dans une liste avec :
Ne copiez pas plusieurs fois une mme portion de code, car si plus tard vous devez faire une
modification vous devez la faire x fois, il vaut alors la peine de rflchir une solution plus
lgante, dfinr une routine par exemple.
Du code rptitif est difficile maintenir et mettre jour. Le mot cl Sender peut tre utile dans
bien des cas (tutoriel ancien, mais toujours dactualit : Tick-Tack-Toe: working Wit aras of views).
Tous les dveloppeurs devraient apprendre comment utiliser une collection Map. Cest de loin la
collection la plus utile. Tutoriel : https://www.b4x.com/android/forum/threads/map-collection-the-
most-useful-collection.60304/
Ne soyez pas effray dapprendre de nouvelles choses. En tant que dveloppeurs nous sommes
obligs dapprendre du nouveau. Tout volue, que nous le voulions ou non. La technologie MQTT
est un bon exemple. Cette technologie ne mtais pas familire, mais lorsque jai commenc par
lapprendre jai t surpris de la puissance et de la facilit de cette solution.
Vous devriez prendre en considration les fonctionnalits ci-dessous:
- Smart strings: https://www.b4x.com/android/forum/threads/50135/#content
- Itrateur For Each: https://www.b4x.com/android/forum/threads/loops.57877/
- Classes: https://www.b4x.com/android/forum/threads/18626/#content
Vous devriez afficher des commentaires (Logs) durant le droulement du programme. Surtout sil y
a des erreurs. Si vous ne voyez pas ces commentaires pour une raison ou une autre vous devez
prendre le temps pour trouver la raison et corriger le problme. Avec B4A-Bridge les commentaires
ne seront affichs quen mode Debug. Si vous rencontrez un problme qui napparait quen mode
Release, vous devez connecter votre dispositif au moyen dun cable USB.
6 Conseils 110 B4x Langage Basic
DoEvents interfre avec la queue interne de messages et peut provoquer des problems inattendus. Il
y a trs peu de cas o cest ncessaire. Ce ntait pas le cas lorsque la version 1.0 de B4A a t
publie. Depuis, les bibliothques se sont amliores et offrent maintenant de meilleures solutions.
Par exemple, si des operations de bases de donnes sont trop longues, tout en utilisant correctement
les transactions, vous devriez vous tourner vers les mthodes asynchrones. Ou utiliser Sleep ou
Wait For.
Nessayez pas de sauver des octets (bytes) en tant quobjet String. Ca ne fonctionne pas. Utilisez un
tableau doctets la place. La manire correcte de convertir des octets en un objet String est un
encodage base 64 ou avec ByteConverter.HexFromBytes.
Les Services sont plus simples que les Activities. Ils ne sont jamais desactivs (paused) et sont
pratiquement toujours accessibles.
Trois rgles gnrales propos des variables globales:
1. Toutes les variables non IHM (interface homme-machine) doivent tre dclares dans
Process_Globals.
2. Les variables publiques (process_global) devraient tre dclares dans le Service Starter dans
Process_Globals et la definition de leur valeurs dans la routine Service_Create.
3. Les variables process globales dans les Activities doivent tre dfinies seulement lorsque
FirstTime est gal True.
Ceci ne concerne que B4A. Cest plus simple dans B4J et B4i car il ny a pas de cycles de vie
particuliers et les modules ne sont jamais desactivs.
B4X fournit quelques outils qui vous aident dfinir des layouts flexibles qui sadaptent toutes les
grandeurs dcran. Les outils principaux sont: ancres (anchors) et les Scripts dans le Concepteur
visual (Designer Scipts). vitez dajouter des variantes (variants) multiples (deux sont bien). Les
variantes ont t introduites dans la version 1.00 de B4A avant lintroduction des autres
fonctionnalits. Les variantes sont difficiles maitenir et peuvent tre remplaces par des scripts.
Les ancres (anchors) sont simples utiliser et trs puissants.
Nabusez pas des unites pourcentage (%x ou %y), moins que vous ne programmiez des jeux.
http://www.basic4ppc.com/forum/basi...ing-multiple-screens-tips-best-practices.html
B4A, B4i, B4J partagent le mme language, les mme concepts et les mmes APIs. Il est facile
dchanger des donnes entre les diffrentes plateformes avec B4XSerializator.
Il est facile dimplmenter des solutions de serveur puissantes avec B4J. Spcialement si les clients
sont dvelopps avec B4A, B4i ou B4J.
6 Conseils 111 B4x Langage Basic
Utilisez la function recherche (Search) dans le forum. Vous pouvez filtrer les rsultats en ajoutant la
plateforme (par exemple b4a) la demande ou en cliquant sur un des boutons dans la page de
rsultats.
La plupart des questions trouvent leur rponse en quelques clics.
6.12 Notepad++.
A un moment ou un autre, nous devons travailler avec des fichiers texte. Je vous recommande
vivement dutiliser lditeur Notepad++ qui permet dafficher lencodage, les caractres de fin de
ligne et inclut dautres fonctionnalits. https://notepad-plus-plus.org/
7 Dictionnaire 112 B4x Langage Basic
7 Dictionnaire
Layout Terme anglais significant mise en page, utilis pour les interfaces homme
machine.