Aller au contenu



Photo

[S60 v2-v3] Programmation C++


  • Veuillez vous connecter pour répondre
150 réponses à ce sujet

#1 samir

samir

     

  • +Membres +
  • 2005 messages
  • Sexe:Masculin
  • Localisation:Montataire - Picardie
  • Mobile:Nokia
  • Modèle:N95 8GB
  • Opérateur:F Bouygues

Posté 21 Sep 2006 - 09:19

Bonjour à tous et bienvenue dans ce cours consacré à la programmation en C++ sur S60
:w00t:


Introduction

L'objectif de ce cours est donc l'apprentissage de la programmation afin de pouvoir créer vous même vos propres applications.

___________________

Image IPB Pourquoi le C++ ?
Il existe une multitude de langages pour S60 (java, perl, python...), certains étant très simple d'utilisation (comme le python par exemple) mais tous possèdent des lacunes (poids, lenteur, fonctions limitées..).

Le C++ est le langage native de l'OS Symbian, permet la compilation en langage machine, très rapide et offre de multiples fonctions. Le gros inconvénient, malheuresement, c'est sa complexité.

Ce tuto n'a pas pour objectif de vous enseigner à programmer le nouveau tomtom ou des jeux en 3D, mais dans un premier temps, simplement faire de petites applications ludiques.

___________________

Image IPB Quel est le public visé ?
Je suis moi-même en train d'apprendre ce langage, je posterais dans ce topic au fil de l'acquisition de mes connaissances. De ce fait ce tutoriel ne sera pas d'une extrême complexité et mon langage sera donc assez simplifié.

Néanmoins une connaissance de base en programmation est évidemment requise car je ne décrirais pas chaque fonction du C++ mais présenterais plutôt les librairies propres au symbian et particulièrement à l'UI S60.

___________________

Image IPB Comment se présentera ce topic ?
Comme je l'ai dit dans la question précédente, ce topic se formera en fonction des connaissances que j'aurais acquises.
Je posterais, régulierement et selon mon temps disponible, des chapitres.
Chaque chapitre sera dédié à un sujet en particulier et se composera d'exemples, de screenshot et d'exercices (que vous pourrez posté dans ce topic :w00t: )

Si j'ai oublié certaines choses, ou fait des erreurs, je corrigerai au fur et à mesure ce topic, en fonction de vos questions et des problèmes rencontrés.

Si vous avez d'autres questions n'hésitez pas :wub:

Sommaire



Modifié par samir, 06 Nov 2006 - 18:03.




#2 samir

samir

     

  • +Membres +
  • 2005 messages
  • Sexe:Masculin
  • Localisation:Montataire - Picardie
  • Mobile:Nokia
  • Modèle:N95 8GB
  • Opérateur:F Bouygues

Posté 21 Sep 2006 - 19:24

Chapitre 1: Installation



Ce chapitre a pour objectif l'installation de tous les logiciels et les outils nécessaires à la création de programmes.

___________________

Image IPB Pré-requis:
  • Microsoft Windows 2000 (SP 4) ou Windows XP (SP 2)
  • 512 MB de RAM, 1024 MB recommandé
  • Processeur 1800 MHz
  • Au moins 350 Mo d'espace libre
Cette configuration est la configuration minimale permettant une utilisation aisée, la compilation et l'émulation étant des processus qui ont besoin de ressources.
PS: Il m'arrive également de programmer sur mon portable P3 800mhz 256Mo, le logiciel tourne mais il faut parfois être patient...

Vous devez également posseder une version récente de java sur votre PC. Si vous ne la possedez pas vous pourrez la telecharger à cette adresse J2RE 1.5.0.06

___________________

Image IPB Inscription au forum nokia

Vous devrez avant tout, vous inscrire au site de nokia afin de pouvoir telecharger les fichiers necessaires.
  • Rendez vous à cette adresse: http://forum.nokia.fr
  • Entrez toutes les informations obligatoires demandées et une adresse mail valide.

___________________

Image IPB Une fois inscrit il va falloir installer carbide c++

Carbide C++ est l'IDE (environnement de développement) de programmation en C++ proposé par nokia.

Image IPB

Il existe trois versions de carbide: Professional, Developer et Express (la seule grauite), nous n'utiliserons que la derniere qui comporte suffisament de fonctionnalités à notre niveau.
  • Connectez vous au forum nokia: http://forum.nokia.com, puis cliquez, dans le menu à gauche, sur "Tools and SDKs" puis "Carbide"

    Image IPB

  • Ensuite cliquez sur "Download Exp" puis sur l'icone "Download now"

    Image IPB -> Image IPB

  • Une fois carbide téléchargé, lancez son installation.

___________________

Image IPB Carbide n'est pas un logiciel autonome et a besoin de SDK (kit de développement)

Chaque SDK comprend tous les fichiers necessaires à la compilation, des docs, des examples et des émulateurs pour tester vos applications sur PC. Il existe un SDK par version de symbian

Il n'est pas necessaire de tous les télécharger, ne prennez que ceux qui vous semblent utiles, c'est à dire selon les modèles de telephones pour lesquels seront destinées vos applications:PS: Vous pourrez trouvez la liste des S60 selon leur version d'OS à cette adresse ou sur le site de forum nokia en allant dans la partie "Devices specifications"

___________________

Image IPB Une fois le ou les SDK installés, il ne vous reste plus qu'à télécharger la dernière version de perl

Vous pourrez télécharger Perl à cette adresse:

___________________

Image IPB Récapitulatif:
  • Inscription sur le site de nokia
  • Installation de Carbide Express C++
  • Installation des SDKs nécessaires
  • Installation de Perl
Ca y est votre PC est prêt pour la programmation en C++ pour S60, prochain tuto:La compilation et l'exécution de programmes (sur émulateur et téléphone)...

@+

Modifié par samir, 21 Sep 2006 - 23:54.


#3 samir

