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 :

New Composant XPManifest


Sujet :

C++Builder

  1. #1
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut New Composant XPManifest
    Bonjour,

    J'utilise le nouveau composant XPManifest fournit avec BDS2006 et ca marche effectivement trés bien, fournissant une interface de style XP simplement en l'implementant dans l'application. Je me demandais si il etait possible de revenir au style classique par code. C'est a dire faire une application de style XP ou NT selon la volonté de l'utilisateur.
    J'ai bien essayé par code de deleter ce composant, mais ca n'a visiblement pas d'effet.
    Merci de vos suggestions éclairées

  2. #2
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Salut, j'ai déjà essayé de modifier le theme de l'application, sur BCB6.

    N'ayant pas ce composant, je n'ai pas eu cette possibilité, cependant il agit (il me semble) dès la construction de la Form. Ce qui explique pourquoi sa supression ne fait rien. J'ai trouvé un code permettant ce changement mais à la contruction.

    Pour tout changement de l'application en cours de fonctionnement, j'ai trouvé qq pistes sur msdn, mais pour avoir toutes les librairies suffisantes il faut télécharger une mise à jour de Windows sur msdn, chose que je n'ai pas eu le temps de faire. Si tu souhaites poursuivre cette recherche, je te suis volontier.
    Je suis curieux de changer le style en cours d'application, mais il me manque une librairie.

    Voici le post où figure toute ma recherche.

  3. #3
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Ok, il semble que je puisse aller un peu plus loin que toi. Visiblement sous XP avec BDS2006 cette fameuse Uxtheme.lib est fournie, je peux donc compiler et link ton example:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        HTHEME hTheme = NULL;
        Application->Name.WideChar(AppName,Application->Name.Length());
        hTheme = OpenThemeData(Application->Handle,AppName);
    Sauf que là je suis un peu perdu: concernant ton example AppName contient NULL! Donc hTheme aussi apres OpenThemeData.
    J'ai beau forcer un nom de classe dans AppName, j'obtient toujours hTheme=NULL.

    Pourtant quand j'utilise les fonctions:
    IsAppThemed();
    IsThemeActive();
    J'ai bien un retour à true

    Là j'avoue mon ignorance, j'ai beau essayé de décripter l'aide de msw, j'avoue que c'est un peu du charabia pour moi.

    Pourtant je pense que normalement j'ai tous les outils pour changer de theme dynamiquement. Je vais essayer de faire des recherche sur le web

  4. #4
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Ce n'est pas normale, en fait ces 3 lignes m'aurait permis de tester le style XP ou classique de l'application. Le AppName doit contenir le nom de l'application de la même manière que Application->ExeName, mais sous un autre format que l'AnsiString.
    A corriger


    Au passage met les balises [ code] et [ /code]. (elles apparaissent en cliquant sur le # au dessus de la zone de texte où tu saisis le message).

  5. #5
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Ok, Il semble que j'approche de la solution apres quelques recherche. Peut-être que mon probleme est tout de meme plus simple que le tient. Parce qu'en fait mon application est developée sous le style XP par defaut: Cause XPManifest composant. Et tourne sur Xp. Et je veux simplement pouvoir revenir à un style classique (NT)

    Maintenant pour revenir à un style NT classique, j'ai deux solution:
    - Tout simplement dans les propriétés de l'executable, désactiver les thémes visuelles. (C'est tout simple!)
    - Et par code, utiliser la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetThemeAppProperties(0)
    Sauf que là, ca reveint bien au style NT mais à moitier (les boutons par example ne suive pas et deviennent invisibles). J'ai pas saisi pourquoi encore.

    - Une troisieme voix que je vais explorer, est de désactiver les thémes visuelles dans les propriétes de l'exe, mais par code. Ca doit bien se trouver quelquepart dans la base des registres.

  6. #6
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Dans le premier lien de mon post, il y a un exemple pour changer le style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetWindowTheme (hwndButton, TEXT (" "), TEXT (" "));
    Il suffit alors de faire ça pour tous les composants avec une boucle du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for ( int x=0 ; x<Form1->ControlCount ; x++)
    {
         HANDLE Hnd;
         //trouver un moyen de récupérer le Handle 
    }
    Je cherche un moyen de récupérer le handle de tous les composants et comme ca, on les change un par un.

  7. #7
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Je ne sais pas si cela peux fonctionner, mais si tu exécute cette commande avec le Handle non pas d'un bouton mais de l'application directement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetWindowTheme (Application->Handle, TEXT (" "), TEXT (" "));
    En comptant sur les lien de parenté des objets, il est possible que cela fonctionne.
    A voir ...

  8. #8
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Visiblement la syntax
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetWindowTheme (Application->Handle, TEXT (" "), TEXT (" "));
    n'est pas comprise par le compilateur: C'est le TEXT(" ") qu'il ne comprend pas
    Si j'essaye plutot ce qui suit qui a l'air l'equivalent borland:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WCHAR* wch=(WCHAR*)"";
    SetWindowTheme (Application->Handle, wch,wch);
    Ca n'a aucun effet !!!

  9. #9
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Ok j'ai trouvé, c'est un peu tordu. Il fallait mettre NULL dans le premier et "" dans le second parametre, comme ci-dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetWindowTheme(MyToolBar->Handle,NULL,(wchar_t *)"");
    D'autre part, il faut se taper toute la liste des composant, parce que Application->Handle ne donne rien. Et pour finir malheureusement ca ne fonctionne pas sur tout les objets.

    Pour ma part, j'ai opté pour un changement de theme NT->XP via le registre ou je coche l'option "Désactivé les themes visuelles". Ca fonctionne trés bien, mais oblige jsute à relancer l'application

  10. #10
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Pour quel type de composant ce style ne fonctionne pas?
    msdn donne son exemple pour les boutons, donc ca devrait fonctionner.
    Sinon essaye sur le Handle de ta Form directement.

  11. #11
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Aucun effet du handle de la forme.
    Les TBitBtn ne marche pas par example

  12. #12
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Est-ce uniquement les boutons?
    Est-ce que si tu le fait manuellement sur le bouton (avec son handle) ca marche ?

  13. #13
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Oui même manuellement ca donne rien.
    TGroupeBox ne fonctionne pas aussi, enfin j'ai pas verfié tous les objects

  14. #14
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Peux tu m'envoyer la librairie que je puisse faire qq testes?

  15. #15
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Tout est !
    Je ne connais pas tout, mais il doit bien y avoir des fonctions pour changer le theme du PC, du moins d'une application !!

  16. #16
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Oui je connais bien ce liens, mais faut reconnaitre que c'est si complex que ca n'est pas facilement exploitable.

    Voici l'ensemble des fichiers fournis avec BDS6
    UxTheme.zip
    et pour finir je pense qu'il faut la dll windows:
    uxtheme_dll.zip
    A renome Uxtheme.dll et localisé dans WINNT\Systeme32
    Bonne chance et bon courage

  17. #17
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Nikel, merci bien

Discussions similaires

  1. utilisation du composant XPManifest delphi7
    Par jack2009 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 11/09/2009, 19h50
  2. Le composant XPmanifest
    Par looping dans le forum Langage
    Réponses: 3
    Dernier message: 29/10/2008, 16h47
  3. Comment utiliser le composant XPManifest ?
    Par 21247692 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 09/11/2007, 10h19
  4. Le composant XPManifest
    Par 21247692 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 22/10/2007, 12h34
  5. New composant: Treeview gérant l'alphablending
    Par Gaadek dans le forum Composants VCL
    Réponses: 14
    Dernier message: 08/06/2007, 12h38

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