Application.EnableVisualStyles(); [Résolu]

Signaler
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
-
Messages postés
303
Date d'inscription
mardi 11 février 2003
Statut
Membre
Dernière intervention
24 avril 2009
-
Dans le main de mon programme, je fais un Application.EnableVisualStyles(); Ce qui donne le style XP aux composants de mon programme (je fais une vérification pour être certain que l'utilisateur à bien XP ou supérieur). Ceci dit, même si l'utilisateur à XP, mais qu'il n'a pas de thème alors Application.EnableVisualStyles(); ne fait rien, ce qui me pose certain problèmes de design.

J'aurais donc besoin de savoir si l'utilisateur à un thème (ou si la méthode a correctement pu changer le style des composants).
Y'a t'il une solution ??
Merci d'avance.
A voir également:

22 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
bon, ok, j'ai rien dit, en plus elle etait pas dur à trouver celle là

IsThemeActive

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
et le bout de code qui va avec :

private const int FALSE = 0;
private const int TRUE  = 1;

[DllImport("UxTheme.dll")]
private static extern int IsThemeActive();


if(Environment.OSVersion.Version.Major >= 5 && Environment.OSVersion.Version.Minor >= 1)
{
if ( IsThemeActive() == TRUE )
MessageBox.Show("Themed !");
else
MessageBox.Show("Coq inside !");
}
else
{
MessageBox.Show("Non supporté !");
}


Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
13
tu peux aussi creer un fichier manifest :

http://www.mctainsh.com/Csharp/XpControlsInCS.aspx

[PUB] REGARDEZ MES SOURCES /PUB

:big)

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
13
NOMDEMONAPPLI.exe.manifest dans lequel tu met :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<dependency>
<dependentAssembly>

</dependentAssembly>
</dependency>



Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
13
heu autre chose tu a bien passe tes composant a flastyle = SYSTEM ???

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
13
une chtite fonction trouver sur le net qui va passer tous les controles d'une Form passer en argument en flastyle system :

/// <summary>
/// Search the control for button type control and set the FlatStyle
/// of these buttons to System. This method searches Recursively into
/// control within control. 
/// </summary>
/// Control to search children of

/// <example><code>
/// [C#]
/// 
/// Form1 f = new Form1();
/// //Passe a system toutes les propriete flatstyle de tout les objet de la form
/// FormatForWinXP(f);
/// 
///	
</example>
public static void FormatForWinXP(System.Windows.Forms.Control control)
{
foreach( System.Windows.Forms.Control ctrlChild in control.Controls )
{
// Set FlatStyle.System if it is a button type control
if(ctrlChild.GetType().BaseType == typeof(System.Windows.Forms.ButtonBase))
((System.Windows.Forms.ButtonBase)ctrlChild).FlatStyle = System.Windows.Forms.FlatStyle.System;
if(ctrlChild.GetType() == typeof(System.Windows.Forms.GroupBox))
((System.Windows.Forms.GroupBox)ctrlChild).FlatStyle = System.Windows.Forms.FlatStyle.System;
if(ctrlChild.GetType() == typeof(System.Windows.Forms.Label))
((System.Windows.Forms.Label)ctrlChild).FlatStyle = System.Windows.Forms.FlatStyle.System;

// Dive into the child controls if there are any
if(ctrlChild.Controls.Count > 0)
FormatForWinXP(ctrlChild);
}
}
</code>

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
le manifest peut etre evité en appelant DoEvents :

Application.EnableVisualStyles();
Application.DoEvents();
Application.Run(...


Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
13
mais y a qd meme pas une diff avec ou sans manifest ???

meme avec le doevents ???

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
il me semble que les 2 sont equivalents

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
13
dixit MSDN :

If you call DoEvents in your code, your application can handle the other events. For example, if you have a form that adds data to a ListBox and add DoEvents to your code, your form repaints when another window is dragged over it. If you remove DoEvents from your code, your form will not repaint until the click event handler of the button is finished executing.

Typically, you use this method in a loop to process messages



donc a priori ca dis juste a l'appli...c bon coco affiche maintenant ce qu'on te demande....

si g bien compris...
ca parle po du manifest...

par contre d'apres le lien que j'ai fourni plus haut y a un delta avec manifest et sans...
mais j'ai pas tester...

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
remarque peut être bien qu'il y a une difference je ne sais pas trop
j'avais juste vu ce workaround au hasard des sources

sachant que la premiere chose que je fais sur XP est de tout mettre en oldstyle, mes applis ne sont jamais prévue pour avoir le style xp ^^

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
13
monsieur coq est vieux jeu...
il n'aime pas les boutons xp ???

:o))))

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
lol

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
49
Je ne sais pas si on c'est bien compris (voleur d'idée de pub) mais en fait je fais actuellement ceci dans mon code :


/* The program is running under Windows XP or higher */
if(Environment.OSVersion.Version.Major >= 5)
{
Application.EnableVisualStyles();
Application.DoEvents();
}



Si on a deux utilisateurs, tout deux sous XP mais l'un avec les thèmes activés et l'autre pas, et bien ils ne voient pas la même chose à l'écran, ce qui me pose de problème niveau design...

Donc est ce que je peux savoir si le user à actuellement un thème ou pas?
Merci de vos réponse en tout cas, je jetterai un oeil sur cette histoire de manifest...
Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
13
haaa...

ya encore des gens qui installe des themes ???

dingue ca :o))))
heu ben oui on c'est peut etre emporter....sur ce coup la...

nop je sais po...
pas eu le cas...

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
en fait je pense que le style "old" est un theme comme les autres, donc je ne vois pas trop comment faire la difference

ah sinon : ne teste pas que le Major pour la version de l'os
2000 = 5.0
XP = 5.1

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
49
Il est absolument génial ce coq, merci pour le coup de main (faudra absolument que je regarde ces APIS, j'ai toujours un temps de retard :) )

Arthenius : Ben moi j'ai un thème, le seul que je trouve pas moche, Windows XP Style (le silver)... alors tu vois, ça existe encore les gens avec les thèmes lol... ceci dit, j'ai le menu démarré et tout le reste original... bien sur !

En tout cas merci beaucoup aux deux !
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
lol
de rien

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
13
mouarff....

a c aussi considerer comme un theme ca....(ben ben je l'ai aussi)

moi je pensais au truc moche qui existait sous 98 avec des icones pourri sur le sport etc...

trop fort coq...

[PUB]MES sources sont les plus bo/PUB

:o)))

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
Messages postés
303
Date d'inscription
mardi 11 février 2003
Statut
Membre
Dernière intervention
24 avril 2009
5
Le seul truc que j'aimerais comprendre, c'est que tu déclare ta fonction entière (int) et que tu la vérifi booléennement, et en plus avec le true en majuscule ...

Je suis perdu là :P

Eric ;)