Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
777 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++ Builder] Changer la résolution

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++ Builder] Changer la résolution

n°122799
juju_le_ba​rbare
Vous fiez pas aux apparences !
Posté le 07-04-2002 à 14:57:50  profilanswer
 

Bonjour,
 
sous windows et C++ Builder, j'aimerais changer la résolution d'écran et la profondeur des couleurs. J'ai trouvé l'API suivante : ChangeDisplaySettings() , et après avoir regardé l'aide voilà le code que j'ai fait, et bien sûr ça marche pas :D
 
 

Code :
  1. #include <winuser.h>
  2. void WinMain()
  3. {
  4. DEVMODE *chgres;
  5. chgres->dmSize = sizeof(chgres);
  6. chgres->dmFields = DM_BITSPERPEL;
  7. chgres->dmFields = DM_PELSWIDTH;
  8. chgres->dmFields = DM_PELSHEIGHT;
  9. chgres->dmBitsPerPel = 16;
  10. chgres->dmPelsWidth = 800;
  11. chgres->dmPelsHeight = 600;
  12. ChangeDisplaySettings(chgres, 0);
  13. }


 
Merci de vos réponses :hello:


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
mood
Publicité
Posté le 07-04-2002 à 14:57:50  profilanswer
 

n°122823
Buitoni
Posté le 07-04-2002 à 16:29:37  profilanswer
 

Y a pas un GetLastError()
 
Pour savoir ou est le problème?


---------------
Vendredi c'est Buitoni
n°122824
Buitoni
Posté le 07-04-2002 à 16:30:15  profilanswer
 

Mieux que ca...
 
ChangeDisplaySettings
F1
 
 :D  
 
Return Values
 
Returns one of the following values:
 
Value Meaning
DISP_CHANGE_SUCCESSFUL The settings change was successful.
DISP_CHANGE_RESTART The computer must be restarted in order for the graphics mode to work.
DISP_CHANGE_BADFLAGS An invalid set of flags was passed in.
DISP_CHANGE_FAILED The display driver failed the specified graphics mode.
DISP_CHANGE_BADMODE The graphics mode is not supported.
DISP_CHANGE_NOTUPDATED Windows NT only: Unable to write settings to the registry.


---------------
Vendredi c'est Buitoni
n°122841
juju_le_ba​rbare
Vous fiez pas aux apparences !
Posté le 07-04-2002 à 16:52:29  profilanswer
 

salut,
 
n'ai-je point précisé que je me suis servi de l'aide ???
 
en fait il me fait un access violation, j'aurais du le préciser il est vrai...
à ton avis panzanni ???  :D  :D  :D  
 
@++


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
n°122847
antp
Super Administrateur
Champion des excuses bidons
Posté le 07-04-2002 à 17:06:16  profilanswer
 

juju_le_barbare a écrit a écrit :

 
en fait il me fait un access violation, j'aurais du le préciser il est vrai...




 
Oui tu aurais dû le préciser :p
 
DEVMODE *chgres; // tu crées un pointeur
chgres->dmSize = sizeof(chgres); // tu accèdes à la valeur pointée par ce pointeur, une valeur au pif vu que tu n'as pas initialisé le pointeur : boum :)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°122886
juju_le_ba​rbare
Vous fiez pas aux apparences !
Posté le 07-04-2002 à 18:37:59  profilanswer
 

antp a écrit a écrit :

 
 
Oui tu aurais dû le préciser :p
 
DEVMODE *chgres; // tu crées un pointeur
chgres->dmSize = sizeof(chgres); // tu accèdes à la valeur pointée par ce pointeur, une valeur au pif vu que tu n'as pas initialisé le pointeur : boum :)  




 
salut OKY merci grand chef ;)
Mais alors je dois l'initialiser avec quoi le ptr ???
 
DEVMODE *chgres = ???;
 
dans l'aide il me semble pas avoir vu quoique ce soit qui l'indique (aïe je vais me faire taper sur les doigts !!! :na: )
 
@++


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
n°122893
antp
Super Administrateur
Champion des excuses bidons
Posté le 07-04-2002 à 18:44:30  profilanswer
 

Avec "new":
chgres = new DEVMODE.
Mais comme DEVMODE c'est une structure et pas une classe, je sais plus si ça marche :/
C'est peut-être plus simple de pas mettre le "*" et d'y accéder alors avec un "."

 

[jfdsdjhfuetppo]--Message édité par antp--[/jfdsdjhfuetppo]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°122899
juju_le_ba​rbare
Vous fiez pas aux apparences !
Posté le 07-04-2002 à 18:49:51  profilanswer
 