samir

     

  • +Membres +
  • 2005 messages
  • Sexe:Masculin
  • Localisation:Montataire - Picardie
  • Mobile:Nokia
  • Modèle:N95 8GB
  • Opérateur:F Bouygues

Posté 22 Sep 2006 - 07:26

Chapitre 2: Compilation et exécution



Nous allons désormais nous interésser à l'usage de base de carbide, c'est à dire la compilation et l'exécution de nos programmes.

___________________

Image IPB Dans un premier temps nous allons configurer notre espace de travail

Lors du premier démarrage, carbide vous demandera d'indiquer le dossier qui servira d'espace de travail ("workspace").
C'est dans ce dossier que se trouvera tous vos projets ainsi que tous les fichiers qui les constituent.

Vous pouvez par la suite modifier son emplacement, pour cela cliquez, dans le menu contextuel, sur "File" -> "Switch Workspace"

Votre dossier "workspace" ressemble alors à ça, avec tous les projets que vous aurez créés:

Cliquer sur l'image pour l'agrandir Cliquer pour agrandir

Image IPB- Votre dossier "workspace" doit se trouver dans la même partition que carbide (sur le c: par ex.)
- Il est recommandé de ne pas mettre d'espaces dans le chemin et nom de votre dossier. L'idéal serait donc de le placer à cette adresse "c:\workspace" (si carbide se trouve sur le c:)


___________________


Image IPB Création d'un nouveau projet

