Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

Vous n'avez pas encore de compte Developpez.com ? L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Developpez.com

C++

Choisissez la catégorie, puis la rubrique :

logo
Sommaire > Interface > Applications GUI > Interface
        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 ?



Comment ajouter un élément au menu système ?
Créé le 01/09/2004[haut]
auteur : Geronimo
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 :

// 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é");
Avec ce code, nous allons ajouter cet élément au menu. Pour cela, nous avons besoin du Handle du menu système (un pointeur sur ce menu). Nous faisons donc appel à la fonction GetSystemMenu. Pour l'ajouter au menu, nous utilisons la fonction AppendMenu, qui ajoute un élément à la fin d'un menu. En premier argument, nous lui passons le Handle du menu système, en second, le type d'élément qui va être rajouté : une chaîne. Notez seulement que le troisième argument est une constante, MON_ELEMENT_MENU, que vous définissez, par exemple dans votre classe fiche :

const int MON_ELEMENT_MENU = 1;
Remarquez que nous aurions pu utiliser également un #define MON_ELEMENT_MENU 1 mais que notre code à l'avantage de s'intégrer totalement dans le C++.

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 :

BEGIN_MESSAGE_MAP
      VCL_MESSAGE_HANDLER(WM_SYSCOMMAND, TMessage, WMCommandeMenuSysteme)
END_MESSAGE_MAP(TForm)
Grâce à ce code, la fonction WMCommandeMenuSysteme sera appelée lorsque l'utilisateur cliquera sur un élément du menu système. Créons donc cette fonction, sans oublier de la déclarer dans le fichier en-tête, le code précédent ne faisant pas office de déclaration :

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);
  }
}
Dans cette fonction, deux cas se présentent : soit le message provient de notre élément menu système et nous devons le gérer, soit c'est un autre élément : dans ce cas, nous passons la main à la fonction Dispatch de la classe TForm afin qu'elle le gère. Si nous oublions ce second cas, seul notre élément fonctionnera. La différenciation des deux cas se fait grâce à notre constante MON_ELEMENT_MENU.


Comment changer l'icône de mon application ?
Créé le 01/09/2004[haut]
auteur : Geronimo
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.


Comment désactiver le bouton de fermeture d'une fenêtre ?
Créé le 25/04/2005[haut]
auteur : Neo41
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.

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);
Toutefois faites attention au fait que cette méthode n'empêche pas la fermeture de la fenêtre avec la combinaison ALT+F4 ou l'option Fermer (clic droit sur l'icône de la fiche dans la barre de tâches). Pour empêcher la fermeture d'une fenêtre, voyez le lien donné ci-dessous.

lien : faq Comment empêcher qu'une fiche soit fermée ?
lien : faq Comment ajouter un élément au menu système ?

Comment empêcher le déplacement d'un TForm ?
Mise à jour le 21/06/2006[haut]
auteur : Neo41
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.

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);
lien : faq Comment ajouter un élément au menu système ?

Comment empêcher qu'une fiche soit fermée ?
Créé le 25/04/2005[haut]
auteurs : Neo41, JEG
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:

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
   }
} 

Comment supprimer les boutons Maximize, Minimize et Close dans la barre de titre d'une fenêtre ?
Créé le 25/04/2005[haut]
auteur : Neo41
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).

lien : faq Comment désactiver le bouton de fermeture d'une fenêtre ?

Comment faire un splash screen pour une application ?
Créé le 01/09/2004[haut]
auteur : Geronimo
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 :

Splash_dlg=new TSplash_dlg(NULL); // Crée la fiche dynamiquement
Splash_dlg->Show(); // Affiche la fiche
Splash_dlg->Repaint(); // Pour afficher son contenu
Après les instructions Application->CreateForm(/*...*/), placez le code suivant :

delete Splash_dlg; // Supprime la fiche et libère la mémoire utilisée
Ainsi, la fiche splash screen sera affichée pendant la création des autres fiches.

N.B. N'oubliez évidemment pas d'inclure le .h de votre Splash_Form dans le module principal de votre application.


Comment faire une application en plein écran ?
Créé le 01/09/2004[haut]
auteur : Geronimo
Utilisez le code suivant :

BorderStyle = bsNone; 
Left = 0; 
Top = 0; 
Width = Screen->Width; 
Height = Screen->Height;
BorderStyle = bsNone permet de faire disparaître la barre de titre. Les deux lignes suivantes sont aisément compréhensibles, n'oubliez pas que nous sommes dans une classe fiche, donc que Left et Top sont les positions de la fiche. Enfin, il suffit de faire coïncider la largeur et la hauteur de la fiche avec celle de l'écran, ce que font nos deux dernières lignes. Bien sûr, ce code se place dans le constructeur de votre fiche, ou dans l'évènement OnCreate.
Evitez tout de même de mettre une application qui n'en a pas besoin en plein écran !


Comment créer un lien mail dans une application ?
Créé le 01/09/2004[haut]
auteur : Geronimo
Utilisez la fonction ShellExecute de la manière suivante :

ShellExecute (Handle, "open", "mailto:adresse@provider.ex?subject=Titre_du_message&body=Corps du message", 0, 0, SW_SHOWNORMAL); 

Comment créer un lien web dans une application ?
Créé le 01/09/2004[haut]
auteur : Geronimo
Utilisez la fonction ShellExecute de la manière suivante :

ShellExecute (Handle, "open", "http://www.google.com", 0, 0, SW_SHOWNORMAL);

Comment appliquer une ouverture progressive lors de l'appel d'une fenêtre ?
Créé le 22/11/2010[haut]
auteurs : blondelle, Nono40
Pour animer l'apparition d'une fenêtre, il faut utiliser la méthode AnimateWindow :

        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;
Voici la liste des codes d'animation :
  • 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.


Consultez les autres F.A.Q.


Valid XHTML 1.0 TransitionalValid CSS!

Les 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 © 2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni 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.

Contacter le responsable de la rubrique C++

Partenaire : Hébergement Web