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


SommaireSystèmeMoniteurs (8)
précédent sommaire suivant
 

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));

Mis à jour le 1er septembre 2004 Geronimo

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; 
}
Attention, cette fonction ne teste pas si votre écran supporte la résolution que vous souhaitez. Prévoyez au cas où dans votre développement de pouvoir revenir à la résolution précédente.

Mis à jour le 31 janvier 2005 atlantis bandit boy Ricky81

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);

Mis à jour le 31 janvier 2005 Nono40 Ricky81

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);

Mis à jour le 1er septembre 2004 Ricky81

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);

Mis à jour le 1er septembre 2004 Geronimo

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)
Voici un exemple d'utilisation pour suspendre l'écran de veille et la mise en veille du moniteur durant l'exécution d'un programme (void * Param; est un membre privé de la fiche) :

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); 
   } 
} 
//---------------------------------------------------------------------------

Mis à jour le 31 janvier 2005 Gysmo Ricky81

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

Mis à jour le 31 janvier 2005 Pierre Castelain Ricky81

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

Mis à jour le 31 janvier 2005 Pierre Castelain Ricky81

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 ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

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 © 2020 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.