Carbide propose des "templates", ce sont des programmes préfaits, que l'on peut utiliser comme base pour la programmation de nos logiciels.
  • Pour créer un nouveau projet cliquez sur: "File" -> "New" -> "C++ Application for S60 Project"
    Image IPB

  • A cette fenêtre, indiquez le nom de votre projet (ici HelloFM):
    Image IPB

  • Ici selectionnez le type de templates que vous souhaitez
    Par exemple "S60 2.x Hello world GUI application" ou "S60 3.x GUI application" pour les S60v3 (ces templates permettent l'affichage d'un message et d'une note)
    Image IPB

  • Ensuite selectionnez les SDKs pour lesquelles votre application est destinée
    Ici par exemple S60v2 FP2 et S60v2 FP3. En règle générale selectionnez "Alls SDKs"
    Image IPB

  • Cette fenetre vous permet d'indiquer toutes les propriétés de votre projet:
    Image IPB
    Application UID: Il s'agit d'un code unique qui représentera votre logicel (sa "plaque d'imatriculation"). Plus d'infos à cette adresse: https://www.symbiansigned.com.
    En règle générale laissez celui qui vous est proposé.
    PS: Vous pourrez également vous inscrire sur ce site pour reserver un UID pour être assuré qu'il ne sera utilisé que par votre applicaition

    Author: Ca c'est vous :cool:

    Puis le message concernant le copyright et un message d'acceuil.

  • On a ici tous les dossiers utilisés pour votre projet, gardez les noms proposés par défaut.
    Image IPB

  • Voilà votre projet à été créé, votre fenetre ressemble alors à ca:
    L'onglet "C/C++ projects" a gauche qui présente tous vos projets, et ses fichiers
    L'onglet "Build configurations" qui présente les SDKs correspondants au projet.
    Cliquer sur l'image pour l'agrandir Cliquer pour agrandir

    PS: Si ces onglets sont fermés, vous pourrez les réafficher en cliquant sur "Window" -> "Show view" -> "Build configurations" et "C/C++ projects"
    Par la suite pour revenir à cette fenetre cliquez sur "Window" -> "Open perspective" -> "Symbian"

___________________



Image IPB La compilation du projet et l'éxécution dans l'émulateur

La compilaton est la conversion du code source en un langage compréhensible et donc exécutable par la machine (sur PC ou Smartphone dans notre cas)
  • Avant de compiler vérifié qu'un émulateur est bien selectionné dans l'onglet "Build Configurations".
    Image IPB
    Si ca n'est pas le cas, pour changer de configuration, cliquez sur la flêche près du "i" et sélectionné un émulateur.
    Image IPB

  • Pour lancer la compilation selectionné votre projet dans l'onglet "C/C++ projects", clic droit -> "Build Project" (ou"Rebuild Project" pour forcer la compilation)
    (ne tennez pas compte pour le moment des messages d'avertissements affichés après la compilation)
    Image IPB

    PS: N'oubliez pas, pour plus tard, de toujours re-compiler votre programme si il y a eu une modification, avant de lancer l'émulateur. Sinon l'émulateur ne prendra pas en compte les modifications que vous aurez apportées.

  • Désormais pour lancer ce projet, avec l'émulateur séléctionné il vous suffira de cliquer sur "Run Symbian OS Application" via la barre d'outils, comme indiqué sur le sreenshot:
    Image IPB

  • Puis lancez l'application comme vous en avez l'habitude sur vos téléphones :thumbup:
    Image IPB

  • Et voilà le résultat:
    Image IPB

___________________


Image IPB La compilation du projet pour l'éxécution sur votre mobile:

La manipulation est quasi-identique, il suffit juste de changer la configuration dans l'onglet "Build Configuratons".
  • Modifier la configuration dans l'onglet "Build Configurations" comme indiqué plus haut, en séléctionnant "Phone ARMI" ou "Phone GCCE".

  • Compiler le programme comme indiqué plus haut, à l'aide de la fonction "Build" ou "Rebuild".

  • Dans le dossier sis de votre projet, cliquez sur le nom du fichier pour lancez l'installation (si vous avez PC SUITE installé) ou cherchez le .sis dans le dossier "votre dossier workspace/nom du projet/sis" et installez le dans votre mobile comme vous en avez l'habitude.

___________________


Si vous avez des questions, si j'ai fait des erreurs ou si je n'est pas été très clair sur certains points, faites le moi savoir :thumbup:

La prochaine fois on s'interressera à la structure générale du code source d'un programme S60...

@+

#4 samir

samir

     

  • +Membres +
  • 2005 messages
  • Sexe:Masculin
  • Localisation:Montataire - Picardie
  • Mobile:Nokia
  • Modèle:N95 8GB
  • Opérateur:F Bouygues

Posté 22 Sep 2006 - 07:52

Chapitre 3: Notre premier programme



Nous y voila, enfin, comme vous l'aurez compris cette fois-ci on s'attaque à la programmation.

Je pensais au départ présenter directement la structure d'une application S60 mais cela necessitait d'aborder beaucoup de connaissances en un seul chapitre.

On va donc, dans ce chapitre, plutot programmer, non pas une application mais un fichier éxécutable.

En S60 un application est défini par pas mal de chose comme l'UID, que l'on a vu au chapitre précédent, mais aussi par un document, un container ...et un tas d'autres "choses" qui rentrent en jeu directement dans le source et que l'on abordera plus tard. Ces fichiers se terminent par un .app

Un éxécutable se termine par un .exe, mais comme ce n'est pas une application, une fois installé sur certains mobiles, il ne sera pas affiché dans le menu. Il devra être lancé via un explorateur de fichiers, du type fexplorer.

De plus ces fichiers ne se lancent pas directement pour les mobiles S60v3, dans ce chapitre donc, on ne programmera que sur S60v2.

Mais alors à quoi ca sert ?

Et bien je préfére commencer par un programme qui soit le plus simple et le plus court possible afin de commencer en douceur

J'en profiterais aussi pour rapeller quelques fondements du langage C++ en générale.

PS: Je vous conseille de ne pas utiliser les exemples que l'on donnera dans ce chapitre sur vos téléphones, on va se contenter de programmes simples, épurés de tout controle d'erreur et de gestion de la mémoire, et donc capable de faire bugger votre portable. Les émulateurs sont pour le moment amplement suffisant pour les tests.

Je vous conseille également de faire systématiquement un copier-coller des exemples donnés dans carbide afin d'avoir un apercu du code coloré syntaxiquement et donc plus compréhensible.

___________________

Sommaire du chapitre 3

Image IPB Quelques rappels...
Image IPB Le programme de base
Image IPB Installation du projet
Image IPB HelloFM !
Image IPB HelloFM optimisé
Image IPB Exercices

___________________

Image IPB Quelques rappels...
Je dit des rappels, mais ca peut etre nouveau pour certains (ceux qui n'ont jamais programmé par exemple). Dans ce cas pas de panique, jusqu'ici il n' y a rien de très compliqué. Je n'entrerai pas dans le détail mais on verra des exemples pratiques, qui vous aiderons à mieux comprendre.
Si vous avez du mal avec certaines notions, n'hésitez pas à poser vos questions.
  • Les commentaires
    Les commentaires permettent d'ajouter des informations dans le code source, des annotations, du texte...

    Il existe deux facon de commenter un code source:
    - En utilisant le double slash: // (commentaire d'un ligne)
    - En utilisant le /* et */ (commentaires sur plusieurs lignes)

    Exemples:
    //Ceci est un commentaire
    
    /*
    Nous allons programmer en C++ sur nos mobiles ?
    C'est génial!!
    Merci FM!!!
    */

  • Les instructions
    Les instructions sont des commandes que l'on demande à la machine d'effectuer.
    Elle se terminent toujours par un ";"

    Exemple:
    a = 1 + 2;

  • Les variables
    Les variables sont des 'objets' dans lesquels on va stoker des informations.

    Elles se composent d'un nom et d'une valeur.

    Exemples:
    var = 1 + 2; //La variable de nom "var" prendra la valeur 3 à la suite de cette instruction
    uneAutreVariable = 4;
    var = var - 1; //Et ici var sera égale à 2
    uneAutreVariable = 5 * var; //uneAutreVariable prend la valeur 10

  • Les types de variables
    Chaque variable, avant utilisation doivent etre declarée et dans la déclaration, il va falloir indiqué son type.

    En clair a chaque fois que vous voudrez utiliser une variable, il va falloir dire à la machine si votre variable va contenir un entier, un nombre décimal, une chaine de caractere,...

    Des exemples de types et de déclaration de variables:
    int var; //int correspond aux entiers
    float varVirgule; //float désigne les nombres décimaux
    
    //on peut aussi déclarer plusieurs variables à la fois en les séparant par un virgule
    int var, uneAutreVariable;

    Si vous utilisez une variable sans la déclarer ou si vous cherchez à stocker une information qui ne correspond pas au type de la variable, vous provoquerez alors une erreur lors de compilation.

    PS: Symbian possède des types de variables qui lui sont propre. Par exemple pour déclarer un entier il faudra utiliser TInt, TInt32... on verra les différents types propres à symbian dans un autre chapitre.


  • Les fonctions
    Les fonctions sont une série d'instructions. A chaque appel de celle-ci, elle execute les instructions qu'elle contient.

    Une fonction se présente de cette facon

    Type_a_renvoyer nomDeLaFonction(type_parametres parametres)
    {
    //Les instructions à executer
    ...
    return(uneVariable); //Facultatif, c'est l'instruction qui permet renvoyer une valeur.
    /*Si la fonction ne retourne aucune valeur, il faut retirer cette instruction et indiquer void dans le Type_a_renvoyer*/
    }


    Exemple:
    //Fonction qui additionne deux nombres donnés 
     
    /* La fonction de nom "Aditionne" à pour parametres deux réels (que l'on nommé ici a et b) 
    et renvoi un entier */ 
    int Aditionne(int a, int b) 
    { 
    	int somme; //On déclare la variable somme qui est un entier 
    			// a et b sont dèjà déclarés dans l'entête de la fonction 
    	somme = a + b; //on additionne a et b, le résultat est mis dans la variable somme 
    	return(somme); //la valeur de la variable somme est renvoyée 
    }

    Pour appeler la fonction il suffit de faire par exemple:
    resultat = Aditionne(4,7); // la variable resultat prend alors la valeur 11

  • Les includes
    Les includes permettent d'inclure dans le code source, des fichiers (appelés header, ayant l'extension .h). Ces fichiers contiennent, en général, des fonctions que l'on pourra utiliser dans notre programme.

    Notation:

    #include <nomDuHeader.h>

    Le header de base sur symbian s'appelle e32base.h. Ils contient toutes les fonctions de base propre au symbian:
    #include <e32base.h> //header qui contient les fonctions de base sous symbian
  • Les structures conditionnelles
    Les structures conditionnelles permettent d'éxécuter certaines instructions selon des conditions que l'ont aura définies.
  • La plus simple if... then ....else (trad: si...alors...sinon)
    Structure:

    if(condition)
    {
    bloc d'instructions à éxécuter si condition
    est vraie

    }
    else
    {
    bloc d'instructions à éxécuter si condition
    est faux

    }


    Voilà par exemple, une fonction qui modifie une variable en sa valeur absolue:
    if( a < 0) //Si a est inférieur à 0...
    {
    	a = -a; //Il stocke l'opposé de a dans a
    }
    PS : Le else n'est pas obligatoire.
  • Le switch
    Il permet de travailler aux cas par cas:
    Exemple:
    String niveau;
    int nbre_mobiles;
    
    //String est le type d'une chaine de caractères
    //Les chaines de caractères sont délimitées par des guillemets
    
    nbres_mobiles = 3;
    //La vous mettez le nombre de vos mobiles
    
    switch (nbre_mobiles)
    {
    case 0:
      niveau = "T naze!";
      break;
    case 1:
      niveau = "Salut, j'débarque :-)";
      break;
    case 2:
      niveau = "Motivé";
      break;
    case 3:
      niveau = "Apprenti";
      break;
    case 4:
      niveau = "Initié";
      break;
    case 5:
      niveau = "GSMophile";
      break;
    default:
      niveau = "Bac +6 mobilophonie";
      break;
    }
    Vous l'aurez compris, si le nombre de mobiles est égal à 5 par exemple, la variable niveau prendra la valeur "GSMophile"

    Les instructions de la condition default sont exécutées lorsque la variable mis en parametre ne correspond à aucun des cas (par exemple pour nbres_mobiles=73)
    PS: N'oubliez pas aussi l'instruction break; à la fin de chaque cas.
  • Do...While (Faire...TantQue)
    Un exemple pour bien comprendre:
    int a;
    
    a = 1;
    
    do
    {
    	a =  a +1;
    } while (a <= 20);
    Le programme va éxécuter l'instruction a = a + 1; tant que a <= 20.

    Attention à ce type de structure (que l'on appelle des boucles): En effet, si l'on met par exemple (a > 1) en condition, le programme ne s'arretera jamais!
    a sera égale à 1 puis 2 puis 3, 4, 5..... il ne s'arretera pas car a sera toujours supérieur à 1...
Voilà pour les rappels, on va s'arreter là. Il y a encore un tas d'autres choses à voir, mais cela est suffisant pour attaquer la suite.

J'ai été très bref donc n'hésitez pas à poser vos questions, à faire des tests, et consulter d'autres tutos destinés spécifiquement au C++.

___________________


Image IPB Le programme de base

Voilà, je vous présente le programme le plus court et le plus simple sur S60 :)
//Le programme de base en C++ pour symbian
#include <e32base.h>

TInt E32Main()
{
	return(0);
}

On va maintenant le décortiqué ligne par ligne:
  • #include <e32base.h>
    Ca c'est l'include qui contient les fonctions de base de symbian.

  • TInt E32Main()
    Là c'est la fonction E32Main()
    C'est la premiere fonction qui sera lancée lors de l'éxécution de votre programme
    C'est en quelque sorte le point de départ de votre programme (équivaut à int main(int argc, char *argv[]) en C++ classique)
    PS: TInt est un type de variable spécifique à symbian qui équivaut à int en C++ classique
  • return(0);
    La fonction E32main() doit renvoyer un TInt, donc ici par défaut 0.
    Le fait que la fonction retourne un nombre peut etre utile pour la gestion des erreurs, on verra ça aussi dans d'autres chapitres.

___________________


Image IPB Installation du projet

Avant de continuer il va falloir installer le programme que l'on vient de voir sur votre PC, afin de pouvoir travailler dessus.
  • Telecharger ce fichier HelloFM.zip et décrompesser le.

  • Vous devez alors avoir cà dans votre dossier HelloFM:
    Image IPB

  • Lancez carbide et allez dans file -> import -> Existing projects into workspace -> next
    Image IPB -> Image IPB

  • Puis dans browse et selectionnez le dossier que vous venez de décompresser puis ok -> finish
    Image IPB

  • Vous avez maintenant ca dans votre onglet projets.
    Image IPB

  • Dans l'onglet des projets, allez dans le dossier HelloFM puis src puis cliquez deux fois sur le fichier HelloFM.cpp pour afficher le code
    Image IPB
    PS: Au fait je vous l'avais pas dit mais les fichiers sources en C++ ont une extension .cpp

  • Le code source apparait:
    Image IPB
Maintenant essayer de le compiler et de l'éxécuter sur l'émulateur... (cf chap 2)

Ca y est ? Alors ? ;)
Il ne c'est rien passé! L'émulateur s'est lancé puis fermé aussitot !!! :(

C'est normal... mais je suppose que vous en doutiez...
Effectivement la fonction E32Main() se lance, retourne(0) et s'arrete...

Maintenant on va donc essayer de faire faire quelque chose de plus concret à notre programme.

___________________


Image IPB HelloFM !

Le premier programme de tous programmeurs s'appelle Hello World, rebaptisé ici Hello FM (he samir, t'es pas un peu communautariste la ?)