antp a écrit a écrit :

Avec "new":
chgres = new DEVMODE.
Mais comme DEVMODE c'est une structure et pas une classe, je sais plus si ça marche :/
C'est peut-être plus simple de pas mettre le "*" et d'y accéder alors avec un "."  
 
 




 
merci, je vais essayer la 1st sol. si ça marche pas la 2nd.
 
Merci encore :hello:  
 
PS : pas vexé pour la photo ? C'était dans un but sympathique ...


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
n°122903
antp
Super Administrateur
Champion des excuses bidons
Posté le 07-04-2002 à 18:54:46  profilanswer
 

Non, mais tâche de ne pas recommencer :p

 

[jfdsdjhfuetppo]--Message édité par antp--[/jfdsdjhfuetppo]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°122913
juju_le_ba​rbare
Vous fiez pas aux apparences !
Posté le 07-04-2002 à 19:23:02  profilanswer
 

voici le code final qui "marche" :
 

Code :
  1. DEVMODE *chgres = new DEVMODE;
  2. chgres->dmSize = sizeof(chgres);
  3. chgres->dmFields = DM_BITSPERPEL;
  4. chgres->dmFields = DM_PELSWIDTH;
  5. chgres->dmFields = DM_PELSHEIGHT;
  6. chgres->dmBitsPerPel = StrToIntDef(ComboBox1->Text, 16);
  7. chgres->dmPelsWidth = StrToIntDef(Edit2->Text, 800);
  8. chgres->dmPelsHeight = StrToIntDef(Edit3->Text, 600);
  9. LONG A = ChangeDisplaySettings(chgres, 0);
  10. switch (A)
  11. {
  12. case DISP_CHANGE_SUCCESSFUL : ShowMessage("Résolution changée" );
  13.                                break;
  14. case DISP_CHANGE_RESTART    : ShowMessage("Veuillez redémarrer" );
  15.                                break;
  16. case DISP_CHANGE_BADFLAGS   : ShowMessage("Erreur du programme" );
  17.                                break;
  18. case DISP_CHANGE_FAILED     : ShowMessage("Impossible de déterminer le mode graphique" );
  19.                                break;
  20. case DISP_CHANGE_BADMODE    : ShowMessage("Mode graphique non supporté" );
  21.                                break;
  22. case DISP_CHANGE_NOTUPDATED : ShowMessage("Impossible d'écrire dans le registre (NT)" );
  23.                                break;
  24. default : ShowMessage("Erreur inconnue" );
  25. }


 
sous winxp : il dit que la res est changée, mais c'est faux même après reboot, sous 98 il dit "moed graphique non supporté"...
 
Where's the problem ???


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
mood
Publicité
Posté le 07-04-2002 à 19:23:02  profilanswer
 

n°122921
antp
Super Administrateur
Champion des excuses bidons
Posté le 07-04-2002 à 19:35:55  profilanswer
 

Je sais pas...
Mais tu dois pas oublier de faire un delete de ta variable après, vu que tu l'as créée avec un new (mais c'est pas ça qui fait que ça ne marche pas).


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°122941
Ventilo
Ventilo? Depuis 1998!
Posté le 07-04-2002 à 20:04:17  profilanswer
 

Code :
  1. chgres->dmFields = DM_BITSPERPEL;
  2. chgres->dmFields = DM_PELSWIDTH;
  3. chgres->dmFields = DM_PELSHEIGHT;


Ca serait pas plustôt:

Code :
  1. chgres->dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;


 
Parce que autrement tu dit de n'utiliser que le dernier flag spécifier... qui se trouve à être DM_PELSHEIGHT...

 

[jfdsdjhfuetppo]--Message édité par Ventilo--[/jfdsdjhfuetppo]

n°122944
juju_le_ba​rbare
Vous fiez pas aux apparences !
Posté le 07-04-2002 à 20:06:23  profilanswer
 

Ventilo a écrit a écrit :

Code :
  1. chgres->dmFields = DM_BITSPERPEL;
  2. chgres->dmFields = DM_PELSWIDTH;
  3. chgres->dmFields = DM_PELSHEIGHT;


Ca serait pas plustôt:

Code :
  1. chgres->dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;


 
Parce que autrement tu dit de n'utiliser que le dernier flag spécifier... qui se trouve à être DM_PELSHEIGHT...  
 
 




 
mais c'est bien sûr !!! que JE SUIS CON !!!
 
