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

C++Builder Discussion :

Adapter une application VCL a Vista [FAQ]


Sujet :

C++Builder

  1. #1
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 288
    Points : 334
    Points
    334
    Par défaut Adapter une application VCL a Vista
    Je suis tombé sur un lien très intéressant l'autre jour et je souhaite le faire partager.
    Il s'agit des modifications a apporter à une application VCL pour éviter quelques incomodités avec Vista. Rien de très méchant, mais lisez plutôt:

    http://www.installationexcellence.co...phi/Index.html

    Je viens d'appliquer les modifications conseillées sur mon appli et ça tourne nickel (avec XP car je n'ai pas Vista .

    A vos claviers.

    Yarp
    www.senosoft.com

  2. #2
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut
    merci pour ce lien.
    mais les amis non anglophones de ce forum seront sans doute reconnaissant si tu peux faire un petit résumer de la manip a faire .
    Merci

  3. #3
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 288
    Points : 334
    Points
    334
    Par défaut
    Oui j'avais l'intention de publier mon code. Je me suis intéressé pour l'instant à la partie comportement de la fenêtre principale jusqu'à l'exemple 3 dans l'article. Le reste de l'article parle des nouvelles fenêtre standards (common dialogs) de Vista.

    Il est dit dans la partie qui nous intéresse que la fenêtre cachée de BCB la fameuse TApplication joue des tours à nos applications sous Vista car il existe une fonction de previsualisation (des fenêtre réduites) qui affiche TApplication et non la TForm quand la fenêtre est réduite.
    Pour corriger ça le truc consiste :
    - à modifier le style de TApplication et de la TForm principales pour que la TForm devienne la fenêtre principale de l'application (TApplication restant bien entendu le parent de l'ensemble)
    - à gérer soit-même la réduction/restauration de la fenêtre
    - à changer l'implémentation du ShowModal pour corriger les effets de bord (car maintenant avec ShowModal les dialogues vont passer sous notre TForm)

    Ce dernier point est le plus embêtant car il faut enlever toutes les fenêtres construites automatiquement par BCB pour les instancier soit-même. Je considère perso que ce n'est pas un mal, ça peut même soulager notre applicatif mais c'est du travail.

    Le code à présent:
    Modifier le style des fenêtres
    Chaque fenêtre qui apparait dans la Taskbar est concernée par CreateParams mais typiquement seules la fenêtre principales de votre application est concernée:
    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
     
    void __fastcall TfrmMain::CreateParams(TCreateParams &Params)
    {
      TForm::CreateParams(Params);    // Vista support
      Params.ExStyle = (Params.ExStyle & ~WS_EX_TOOLWINDOW) | WS_EX_APPWINDOW;
    }
     
    void __fastcall TfrmMain::FormCreate(TObject *Sender)
    {
      // Vista support
      ::ShowWindow(Application->Handle, SW_HIDE);
      ::SetWindowLongPtr(Application->Handle, GWL_EXSTYLE,
          (::GetWindowLongPtr(Application->Handle,GWL_EXSTYLE) & ~WS_EX_APPWINDOW) | WS_EX_TOOLWINDOW);
      ::ShowWindow(Application->Handle, SW_SHOW);
    }
    Gérer le minimize
    Il faut implementer le message WM_SYSCOMMAND avec les événements SW_MINIMIZE et SW_RESTORE. Je suis désolé mais je n'ai pas de code standard à vous montrer car je subclass ma message map plutôt que de passer par la message MAP dans le header, voir la doc pour ajouter un message et une message MAP.
    Le code standard est du genre Message.Result = 1. Dans l'exemple le gars met Message.Result := 0, j'ai mis mon code (qui fonctionne avec subclassing) et une implémentation non testée mais copiée du site de réference.
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    Subclassing, message MAP dans le cpp:
    int __fastcall TfrmMain::OnSysCommand(Messages::TMessage &Message)
    {
      // Vista support
      switch(Message.WParam) {
        case SC_MINIMIZE:
          ::ShowWindow(this->Handle, SW_MINIMIZE);
          return 1;
        case SC_MAXIMIZE:
          ::ShowWindow(this->Handle, SW_RESTORE);
          return 1;
      }
      return 0;
    }
     
    Standard BCB, message MAP dans le header:
    void __fastcall TfrmMain::OnSysCommand(Messages::TMessage &Message)
    {
      // Vista support
      switch(Message.WParam) {
        case SC_MINIMIZE:
          ::ShowWindow(this->Handle, SW_MINIMIZE);
          Message.Result = 0;
          break;
        case SC_MAXIMIZE:
          ::ShowWindow(this->Handle, SW_RESTORE);
          Message.Result = 0;
          break;
      }
    }
    Les fenêtre modales
    Pour chaque Appel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    frmDlgMyModal = new TfrmDlgMyModal(this);
    try {
      frmDlgMyModal.Parent = this;
      frmDlgMyModal.ShowModal();
    }
    __finally {
     delete frmDlgMyModal;
     frmDlgMyModal = NULL;
    }
    Il reste pas mal à exploiter sur l'article, mais je ne gére pas mes common dialogs avec BCB donc ça limite l'interêt.
    S'il y a d'autres modifications intéressantes pour BCB je les posterais néanmoins ici.

  4. #4
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Comme vous le savez avec Windows Vista il existe un explorateur de jeux (Game Explorer). Donc ceux qui on fait un jeu en BCB (comme moi ) seront intéressé d'ajouter leur jeu à cette nouvelle fenêtre. Voici un lien qui vous explique comment faire:
    http://msdn2.microsoft.com/en-us/library/ms687240.aspx

    PS: ne me demander pas de résumer, j'ai pas encore tout lus
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  5. #5
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Je viens juste de me rendre compte qu'il existe une traduction du site en français et elle est sur Developpez.com dans la section Delphi:

    http://olance.developpez.com/article.../delphi-vista/
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  6. #6
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 288
    Points : 334
    Points
    334
    Par défaut
    Un suivi de ce thread pour dire que si la solution décrite résoud effectivement le problème de la prévisualisation dans Vista elle déclenche aussi un certain nombre d'effets de bord car Windows considère toujours malgré tout TApplication comme étant le thread principal de l'application.
    - Le chargement de l'icone dans la barre de tache n'est pas immédiat mais se déclenche à la fin du FormShow (ce qui est logique) avec une tendance au blocage si le FormShow est long (?).
    - Des fonctions de l'API qui se basent sur GetActiveWindow ne se déclenchent pas.
    - Restore/Minimize ne fonctionne plus et il faut également réécrire cet event (OnSysCommand)

    Par conséquent je me dit que si c'est juste pour avoir une prévisualisation le jeux n'en vaut peut-être pas la chandelle et qu'il faudrait plutôt chercher à intervenir au niveau de l'affichage de cette prévisualisation (si c'est possible) que de violer le comportement de Delphi.

    (a suivre)

    yarp
    www.senosoft.com

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 71
    Points : 75
    Points
    75
    Par défaut
    Bonjour

    Si on ne veux pas modifier son application, existe-t-il sous Vista un mode compatibilité XP permettant de faire tourner l'application en mode XP ?
    (comme sous XP la possibilité de déclarer qu'un executable doit être lancé en mode Win 95, win 98, ...) ?
    Merci.

  8. #8
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 288
    Points : 334
    Points
    334
    Par défaut
    A dire vrai je ne sais pas mais les applis Delphi/BCB tournent bien sous Vista, pas de pb.
    Le problème décrit ici est "comment permettre à une appli Delphi/BCB d'apparaitre dans la prévisualisation sous Vista". Cette prévisualisation n'est rien d'autre que le bon vieux Alt+Tab avec une vignette au lieu d'un icone et du coup mode XP ou pas il ne peut pas y avoir de prévisulation sans adapter l'appli.
    Mais ça ne remet pas en cause la stabilité des applis Delphi/BCB sous Vista.

    yarp
    www.senosoft.com

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 71
    Points : 75
    Points
    75
    Par défaut
    Bonjour

    Ah d'accord, je comprends.
    Merci.

  10. #10
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Citation Envoyé par Crayon Voir le message
    Comme vous le savez avec Windows Vista il existe un explorateur de jeux (Game Explorer). Donc ceux qui on fait un jeu en BCB (comme moi ) seront intéressé d'ajouter leur jeu à cette nouvelle fenêtre. Voici un lien qui vous explique comment faire:
    http://msdn2.microsoft.com/en-us/library/ms687240.aspx

    PS: ne me demander pas de résumer, j'ai pas encore tout lus
    Salut, laisser moi revenir un peu en arrière pour vous dire que j'ai réussi a ajouter mon jeu au "game explorer" de Windows Vista. Je créé une dll de ressource à partir des fichiers (.rc et .h) générés par Game Definition File Editor (qui vient avec le SDK de DirectX). Ensuite, dans mon installateur NSIS j'ai utiliser le script que l'on trouve sur cette page:
    http://nsis.sourceforge.net/Game_explorer

    Pour savoir comment utiliser Game Definition File Editor vous pouvez aller sur le site Web de Microsoft: http://msdn2.microsoft.com/en-us/library/bb173435.aspx
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

Discussions similaires

  1. Adapter une application Python en application Web
    Par Termirtau dans le forum Débuter
    Réponses: 3
    Dernier message: 02/03/2015, 22h46
  2. Réponses: 2
    Dernier message: 14/03/2013, 13h48
  3. Adapter une application android à différentes tailles d'écrans
    Par MarwenSaidi dans le forum Communiqués
    Réponses: 0
    Dernier message: 01/02/2013, 11h30
  4. Adapter une application BlackBerry Bold 9780
    Par Wei_qi dans le forum Développement Mobile en Java
    Réponses: 0
    Dernier message: 10/12/2011, 13h48
  5. [DEV] Adapter une application Web pour l'iPhone
    Par LeBabouin dans le forum Apple
    Réponses: 1
    Dernier message: 28/07/2009, 16h49

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