Le but de ce programme est très simple: Afficher à l'écran le texte "Hello FM" ! ;)

Et pour l'affichage on va utiliser une console!
Cool, une console comme la Playstation ou la XBOX 360 ? ;)
Non, pas du tout...
... une console, qu'est ce que c'est alors ? :top:

Pour faire simple on va dire que c'est un écran sur lequel on peut afficher que du texte (donc sans fenetre, icones...), comme l'invite de commandes de windows XP par exemple, ou le texte qui défile lorsque vous allumer votre PC.
  • Tout d'abord il faut inclure la blibliotheque qui contient toutes les fonctions liés à la console: la voici, elle s'appelle e32cons.h

    Si vous avez compris le fonctionnement des headers, vous avez donc certainement compris que le programme allait commencer de cette facon:
    #include <e32base.h>
    #include <e32cons.h>
    Voila pour les headers...

  • Maintenant les déclarations:
    Dans cette premiere ébauche de notre programme, on va utiliser une console qu'il faudra créer donc nommer et déclarer.

    Le type d'une console, c'est CConsoleBase, et on va la nommer ... consoleFM ! (pourquoi le FM apres console ? samir, là ca devient de l'extremisme)

    Notre programme ressemble donc à ca:
    #include <e32base.h>
    #include <e32cons.h>
    
    CConsoleBase* consoleFM;

    Pourquoi il y a une étoile sur le type, pour la console ?
    On verra ca dans d'autres chapitres... c'est une histoire de pointeurs et d'adressage en mémoire et c'est une longue histoire...

  • Maintenant on ajoute la fonction E32Main():
    #include <e32base.h>
    #include <e32cons.h>
    
    CConsoleBase* consoleFM;
    
    TInt E32Main()
    {
    	return(0);
    }

  • On s'attaque ensuite à l'intérieur de la fonction main:

    Au sujet de la console (commme d'autres objets), une fois déclarée, il va falloir la créer.
    La création d'une console se fait via cette instruction:

    nomDeLaConsole=Console::NewL(_L("Le titre de la console"),TSize(largeur de la console,longueur de la console));

    Ce qui dans notre cas donne ca:
    consoleFM=Console::NewL(_L("Console FM"),TSize(KConsFullScreen,KConsFullScreen));

    Quelques explications:
    • Pour les "::", la fonction "_L" et "NewL", on verra ca aussi d'autres chapitres. Retené juste la structure générale de cette instruction.
    • KConsFullScreen sont des constantes qui renvoient la taille de l'écran. Le paramètre TSize(KConsFullScreen,KConsFullScreen) permet donc de créer une console qui prendra toute la taille de l'écran.
    Le code source ressemble maintenant à ca:
    #include <e32base.h>
    #include <e32cons.h>
    
    CConsoleBase* consoleFM;
    
    TInt E32Main()
    {
    	consoleFM=Console::NewL(_L("Console FM"),TSize(KConsFullScreen,KConsFullScreen));
    	return(0);
    }

  • La console à été déclarée, puis créée, elle possède désormais un tas de fonctions et de propriétés. On y fait appel grace à ce symbole "->".
    Par exemple la fonction ClearScreen qui permet d'effacer le contenu de l'écran se lance de cette facon:
    consoleFM->ClearScreen(); //Efface l'écran de la console nommé consoleFM

    Voici quelques autres fonctions et propriétés d'une console:
    • Printf(_L("Du texte à afficher")): Affiche un texte
    • WhereX(): renvoi la position en abscisse du curseur
    • WhereY(): renvoi la postion en ordonnee du curseur
    • ClearToEndOfLine(): efface la ligne à partir de la position du curseur
    • Getch(): Stoppe l'éxécution du programme et attend qu'une touche soit tapée. Le code de la touche est alors renvoyé.
    • etc...
  • On peut donc maintenant afficher notre fameux "Hello FM"
    On va donc utiliser la fonction Printf. Cela donne:
    #include <e32base.h>
    #include <e32cons.h>
    
    CConsoleBase* consoleFM;
    
    TInt E32Main()
    {
    	consoleFM=Console::NewL(_L("Console FM"),TSize(KConsFullScreen,KConsFullScreen));
    	consoleFM->Printf(_L("Hello FM!"));
    	return(0);
    }

  • Tentez de compiler et d'éxécuter, résultat: Rien ? comme tout a l'heure.
    Pas de panique c'est normal aussi... (samir, tu es sur que tu ne te moques pas de nous là ??)
    Mais non, le programme a bien lancé la console et écrit "Hello FM", puis s'est terminé... mais cela à été tellement vite que l'on a rien vu.

    Pour résoudre ce problème on va utiliser la fonction getch() que l'on a vu plus haut, qui permet de stopper l'execution du programme jusqu'à ce qu'une touche soit tapée par l'utilisateur.

    Et voilà le nouveau code (que j'ai commmenté afin de faire un bilan):
    #include <e32base.h> //On inclut le header de base
    #include <e32cons.h> //puis le header qui contient les fonctions liées à la console
    
    CConsoleBase* consoleFM; //On déclare une variable de nom consoleFM et de type CConsoleBase
    
    TInt E32Main() //La fonction principale
    {
    	consoleFM=Console::NewL(_L("Console FM"),TSize(KConsFullScreen,KConsFullScreen)); //On créé la console
    
    	consoleFM->Printf(_L("Hello FM!")); //On y affiche le texte Hello FM!
    	consoleFM->Getch(); //On stoppe le programme jusqu'à la pression d'une touche
    
    	return(0); //C'est la fin de la fonction principale, on retourne 0.
    }

  • Maintenant compiler et éxécuter ce code source: Ca y est on obtient enfin ca:
    Image IPB
Votre premier programme Hello FM est enfin terminé !! :(

___________________


Image IPB HelloFM optimisé

Maintenant on va s'interesser à quelques optimisations que l'on peut apporter et s'interesser à quelques fonctions....
  • La fonction delete
    La fonction delete permet de supprimer un objet créé. Dans notre exemple on a crée une console nommée ConsoleFM, il est péférable, lorsque celle ci n'est plus utilisée de la supprimer.

    L'instruction pour supprimer un objet créé est:
    delete consoleFM;

    Cette instruction permet, entre autres, de libérer de la mémoire et l'on verra dans le prochain chapitre l'importance que la gestion de la mémoire sous symbian.

    Il faut garder à l'esprit que nous travaillons sur des mobiles et que les ressources sont par consequent très limitées.

    Sous symbian, la fonction delete n'est pas suffisante, et il faudra faire appel à d'autres méthodes de gestion de la mémoire. Ca sera le sujet du prochain chapitre.

  • Le retour à la ligne
    On va commencer par ajouter une ligne de texte sur notre console afin d'y indiquer à l'utilisateur qui faut appuyer sur une touche pour continuer.

    Logiquement le résultat devrait ressembler à ca:
    #include <e32base.h>
    #include <e32cons.h>
    
    CConsoleBase* consoleFM;
    
    TInt E32Main()
    {
    	consoleFM=Console::NewL(_L("Console FM"),TSize(KConsFullScreen,KConsFullScreen));
    
    	consoleFM->Printf(_L("Hello FM!"));
    	consoleFM->Printf(_L("Appuyer sur une touche..."));
    
    	consoleFM->Getch();
    
    	delete consoleFM;
    
    	return(0);
    }

    Mais lorsque l'on lance le programme ca donne ca:
    Image IPB

    Vous l'avez compris il manque un retour à la ligne....
    En C++ le retour à la ligne se caractérise par \n

    On va donc remplacer l'instruction:
    consoleFM->Printf(_L("Hello FM!"));
    par
    consoleFM->Printf(_L("Hello FM!\n"));

    On peut aussi ajouter un retour à la ligne à l'intérieur d'un texte:
    consoleFM->Printf(_L("Appuyer sur une touche\npour continuer..."));

  • La fonction Getch()
    Getch(), comme on l'a vu tout l'heure permet de stopper le programme jusqu'à l'action d'une touche, mais il est capable aussi de renvoyer la touche tapée.

    Le type renvoyé par Getch est un TKeyCode, chaque touche ayant son propre code.

    En voici quelques-uns:
  • gauche = 63495
  • droite = 63496
  • haut = 63497
  • bas = 63498
  • ok = 63557
  • Touche vert (dial) = 63586
  • Touche rouge = 63587
  • Touche 0 = 48
  • Touche 1 = 49
  • Touche 2 = 50
  • ...
  • Touche 9 = 57
Avec ca on peut faire un petit programme du style:
Compter le nombre de OK, par exemple, appuyé par l'utilisateur (ca sert à rien je sais...mais je suis un peu en manque d'imagination)
Ca permettra ainsi de mettre en pratique les rappels vus plus haut.

L'idée est donc de prendre une variable et de l'incrementer d'une valeur à chaque appui sur OK. Si c'est une autre touche, le programme s'arrete.
L'idèal est donc ici l'utilisation de la structure conditionnelle while (vu plus haut dans les rappels)

L'ossature du programme:

On fait
{
Afficher ce nombre
Attendre qu'une touche soit selectionnée
Le nombre d'occurence de OK augmente de 1
}tantque(la derniere touche tapée n'est pas égale à OK)

Si une autre touche est selectionnée, on sort de la boucle while, on arrive alors ici, à la fin du programme.


Concrétement ca donne ca:
//Programme qui compte le nombre de OK tapé
#include <E32base.h> //On inclut le header de base
#include <E32cons.h>

//Les déclarations
CConsoleBase* consoleFM; //La console
TKeyCode uneTouche; //La variable qui contenir le code de la touche
TInt nbreOK; //La variable entière qui contient le nombre de OK

//La fonction principale
TInt E32Main()
{
	consoleFM=Console::NewL(_L("Console FM"),TSize(KConsFullScreen,KConsFullScreen)); //La création de la console
	consoleFM->Printf(_L("\tHello FM!\n")); //Le \t correspond à la tabulation (afin de centrer le texte)

	nbreOK = 0; //On initialise le nombre de OK à 0
	
	do
	{
		consoleFM->SetPos(0); //On positionne le curseur en début de ligne
		consoleFM->ClearToEndOfLine(); //On efface la ligne
		
		consoleFM->Printf(_L("Nombre de OK:%d") , nbreOK); //On affiche le nombre de OK
		
		uneTouche = consoleFM->Getch(); //On récupere le code de la touche que l'on stocke
		nbreOK = nbreOK + 1; //On incremente la variable nbreOK
	}
	while(uneTouche == 63557); 
	//Tant que la touche est OK n'est pas tapé on recommence (63557 est le TKeyCode de la touche OK)
	
	delete consoleFM; //On supprime la console
	return(0); //C'est fini
}

PS: On aurait pu remplacer
nbreOK = nbreOK + 1;
par
nbreOK += 1;
Ces 2 instructions sont équivalentes.

___________________

Image IPB Exercices
Et bien oui! Tout cours se termine par des exos:

Je vous en propose 3, à des niveaux différents:
  • Débutant: Afficher un série de messages, suite à la pression d'une touche

    Exemples (désolé pour la médiocrité des exemples... ;)):
    Image IPB -> Image IPB -> Image IPB

    Donc rien de compliqué, pas de structures conditionnelles, juste la console à créer et l'utilisation des fonctions getch + printf
  • Intermédiaire: Ecrire un programme qui pose une question puis demande de repondre par 1 ou 2. Puis affiche un message selon la réponse donnée.

    Exemple:
    Image IPB -> Image IPB
  • Expert: Faire un menu permettant de lancer des sous-programmes

    La navigation se fera à l'aide d'un curseur ">>", et la navigation à l'aide des touches "haut" "bas" et "ok".
    Ici dans mon exemple des sous-programmes permettant de compter le nombre de ok (vu plus haut) ou un programme (plus interesant) permettant d'afficher les code des touches tapés.
    Image IPB
Les corrections des exercices seront données la semaine prochaine.
Ceux qui n'auront pas fait leurs exercices auront un MP dans leur carnet de correspondance, en cas de récidive vous serez convoqués dans le bureau de Mr Les Admins. :( :P


___________________


Voilà ce chapitre à enfin atteint ca fin. Il y a certainement beaucoup de notions nouvelles pour certains, dans ce cas n'hésitez pas à poser des questions.

Prochain chapitre: On verra en détail les spécifités de symbian en ce qui concerne la gestion de la mémoire.
Comme je l'ai dit plus haut, nous travaillons sur des mobiles, de ce fait la mémoire doit être gérer d'une façon autre qu'en C++ classique.

Et nous verrons aussi tout ce qui découle de cette gestion particulière de la mémoire (gestions des erreurs, types de variables, nomenclature des variables...)

Pour le chapitre 5, rebelote: "HelloFM 2", mais cette fois ci ca sera une vraie application avec une véritable interface graphique S60 ! (plus jolie que la console bleue et jaune de symbian :) ).

@+ :P


[sa]Quelques erreurs corrigées[/sa]
[Edité par Anakronik : Combinage du chapitre 3 afin qu'il se retrouve a la suite ;) ]

Modifié par samir, 01 Jan 2007 - 14:12.


#5 Anakronik

Anakronik

     

  • V.I.P.
  • 11143 messages
  • Sexe:Masculin
  • Localisation:Alpes Maritimes
  • Mobile:Nokia
  • Modèle:S60 User
  • Opérateur:-----

Posté 22 Sep 2006 - 08:05

Sujet épinglé ! ;)

Excellente initiative :top:

Fly me to the moon
FlickR


#6 ToiNou

ToiNou

    Nokia & iPhone Addict (L)

  • +Membres +
  • 6759 messages
  • Sexe:Masculin
  • Localisation:IDF
  • Mobile:Autre
  • Modèle:Bold
  • Opérateur:F SFR

Posté 22 Sep 2006 - 09:55

Huum je vais le suivre de très près ce sujet ;) !!!

#7 Magohamoth

Magohamoth

     

  • +Membres +
  • 173 messages
  • Sexe:Masculin
  • Mobile:HTC
  • Modèle:P4550
  • Opérateur:F Orange

Posté 22 Sep 2006 - 10:38

:(
J'avais déjà essayé tout seul, mais sans succès ;) ! ;)

Ce qui serait bien aussi (chose que je n'avais pas trouvé), c'est de montrer les fonctions usuelles qui se rajoute au 'C' ;) :
A savoir -en gros- tout ce qui se rapporte à l'affichage et traitement des données (de l'écran) : soit l'allocation de mémoire virtuelle, l'afficher/le stockage d'une image ou d'un pixel et aussi entrée de données (utiliser les touches d'un clavier sans que cela ne bloque tout l'ecran (pour un jeux par ex))...
note : Je connais une foulle de petits programmes en C dédié à la TI89 (92/V200) que je verrai bien sur mon 6680 ! :top: :P

Modifié par Magohamoth, 22 Sep 2006 - 10:45.


#8 bibiannecy

bibiannecy

     

  • +Membres +
  • 104 messages
  • Localisation:Annecy
  • Mobile:Nokia
  • Modèle:5800 XM
  • Opérateur:CH Orange

Posté 22 Sep 2006 - 12:06

EXCELNTISSIME INITIATIVE :glurps: qui merite un A+ :P :cool:
BUT, WHERE THE F**CK IS BRYAN?

#9 Shawn Michael

Shawn Michael

     

  • Membres
  • 108 messages
  • Sexe:Masculin
  • Localisation:Ile de Tortue Géniale
  • Mobile:Samsung
  • Modèle:D880
  • Opérateur:F Orange

Posté 22 Sep 2006 - 15:40

Il me tarde de voir à quoi vont ressembler les exemples, dans l'esprit, c'est une très bonne idée mais j'ai peur que cela reste au stade de gadget ... tant pis ça peut être marrant !
Image IPB

Qui veut une petite prise de soumission ???

#10 ·WøuWι·

·WøuWι·

     

  • +Membres +
  • 1036 messages
  • Sexe:Masculin
  • Localisation:villepinte (93)
  • Mobile:Motorola
  • Modèle:Milestone
  • Opérateur:F SFR

Posté 22 Sep 2006 - 16:07

Merci samir !!! :)
Je vais suivre ce topic a la lettre :)