je teste, MERCI !!!


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
n°122946
juju_le_ba​rbare
Vous fiez pas aux apparences !
Posté le 07-04-2002 à 20:07:51  profilanswer
 

ça marche pas :(
 
pô grave merci ;)


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
n°122951
Ventilo
Ventilo? Depuis 1998!
Posté le 07-04-2002 à 20:28:20  profilanswer
 

Je me suis penché sur ton problème (petit chanceux va  ;)) et je me suis rappeller que j'avais déjà fait un truc comme ca en VB. Voilà donc ce que ma donner le code après avoir modifier ton code:

Code :
  1. void ShowMessage (char *texte)
  2. {
  3. MessageBox(0,texte,"Fuck!",MB_OK | MB_ICONEXCLAMATION);
  4. }
  5. int APIENTRY WinMain(HINSTANCE hInstance,
  6.                      HINSTANCE hPrevInstance,
  7.                      LPSTR     lpCmdLine,
  8.                      int       nCmdShow)
  9. {
  10. DEVMODE *chgres = new DEVMODE;
  11. chgres->dmSize = sizeof(chgres); // on initialise le pointeur
  12. EnumDisplaySettings(NULL,ENUM_CURRENT_SETTINGS,chgres); //on initialise la structure avec la valeur présente
  13. chgres->dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
  14. chgres->dmBitsPerPel = 16;
  15. chgres->dmPelsWidth = 640;
  16. chgres->dmPelsHeight = 480;
  17. LONG Resulta = ChangeDisplaySettings(chgres, 0); //Variable avec des noms représentatif plz :p
  18. switch (Resulta)
  19. {
  20.  case DISP_CHANGE_SUCCESSFUL:
  21.   ShowMessage("Résolution changée" );
  22.   break;
  23.  case DISP_CHANGE_RESTART:
  24.   ShowMessage("Veuillez redémarrer" );
  25.   break;
  26.  case DISP_CHANGE_BADFLAGS:
  27.   ShowMessage("Erreur du programme" );
  28.   break;
  29.  case DISP_CHANGE_FAILED:
  30.   ShowMessage("Impossible de déterminer le mode graphique" );
  31.   break;
  32.  case DISP_CHANGE_BADMODE:
  33.   ShowMessage("Mode graphique non supporté" );
  34.   break;
  35.  case DISP_CHANGE_NOTUPDATED:
  36.   ShowMessage("Impossible d'écrire dans le registre (NT)" );
  37.   break;
  38.  case -6: //devrais être DISP_CHANGE_BADDUALVIEW mais VC++ me fait chier
  39.   ShowMessage("Windows XP: The settings change was unsuccessful because system is DualView capable." );
  40.   //J'ai recopier lerreur du platforme SDK
  41.   break;
  42.  default:
  43.   ShowMessage("Erreur inconnue" );
  44. }
  45. return 0;


 
Fallait juste prendre la valeur actuelle(EnumDispleySettings) et les modifier :hello:

 

[jfdsdjhfuetppo]--Message édité par Ventilo--[/jfdsdjhfuetppo]

n°122953
taureau
Posté le 07-04-2002 à 20:33:04  profilanswer
 
n°123061
juju_le_ba​rbare
Vous fiez pas aux apparences !
Posté le 08-04-2002 à 09:59:37  profilanswer
 

Ventilo a écrit a écrit :

Je me suis penché sur ton problème (petit chanceux va  ;)) et je me suis rappeller que j'avais déjà fait un truc comme ca en VB. Voilà donc ce que ma donner le code après avoir modifier ton code:
[code]
void ShowMessage (char *texte)
{
 MessageBox(0,texte,"Fuck!",MB_OK | MB_ICONEXCLAMATION);
}
 
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
 
etc...



 
Merci beaucoup, j'analyse le tout !!!
 
@++ :hello:


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++ Builder] Changer la résolution

 

Sujets relatifs
[C++ Builder 5] 3 questions faciles (sauf pour moi :D )[C++ Builder] arborescence des classes
.[C++ Builder] même code pour différents objets[C++ builder et Delphi] pb de debuggueur par defaut sous 2k
[C++ Builder] Socket : envoyer des structures[C]Comment changer la couleur d'un texte.
[c++ Builder] RichTextBox avec fond transparent[C++ Builder] Win32 Error. Code : 1410.La classe existe déjà
Comment changer la tronche de la sroll barre dans IE ???[PHP ou JAVASCRIPT] Changer le backolor d'une ligne d'un tableau.....
Plus de sujets relatifs à : [C++ Builder] Changer la résolution


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR