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 obtenir la résolution de l'écran ?
- Comment changer la résolution de l'écran ?
- Comment revenir à la résolution par défaut de l'écran ?
- Comment lancer l'écran de veille défini par défaut ?
- Comment mettre en veille le moniteur ?
- Comment empêcher l'exécution de l'écran de veille et la mise en veille ?
- Comment obtenir des informations sur les polices du système ?
- Comment détecter la taille de la police d'affichage de Windows ?
Avec C++Builder, vous avez à votre disposition l'objet Screen qui dispose d'un certain nombre de méthodes et propriétés concernant, comme son nom l'indique, l'écran. Pour obtenir la résolution, il suffit de récupérer la largeur et la hauteur de l'écran en pixels :
Code c++ : | Sélectionner tout |
1 2 3 | int width = Screen->Width; // longueur int height = Screen->Height; // hauteur ShowMessage("La résolution de l'écran est :" + IntToStr(width) + "*" + IntToStr(height)); |
Voici une fonction qui fait cela très bien :
Code c++ : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 | bool __fastcall ChangeResolution(int Width, int Height) { TDeviceMode *Dev = new TDeviceMode; EnumDisplaySettings(0,ENUM_CURRENT_SETTINGS, Dev); Dev->dmPelsWidth = Width; Dev->dmPelsHeight = Height; Dev->dmFields = DM_PELSWIDTH | DM_PELSHEIGHT; bool result = (ChangeDisplaySettingsA(Dev, CDS_RESET) == DISP_CHANGE_SUCCESSFUL); delete Dev; return result; } |
Si dans votre application vous changez la résolution de l'écran, il est possible de revenir à celle par défaut (celle utilisée au démarrage de Windows). Pour cela utilisez la méthode suivante :
Code c++ : | Sélectionner tout |
ChangeDisplaySettingsA(0, 0);
Pour cela, il vous faut utiliser la fonction SendMessage (qui permet d'envoyer un message à une fenêtre donnée) comme ci-dessous :
Code c++ : | Sélectionner tout |
SendMessage(Application->Handle, WM_SYSCOMMAND, SC_SCREENSAVE, 1);
Pour cela, il vous faut utiliser la fonction SendMessage (qui permet d'envoyer un message à une fenêtre donnée) comme ci-dessous :
Code c++ : | Sélectionner tout |
SendMessage(Application->Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 1);
Dans certains cas, il est pratique qu'au lancement du programme celui-ci désactive l'écran de veille ainsi que la mise en veille du moniteur.
Pour cela, nous allons utiliser l'API SystemParametersInfo :
Code c++ : | Sélectionner tout |
1 2 3 4 | SystemParametersInfo(unsigned int uiAction, unsigned int uiParam, void * pvParam, unsigned int fWinIni) |
Code c++ : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | //--------------------------------------------------------------------------- // Au lancement de l'application on modifie les valeurs d'attente void __fastcall TForm1::FormCreate(TObject *Sender) { // si l'écran de veille est actif if(!SystemParametersInfo(SPI_GETSCREENSAVEACTIVE, 0, NULL, SPIF_UPDATEINIFILE)) { SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 0, NULL, SPIF_UPDATEINIFILE); } // On récupère le temps d'attente avant la mise en veille SystemParametersInfo(SPI_GETPOWEROFFTIMEOUT, 0, &Param, SPIF_UPDATEINIFILE); ShowMessage(IntToStr(Param)); if(Param > 0) { // on désactive la mise en veille SystemParametersInfo(SPI_SETPOWEROFFTIMEOUT, 0, NULL, SPIF_UPDATEINIFILE); } } //--------------------------------------------------------------------------- // A la fermeture de l'application on rétablit les valeurs void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { if(!SystemParametersInfo(SPI_GETSCREENSAVEACTIVE, 1, NULL, SPIF_UPDATEINIFILE)) { SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 1, NULL, SPIF_UPDATEINIFILE); } if(Param > 0) { SystemParametersInfo(SPI_SETPOWEROFFTIMEOUT, (int) Param, NULL, SPIF_UPDATEINIFILE); } } //--------------------------------------------------------------------------- |
Récupérer les informations concernant les polices utilisées dans une application C++ Builder est évident : Il suffit de consulter les attributs des propriétés de type TFont. Par contre, nous n'avons pas accès à toutes les polices. Par exemple la police utilisée pour la barre de titre n'est pas disponible directement. Il nous faut donc utiliser une fonction de l'API Windows : SystemParametersInfo
Voici un exemple d'utilisation de cette fonction. Le code suivant récupère juste le nom de la police de la barre de titre, mais vous pouvez le modifier facilement en utilisant les variables de metrics.lfCaptionFont
Code c++ : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 | AnsiString GetTitleBarFontName() { NONCLIENTMETRICS metrics; metrics.cbSize = sizeof(metrics); AnsiString result = "Aucune Font trouvée"; if (SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(metrics), &metrics, 0)) { result = metrics.lfCaptionFont.lfFaceName; } return result; } |
Si vous désirez réaliser une interface graphique qui soit utilisable sur tous les systèmes de vos utilisateurs, vous allez peut-être vouloir connaître la taille de la police d'affichage afin d'adapter votre interface en fonction. Ce paramètre, qui peut être modifié par le panneau de configuration de l'affichage, a un impact non négligeable sur l'aspect des fenêtres réalisées avec C++ Builder. En effet, les fenêtres héritant de TForm utilisent cette taille comme taille par défaut de leur propre police. Pour obtenir cette information, un simple appel à la fonction GetDeviceCaps suffit.
La fonction d'exemple suivante vous retourne directement la taille de la police. Les valeurs principales sont :
- 96 pour une petite police
- 120 pour une grande police
- et n'importe quelle autre valeur si l'utilisateur l'a spécifiée (relativement rare)
Code c++ : | Sélectionner tout |
1 2 3 4 5 6 7 | int GetSystemFontSize() { HDC dc = GetDC(0); int result = GetDeviceCaps(dc, LOGPIXELSX); ReleaseDC(0, dc); return result; } |
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.