Forum Nokia ne m'envoi pas de mail de confirmation =,( sa comence bien :)

Modifié par ·WøuWι·, 22 Sep 2006 - 16:25.


#11 Mathroule

Mathroule

     

  • +Membres +
  • 125 messages
  • Sexe:Masculin
  • Localisation:Aix en Provence (13)
  • Mobile:Nokia
  • Modèle:N95 8Go
  • Opérateur:F SFR

Posté 24 Sep 2006 - 08:59

samir tu es un génie :( :) ;) , bravo pour ce topic et ce tuto. Car je sais programmer en C et un peu en C++, mais ca va venir étant que je suis en IUT d'info, je m'étais mit à la programmation sur symbian, mais trop le bordel que de compiler un programme.

NOKIA N95 8Go

NOKIA N70
+ RS-MMC 512Mo Kingston


#12 eljoundi

eljoundi

    FM Addict

  • +Membres +
  • 2363 messages
  • Sexe:Masculin
  • Localisation:°oO Casa/Paris Oo°
  • Mobile:Nokia
  • Modèle:E71
  • Opérateur:F SFR

Posté 24 Sep 2006 - 12:56

Très bonne initiative Samir, merci pour tous ces efforts :D

-- En cours --


#13 Magohamoth

Magohamoth

     

  • +Membres +
  • 173 messages
  • Sexe:Masculin
  • Mobile:HTC
  • Modèle:P4550
  • Opérateur:F Orange

