IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API, COM et SDKs Delphi Discussion :

[D6] Récupérer la fréquence de l'écran


Sujet :

API, COM et SDKs Delphi

  1. #1
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 967
    Points
    6 967
    Par défaut [D6] Récupérer la fréquence de l'écran
    Dans un projet, je dois modifier la résolution de l'écran (taille, fréquence, nb de couleurs) : Pas de problème avec ChangeDisplaySettings.

    Par contre, pour pouvoir remettre le mode graphique de départ, il faudrait déjà le récupérer. Et c'est là que je coince.
    Je récupère l'ancienne taille d'acran avec GetSystemMetrics :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
          _ModeGraphiqueOld.nLargeur := GetSystemMetrics(SM_CXSCREEN);
          _ModeGraphiqueOld.nHauteur := GetSystemMetrics(SM_CYSCREEN);
    Je récupère le nombre de couleur avec GetDeviceCaps :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AncienneResolutionCouleur:=GetDeviceCaps(Form1.Canvas.Handle, BITSPIXEL)*GetDeviceCaps(Form1.Canvas.Handle, PLANES);
    Mais, pour la fréquence, je n'ai pas trouvé comment faire.
    Quelqu'un aurait-il une idée ?
    Merci.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  2. #2
    Membre régulier Avatar de EssaiEncore
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Points : 74
    Points
    74
    Par défaut
    je c pas si cela peut t'aider

    • http://www.phidels.com/php/index.php3?page=../php/pagetelechargementzip.php3&id=220

  3. #3
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 967
    Points
    6 967
    Par défaut
    Citation Envoyé par EssaiEncore
    je c pas si cela peut t'aider

    • http://www.phidels.com/php/index.php3?page=../php/pagetelechargementzip.php3&id=220
    Merci, mais je connaissais déjà.
    C'est grâce à cet exemple que j'ai su comment récupérer le nombre de couleurs.
    Mais, il ne parle pas de la fréquence.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  4. #4
    Membre régulier Avatar de EssaiEncore
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Points : 74
    Points
    74
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function ChangeFrequence(Frequence:integer):integer;
    var
      Retour:Longint;
      DevMode:TDeviceMode;
    begin
      DevMode.dmSize:=SizeOf(DevMode);
      DevMode.dmDisplayFrequency:=Frequence;
      DevMode.dmFields:=DM_DISPLAYFREQUENCY; //indique ce que l'on veut modifier.
      Retour := ChangeDisplaySettings(DevMode, CDS_TEST); //CDS_TEST car ce que l'on veut en premier, c'est voir si c'est possible
      if Retour=DISP_CHANGE_RESTART then ShowMessage('ne peut modifier la résolution car nécessiterait un redémarrage de Windows');
      if Retour=DISP_CHANGE_SUCCESSFUL then ChangeDisplaySettings(DevMode, CDS_UPDATEREGISTRY);// là, c'est bon, on le fait pour de bon.
      if Retour=DISP_CHANGE_FAILED	then ShowMessage('erreur');
      if Retour=DISP_CHANGE_BADMODE then ShowMessage('Mode Graphique non supporté');
      Result:=Retour;
    end;
    C bien la frequence ca ?? Peut etre c tu deja le faire !!!

  5. #5
    bjl
    bjl est déconnecté
    Membre averti Avatar de bjl
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : Brésil

    Informations forums :
    Inscription : Décembre 2002
    Messages : 263
    Points : 338
    Points
    338
    Par défaut
    Salut Lung,

    tu as essayer avec l'API EnumDisplaySettings ?

    http://msdn.microsoft.com/library/de...vcons_84oj.asp

    il y a aussi DEVMODE à lire (EnumDisplaySettings peut retourner 0 ou 1 si l'écran est en mode défaut)

    http://msdn.microsoft.com/library/de...tspol_8nle.asp

  6. #6
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 967
    Points
    6 967
    Par défaut
    Citation Envoyé par bjl
    tu as essayer avec l'API EnumDisplaySettings ?

    http://msdn.microsoft.com/library/de...vcons_84oj.asp
    Citation Envoyé par MSDN
    iModeNum
    [in] Specifies the type of information to retrieve. This value can be a graphics mode index or one of the following values. Value Meaning
    ENUM_CURRENT_SETTINGS Retrieve the current settings for the display device.
    ENUM_REGISTRY_SETTINGS Retrieve the settings for the display device that are currently stored in the registry.
    Ces 2 paramètres n'existe pas.
    Comment les utiliser ?
    Ils n'existent pas dans l'aide Delphi.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  7. #7
    bjl
    bjl est déconnecté
    Membre averti Avatar de bjl
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : Brésil

    Informations forums :
    Inscription : Décembre 2002
    Messages : 263
    Points : 338
    Points
    338
    Par défaut
    il semblerait que la valeur soit -1 pour ENUM_CURRENT_SETTINGS


    http://66.102.9.104/search?q=cache:M...ETTINGS+&hl=fr

  8. #8
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Var
    Frequency : Integer;
    DC : THandle;
    Begin
    DC := GetDC(Handle);
    Frequency := GetDeviceCaps(DC, VREFRESH);
    ShowMessage(Format('%d Hrz', [Frequency ]));
    end;
    Est ce ce que tu veux ?

  9. #9
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 967
    Points
    6 967
    Par défaut
    Citation Envoyé par bjl
    il semblerait que la valeur soit -1 pour ENUM_CURRENT_SETTINGS


    http://66.102.9.104/search?q=cache:M...ETTINGS+&hl=fr
    L'ennui, c'est que le paramètre est un cardinal : donc pas de nombre négatif possible.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  10. #10
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 967
    Points
    6 967
    Par défaut
    Citation Envoyé par portu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Var
    Frequency : Integer;
    DC : THandle;
    Begin
    DC := GetDC(Handle);
    Frequency := GetDeviceCaps(DC, VREFRESH);
    ShowMessage(Format('%d Hrz', [Frequency ]));
    end;
    Est ce que tu veux ?
    Ca m'en a tout l'air ...
    Et en plus, ca marche.

    Je teste ...
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  11. #11
    Membre actif

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 479
    Points : 267
    Points
    267
    Par défaut
    Citation Envoyé par Lung Voir le message
    L'ennui, c'est que le paramètre est un cardinal : donc pas de nombre négatif possible.
    Bien que ce message soit ancien j'indique comment contourner le problème consistant à donner la valeur -1 à un cardinal. Il suffit de passer high(cardinal) et le tour est joué. Cardinal est rempli de 1, ce qui est bien sa valeur max mais en binaire signé cela donne -1.

Discussions similaires

  1. Réponses: 6
    Dernier message: 31/03/2011, 02h23
  2. Réponses: 0
    Dernier message: 30/10/2008, 17h31
  3. Récupérer la fréquence d'apparition des trous
    Par lloyd_r dans le forum Signal
    Réponses: 1
    Dernier message: 22/07/2008, 17h45
  4. Récupérer la résolution de l'écran
    Par JPJHT dans le forum VBA Access
    Réponses: 3
    Dernier message: 25/10/2007, 15h41
  5. [J2ME][debutant] Récupérer la taille d'un écran
    Par kisscool31 dans le forum Java ME
    Réponses: 4
    Dernier message: 21/04/2005, 16h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo