III : Les Boîtes de Dialogue

Une Boîte de Dialogue (BDD en abrégé) est en fait une fenêtre, utilisée pour communiquer une information à l’utilisateur (boîte de message) ou pour établir un dialogue avec lui (entrées de paramètres en général).

 

  • III.1 : Notion de modalité
  • Les BDD Windows sont de deux types : modales ou non modales.

    Une BDD modale " bloque " sa fenêtre mère. Toutes les entrées sont captées par la BDD, la main n’est rendue qu’à la fenêtre mère que lorsque la fermeture de la BDD modale. Les autres applications continuent cependant d’être actives.

    Par contre, une BDD non modale s’exécute en parallèle (en simultané) avec sa fenêtre mère.

    Certaines BDD sont dites " système modales ", au sens au même les autres applications sont suspendues. Normalement, seul le système à le droit de créer de telles BDD.

     

  • III.2 : Création, exécution d’une BDD
  • Une BDD n’étant qu’une fenêtre, il faut donc créer une nouvelle fenêtre. Dans le Builder, faire Nouvelle->Fiche. Une fiche (classe TForm) vierge est créée, ainsi qu’un fichier CPP pour les fonctions de cette nouvelle classe.

    Par défaut, le builder créée toutes les fiches d’une application au démarrage, mais ne montre que la principale. On peut le forcer à ne pas les créer, et les créer " à la main " à l’aide d’un new. Il faut par contre les détruire explicitement par un delete.

    Une fiche créée n’est pas forcément visible. Il faut remarquer que l’on a pas non plus choisi sa " modalité ".

    Pour afficher une BDD modale, il suffit d’appeler la fonction ShowModal :

    int r ;

    r=Form2->ShowModal() ;

    A la fermeture de la BDD modale, l’entier r contient le code de résultat de la BDD, qui peut être mrOk, mrCancel, mrIgnore.... et donne une information sur la façon de fermer la BDD de l’utilisateur. 

    Pour afficher une BDD non modale, il suffit d’appeler sa fonction Show :

    Form2->Show() ;

    L’exécution de la fenêtre mère se poursuit en simultané. Bien entendu, la BDD non modale ne possède pas de valeur de retour...

    Pour fermer une BDD (modale ou non), il suffit d’appeler sa méthode Close.

     

  • III.3 : Transfert d’informations à la BDD
  • Souvent, une BDD est utilisée pour demander des paramètres à l’utilisateur. La BDD a donc besoin de connaître les paramètres précédents, et doit pouvoir les modifier. Elle doit donc accéder à des données qui appartiennent à sa fenêtre mère.

    Il existe plusieurs méthodes :

    - Les paramètres peuvent être contenues dans des variables globales : toutes les fenêtres du programme y ont donc accès, pour peu que leur fichier CPP contienne leur déclaration précédée du mot-clé extern.

    Cette méthode est simple, mais il faut faire attention à ne pas trop créer de variables globales, qui perdent de la place permanente en mémoire. De plus, la BDD ne doit pas les modifier si l’utilisateur appuie sur Annuler ou lieu de OK. Dans ce cas, les valeurs ne sont modifiées que dans la fonction de réponse OnClick du bouton OK. Efficace dans le cas de peu de valeurs à échanger.

    On peut bien sur panacher ces solutions...

     

  • III.4 : Exemple de boîte de dialogue
  • Imaginons que notre programme est besoin d’informations simples : le nom et le prénom de l’utilisateur. On peut créer une BDD modale qui va demander ces informations à l’utilisateur.

    On crée donc une nouvelle fiche (par défaut elle s’appelle Form2 : on peut changer son nom en FicheNom par exemple). Imaginons qu’elle se présente sous la forme suivante :

    Deux composants TLabel permettant d’afficher " Nom : " et " Prénom : ", deux composants TEdit (Par Ex : ZoneNom et ZonePrenom) pour rentrer les informations, et deux boutons TBitBtn OK et Annuler.

    Dans le programme principal (fichier CPP de la fiche principale) on définit les variables GLOBALES suivantes :

    AnsiString Nom, Prenom ;

    Dans le CPP de la BDD on écrira :

    extern AnsiString Nom, Prenom ;

    Il faut maintenant traiter les événements de la BDD. Pour commencer, il faut remplir les informations par celles entrées précédemment (si elles existent). Pour cela, on écrit la réponse à l’événement OnCreate :

    void __fastcall TForm2 : :FormCreate(TObject *Sender)

    {

    // initialisation

    ZoneNom->Text=Nom ;

    ZonePrenom->Text=Prenom ;

    }

    Ensuite, en cas de clic sur le bouton OK, il faut modifier les informations. On écrit donc la fonction de réponse à l’évènement OnClick du bouton OK.

    void __fastcall  TForm2 : :BitBtn1Click(TObject *Sender)

    {

    // recopie des infos

    Nom=ZoneNom->Text ;

    Prenom=ZonePrenom->Text ;

    // on ferme la BDD

    Close() ;

    }

    On n’écrit pas la réponse à l’appui sur le bouton Annuler puisqu’on a aucune action à faire. Ce bouton provoquera par défaut la fermeture de la BDD avec mrCancel comme code de retour.

     

  • III.5 : Les BDD standard du système
  • Le système Windows fournit quelques BDD " déjà faites " pour les utilisations courantes, afin que toutes les applications aient les mêmes.

    La VCL utilise bien sur ces BDD, en rajoute même quelques unes que l’on peut utiliser simplement.

    Toutes ces BDD sont des composants dérivant de TForm. On place l’icône voulue sur la fiche (elle ne sera pas affichée) et lorsqu’on veut montrer la BDD, on utilise sa fonction Execute() plutôt que ShowModal.

    TColorDialog permet de sélectionner une couleur parmi les couleurs systèmes, ou dans une palette.

    TFontDialog permet de choisir une police de caractères avec tous ses attributs.

    TPrinterDialog permet d’ouvrir un dialogue d’impression.

    TFileOpenDialog permet de choisir un ou plusieurs fichiers.

    Par exemple, pour utiliser TFileOpenDialog pour faire ouvrir un fichier, on place le composant TFileOpenDialog sur la fiche. Un objet dont le nom par défaut est OpenDialog1 est créé.

    Pour l’utiliser, il suffit de faire :

    if(OpenDialog1->Execute())

    {

    // le fichier choisi est contenu dans la propriété FileName

    FileOpen(OpenDialog1->FileName) ;

    ....

    }

    On a besoin de tester la valeur de retour, puisque la boîte comprend un bouton annuler, dans ce cas il ne faut évidemment faire aucune action.

     

  • III.6 : Boîtes de message
  • Souvent il suffit de fournir une information à l’utilisateur. S’il s’agit juste d’un message, on a pas besoin de créer une boîte de dialogue : Windows fournit la fonction MessageBox.

    MessageBox peut montrer un certain nombre d’icônes, et posséder plusieurs types de boutons (Ok, Oui, Non, Annuler, Refaire, Ignorer, Abandon...)

    MessageBox est modale. La valeur de retour correspond au bouton appuyé.