Posté 24 Sep 2006 - 13:54

Ce qui serait sympa, ce serait de créer un jeu capable de rivaliser avec des jeux Ngages, par exemple :lol: :
Il y a toujours beaucoup de travaille dans la programmation, le but serait de prendre toutes nos différences (à savoir en informatique et capacités artistiques) et de les compléter dans un même projet : Tout le monde pourrait participer ;)
Il y aurait du travaille pour tout le monde et on pourrait créer une nouvelle section comparable à 'Nokia', dans le sens ou l'on pourrait créer de nouveaux topics, lesquels pourrait être suivants :

1) Topic anti-topic & règles diverses - Seule une liste stricte serait autorisé à créer de nouveaux topics
Cette sous section permettrait de discuter de l'utilité d'éventuelles nouveaux topics
Cette liste serait entre autre : certains programmeurs en C++ et administrateurs

2) Quel est le projet :
Suivant les avis de chacun on pourrait alors savoir quel jeu on pourrait créer et voir si c'est envisageable…

3) Script - L'histoire du jeu et les enjeux
Tous les textes de plus de trois lignes du jeu...

4) Programmation - Discussion sur la conception [du projet]
Destiné à ce qui savent déjà un peu programmer (C++ et/ou autre)
Comment créer ce jeu :
Présentation - Outils nécessaires - les boucles - les maps

