Bonjour,
j'usqu'à présent j'utilisais un code afin de changer à la volée la résolution de l'écran.
Ce code est le suivant et fonctionne très bien dans Delphi 6:
function TMainFiche.ChangerResolution(Largeur, Hauteur: Word; BitsCouleur, Frequence: Byte): Integer;
var
Retour: LongInt;
DevModeChanger: TDeviceMode;
begin
DevModeChanger.dmSize := SizeOf(DevModeChanger);
With DevModeChanger do
Begin
dmPelsWidth := Largeur;
dmPelsHeight := Hauteur;
dmBitsPerPel := BitsCouleur;
dmDisplayFrequency := Frequence;
dmFields := DM_PELSWIDTH + DM_PELSHEIGHT + DM_BITSPERPEL + DM_DISPLAYFREQUENCY; //indique ce que l'on veut modifier.
end;
Retour := ChangeDisplaySettingsA(DevModeChanger,CDS_TEST); // test
if Retour = DISP_CHANGE_SUCCESSFUL then ChangeDisplaySettingsA(DevModeChanger,0);
Result := Retour;
end;
Le problème c'est qu'il ne fionctionne plus avec les version récentes de Delphi !
J'ai fait un essais avec Delphi XE5 et la commande "ChangeDisplaySettingsA(DevModeChanger,...)"" génère une erreur. J'ai essayé des trucs mais j'avoue que je patauge et une aide serai bienvenue.
Merci par avance
J'ai essayé cette solution et elle ne marche pas non plus avec Delphi XE5. En fait, les fonctions ChangeDisplaySettings et ChangeDisplaySettingsA sont relativement similaires.
Par contre, de mon coté, je viens d'essayer avec la fonction ChangeDisplaySettingsEx et ça fonctionne. La différence est, entre autre, que cette fonction prend en compte le moniteur utilisé (en cas d'écran multiple).
Voilà le code:
Retour := ChangeDisplaySettingsEx(0,DevModeChanger,0,CDS_TEST,Nil); // test (0, pour le premier index de moniteur
if Retour = DISP_CHANGE_SUCCESSFUL then ChangeDisplaySettingsEx(0,DevModeChanger,0,0,Nil);
Le premier "0" correspond à l'écran par défaut, 1 serai le 2ème moniteur pour les machines à écrans multiples, ...
J'ai testé avec Delphi XE5 sous Seven et avec Delphi 6 sous XP et Seven, donc 32 et 64 bits, et cela fonctionne ...
Si quelqu'un a une meilleure solution je reste preneur
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 Modifié par Cirec le 26/11/2016 à 19:26
Salut,
essaye avec:
function TMainFiche.ChangerResolution(Largeur, Hauteur: Word; BitsCouleur, Frequence: Byte): Integer;
const
ENUM_CURRENT_SETTINGS = Cardinal(-1);
ENUM_REGISTRY_SETTINGS = Cardinal(-2);
var
Retour: LongInt;
DevModeChanger: TDeviceMode;
begin
DevModeChanger.dmSize := SizeOf(DevModeChanger);
EnumDisplaySettings(nil, ENUM_CURRENT_SETTINGS, DevModeChanger);
With DevModeChanger do
Begin
dmPelsWidth := Largeur;
dmPelsHeight := Hauteur;
dmBitsPerPel := BitsCouleur;
dmDisplayFrequency := Frequence;
dmFields := DM_PELSWIDTH + DM_PELSHEIGHT + DM_BITSPERPEL + DM_DISPLAYFREQUENCY; //indique ce que l'on veut modifier.
end;
Retour := ChangeDisplaySettings(DevModeChanger,CDS_TEST); // test
if Retour = DISP_CHANGE_SUCCESSFUL then ChangeDisplaySettings(DevModeChanger,0);
Result := Retour;
end;
Il faut initialiser le "TDeviceMode" par un appel à "EnumDisplaySettings" avant tout autre chose
désolé pour le retard je n'ai pas vu le temps passer
cela faisait longtemps, merci de m'avoir répondu c'est sympa.
Alors j'ai essayé mais chez moi ton code génère une erreur (mais je vais regarder mieux pour comprendre ce que j'ai mal fait), par contre, comme je l'ai répondu à cs_eli42, j'ai trouvé une autre fonction: ChangeDisplaySettingsEx qui va très bien, apparement dans tous les cas, avec le code suivant
Retour := ChangeDisplaySettingsEx(0,DevModeChanger,0,CDS_TEST,Nil); // test (0, pour le premier index de moniteur)
if Retour = DISP_CHANGE_SUCCESSFUL then ChangeDisplaySettingsEx(0,DevModeChanger,0,0,Nil);