FAQ C++ BuilderConsultez toutes les FAQ
Nombre d'auteurs : 60, nombre de questions : 670, dernière mise à jour : 21 novembre 2010 Ajouter une question
Cette F.A.Q. a été réalisée à partir des questions fréquemment posées sur le forum C++ Builder de developpez.com et de l'expérience personnelle des auteurs.
Nous tenons à souligner que cette F.A.Q. ne garantit en aucun cas que les informations qu'elle propose soient correctes. Les auteurs font le maximum, mais l'erreur est humaine. Cette F.A.Q. ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez devenir rédacteur, contactez pottiez
Nous espérons que cette F.A.Q. saura répondre à un maximum de vos questions. Nous vous souhaitons une bonne lecture.
L'équipe C++ Builder de Developpez.
Commentez cette FAQ : Commentez
- Comment ajouter un élément au menu système ?
- Comment changer l'icône de mon application ?
- Comment désactiver le bouton de fermeture d'une fenêtre ?
- Comment empêcher le déplacement d'un TForm ?
- Comment empêcher qu'une fiche soit fermée ?
- Comment supprimer les boutons Maximize, Minimize et Close dans la barre de titre d'une fenêtre ?
- Comment faire un splash screen pour une application ?
- Comment faire une application en plein écran ?
- Comment créer un lien mail dans une application ?
- Comment créer un lien web dans une application ?
- Comment appliquer une ouverture progressive lors de l'appel d'une fenêtre ?
Le menu système est le menu accessible en cliquant sur l'icône en haut à gauche d'une fenêtre. Il est possible de modifier ce menu . Pour lui ajouter un élément, deux phases sont nécessaires : tout d'abord, ajouter a proprement parler un élément au menu système, ensuite lui attribuer un gestionnaire d'évènements.
Voici donc le code qui va créer un nouvel élément de menu :
Code c++ : | Sélectionner tout |
1 2 3 4 5 | // Obtention du Handle du menu système HMENU HandleMenuSysteme = GetSystemMenu(Handle, FALSE); // Insertion de l'élément dans le menu AppendMenu(HandleMenuSysteme, MF_STRING, MON_ELEMENT_MENU, "Mon élément personnalisé"); |
Code c++ : | Sélectionner tout |
const int MON_ELEMENT_MENU = 1;
A ce stade, si vous lancez le programme, vous pourrez constater qu'un nouvel élément apparait dans le menu système. Il s'agit maintenant de savoir quand l'utilisateur clique sur cet élément et de gérer ce clic. Pour cela, nous allons créer une fonction-gestionnaire d'évènements qui sera appelée lorsque le message WM_SYSCOMMAND sera déclenché par Windows, c'est-à-dire quand l'utilisateur cliquera sur un élément du menu système. Il faut donc déclarer notre fonction comme gestionnaire de messages WM_SYSCOMMAND, grâce au code suivant qu'il faut placer dans la classe TForm1, dans la section public :
Code c++ : | Sélectionner tout |
1 2 3 | BEGIN_MESSAGE_MAP VCL_MESSAGE_HANDLER(WM_SYSCOMMAND, TMessage, WMCommandeMenuSysteme) END_MESSAGE_MAP(TForm) |
Code c++ : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 | void TForm1::WMCommandeMenuSysteme(TMessage & Msg) { if (Msg.WParam == MON_ELEMENT_MENU) { ShowMessage("On a cliqué sur notre élément de menu"); Msg.Result = true; } else { TForm::Dispatch(&Msg); } } |
Pour changer l'icône de votre programme, utilisez Projet/Options.... Allez dans l'onglet Application et en cliquant sur le bouton Charger icône..., vous pourrez charger une nouvelle icône qui doit être au format.ico. Si vous souhaitez dessiner une nouvelle icône, utilisez l'éditeur d'images disponible dans le menu Outils de l'IDE.
Le code suivant permet de désactiver le bouton Close d'une fenêtre, en retirant le menu correspondant du menu système.
L'appel à SetWindowPos permet de prendre en charge les modifications apportées à la fiche.
Code c++ : | Sélectionner tout |
1 2 3 4 5 6 7 | HMENU hmenu; hmenu = GetSystemMenu(this->Handle, false); if (hmenu != NULL) RemoveMenu(hmenu, SC_CLOSE, NULL); } SetWindowPos(this->Handle, NULL, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_DRAWFRAME); |
Le code suivant permet d'empêcher qu'une TForm soit déplacée avec la souris en cliquant sur la barre de titre, en retirant la commande Déplacer du menu système de la fiche. L'appel à SetWindowPos permet de prendre en charge les modifications apportées à ce menu.
Code c++ : | Sélectionner tout |
1 2 3 4 5 6 7 | HMENU hmenu; hmenu = GetSystemMenu(this->Handle, false); if (hmenu != NULL) { RemoveMenu(hmenu, SC_MOVE, NULL); } SetWindowPos(this->Handle, NULL, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_DRAWFRAME); |
Cette solution permet d'empêcher la fermeture d'une fiche via les moyens classiques (bouton Close dans la barre de titre, option Fermer dans le menu système de la fenêtre). C'est ainsi à l'utilisateur d'implémenter son propre code et sa propre gestion pour autoriser cette fermeture (par exemple, saisie d'un mot de passe avant de pouvoir fermer).
Lorsqu'une fenêtre est fermée, les évènements suivants sont appelés dans l'ordre:
- OnCloseQuery
- OnClose
- OnDestroy
L'évènement OnDestroy n'est appelé que lorsque la fenêtre est détruite réellement. En fait, appeler la méthode Close sur une fiche ne la détruit pas mais la cache uniquement. Pour détruire la fenêtre il faut agir sur le paramètre Action dans l'évènement OnClose.
Pour intercepter la demande de fermeture d'une fiche il faut implémenter l'évènement OnCloseQuery de la façon suivante:
Code c++ : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 | void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose) { // Série de vérifications pour savoir si la fermeture est autorisée // Par exemple afficher une fiche demadant la saisie d'un mot de passe ... // Le mot de passe est erroné, alors pas de fermeture if (condition) { CanClose = false; // Empêcher la fermeture } } |
Pour supprimer les boutons Maximize, Minimize ou Close d'une fenêtre, il faut agir sur la propriété BorderIcons de la forme.
- Pour supprimer les trois boutons et le menu système, il faut mettre biSystemMenu à false
- Pour désactiver seulement le bouton Maximize, il faut mettre biMaximize à false
- Pour désactiver seulement le bouton Minimize, il faut mettre biMinimize à false
Il n'est pas possible de supprimer le bouton Close indépendamment des autres. En revanche, il est possible de le désactiver (lien ci-dessous).
Un splash screen est un écran qui est affiché pendant le chargement d'un logiciel (l'image que vous voyez quand vous démarrez C++Builder par exemple).
Pour en afficher un pendant le démarrage de votre programme, créez une nouvelle fiche (Fichier | Nouvelle fiche), positionnez sa propriété BorderStyle à bsNone et FormStyle à fsStayOnTop. Nommez votre fiche Splash_dlg. Utilisez les options (Projet | Options) pour ne pas créer la fiche automatiquement au démarrage. Ensuite, affichez la fonction WinMain de votre projet (Fichier | Voir le source). Avant les instructions Application->CreateForm(/*...*/), placez le code suivant :
Code c++ : | Sélectionner tout |
1 2 3 | Splash_dlg=new TSplash_dlg(NULL); // Crée la fiche dynamiquement Splash_dlg->Show(); // Affiche la fiche Splash_dlg->Repaint(); // Pour afficher son contenu |
Code c++ : | Sélectionner tout |
delete Splash_dlg; // Supprime la fiche et libère la mémoire utilisée
N.B. N'oubliez évidemment pas d'inclure le .h de votre Splash_Form dans le module principal de votre application.
Utilisez le code suivant :
Code c++ : | Sélectionner tout |
1 2 3 4 5 | BorderStyle = bsNone; Left = 0; Top = 0; Width = Screen->Width; Height = Screen->Height; |
Évitez tout de même de mettre une application qui n'en a pas besoin en plein écran !
Utilisez la fonction ShellExecute de la manière suivante :
Code c++ : | Sélectionner tout |
ShellExecute (Handle, "open", "mailto:adresse@provider.ex?subject=Titre_du_message&body=Corps du message", 0, 0, SW_SHOWNORMAL);
Utilisez la fonction ShellExecute de la manière suivante :
Code c++ : | Sélectionner tout |
ShellExecute (Handle, "open", "http://www.google.com", 0, 0, SW_SHOWNORMAL);
Pour animer l'apparition d'une fenêtre, il faut utiliser la méthode AnimateWindow :
Code c++ : | Sélectionner tout |
1 2 3 4 5 6 7 8 | int typeAnimate = 1; TForm* Form2 = new TForm(NULL); Form2->Show(); Form2->Hide(); // Animation de la fenêtre AnimateWindow(Form2->Handle, 1000, typeAnimate); Form2->Close(); delete Form2; |
- 0 => rien ;
- 1 => de Gauche à droite ;
- 2 => de droite à gauche ;
- 3 => de Gauche à droite ;
- 4 => de haut en bas ;
- 5 => du coin haut gauche ;
- 6 => du coin haut droit ;
- 7 => du coin haut gauche ;
- 8 => du bas vers le haut ;
- 9 => du coin bas gauche ;
- 10 => du coin bas droit ;
- 11 => du coin bas gauche ;
- 12 => du haut vers le bas ;
- 13 => du coin haut gauche ;
- 14 => du coin haut droit ;
- 15 => du coin haut gauche.
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.