5) Programmation - Conception
Début concret du projet

6) Section graphique
A partir du '4)', certains graphismes seraient demandés : page de démarrage, personnage principal, ennemis, icônes.. (souvent suivant certaines conditions : dimensions de pixels, couleurs,...)

7) Section audio
Un thème musical

Après ce n'est qu'une proposition de projet ;) , est ce que ca vous interesse ?

PS : On pourra ensuite vendre le jeux :P et ensuite, au bout de 3 mois, on pourra le pirater en 'balancant' le cr*** sur FM ! :D :D :P :w00t:

En tout cas, pour en revenir à ton topic Samir, ... merciii, tu assures !!! :D

#14 ·WøuWι·

·WøuWι·

     

  • +Membres +
  • 1036 messages
  • Sexe:Masculin
  • Localisation:villepinte (93)
  • Mobile:Motorola
  • Modèle:Milestone
  • Opérateur:F SFR

Posté 25 Sep 2006 - 17:47

Forum nokia ne m'envoi toujours pas de mail de confirmation d'inscription ! :w00t:
Je en peut pas me réinscrire vu que j'ai déja donné mon mail..
Quelqu'un pourrait m'aider a me logger ou me donner un lien svp?

#15 samir

samir

     

  • +Membres +
  • 2005 messages
  • Sexe:Masculin
  • Localisation:Montataire - Picardie
  • Mobile:Nokia
  • Modèle:N95 8GB
  • Opérateur:F Bouygues

Posté 25 Sep 2006 - 18:29

@·WøuWι· Tu as essayé en utilisant ce formulaire permettant justement de renvoyer ton mot de passe sur ton mail ?

@Magohamoth :wub: t'es motivé toi! ;)
Sérieusement pour le moment on va cibler des petites applis bien tranquille...
J'avais pensé pour la fin de la 1ère grande partie (apres environ un 15aines de chapitres), terminer par un pendu (avec interface graphique)... A voir...

PS: Je suis en train de préparer le 3ème chapitre... notre première application :w00t:

@+

Modifié par samir, 25 Sep 2006 - 18:30.


#16 vcloclo1

vcloclo1

     

  • Membres
  • 10 messages
  • Sexe:Masculin
  • Localisation:VAR (83)
  • Mobile:Nokia
  • Modèle:6680, N95
  • Opérateur:F Orange

Posté 25 Sep 2006 - 20:20

Pas mal comme cours ;)
N95 + 6680

#17 ·WøuWι·

·WøuWι·

     

  • +Membres +
  • 1036 messages
  • Sexe:Masculin
  • Localisation:villepinte (93)
  • Mobile:Motorola
  • Modèle:Milestone
  • Opérateur:F SFR

Posté 26 Sep 2006 - 16:20

Si je fais ce que tu me dit sa me donne sa :
Sorry, the e-mail address you gave was not found in our database. Please re-register or try again with another e-mail address.

Et si j'essaye de me reéinscrire on me dit sa :
The e-mail address you selected is already registered at Forum Nokia. Please provide a different e-mail address or request your login name and password be provided to you using the "Lost Password" function.


tout sa avec la meme adresse :wub:

[sa]Messages combinés[/MC][/sa]

J'ai trouvé un lien pour carbide express >>ICI<< pour ceux qui on les meme problemes que moi ou simplement la flemme de s'inscrire ;)

Modifié par samir, 26 Sep 2006 - 18:21.


#18 behemot

behemot

     

  • +Membres +
  • 1818 messages
  • Sexe:Masculin
  • Localisation:IDF
  • Mobile:Nokia
  • Modèle:n82
  • Opérateur:F Orange

Posté 27 Sep 2006 - 12:15

super-bien structuré et utile ton cours, felicitations, samir, et merci! je suis impatient de passer à la programation.
Lien modéré. Merci de faire une demande d'autorisation auprès d'un(e) (co)-administrateur comme le stipulent les règles du forum.

#19 sniali

sniali

     

  • Membres
  • 1 messages

Posté 28 Sep 2006 - 08:31

Great piece of job mate

Well done


Sami

#20 mauris

mauris

     

  • +Membres +
  • 509 messages
  • Sexe:Masculin
  • Localisation:Reims
  • Mobile:-----
  • Modèle:iPhone 3G
  • Opérateur:F Orange

Posté 28 Sep 2006 - 13:15

Merci pour l'info samir, moi qui vient de commencer le c++ je vais regarder un peu sur S60 :w00t:

@·WøuWι· : j'avais le même problème, en fait ma boite pensait que c'était un spam donc direction courrier indésirable..
- Apple iPhone 3G 16Go Blanc avec Orange Origami star
- HTC P3600 avec SFR Essentiel + l'avantage étudiant 5 numéros illimités
- E65
avec SFR Essentiel + l'avantage étudiant 5 numéros illimités




0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)