Blog du Pôle .NET

Partager pour mieux développer...

Des classes utiles pour vos développements avec .NET Compact Framework

clock June 29, 2008 16:22 by author lnyffels

Il n’est pas rare lorsque l’on développe une application sur Pocket PC ou Smartphone avec le .NET Compact Framework d’avoir besoin de faire appel à l’API de Windows CE  pour réaliser certaines tâches. En effet, certaines méthodes ne sont pas encapsulées au sein du Compact Framework  :

-          Connecter le modem GPRS du mobile pour initier une communication

-          Modifier l’horloge interne du PDA pour la synchroniser avec celle du serveur

-          Récupérer l’identifiant unique du PDA (le Device ID)

-          Indiquer l’état de la batterie et la mémoire restante (Présent dans le NET CF 3.5)  

-          Lancer, supprimer ou lister des processus (Présent dans le NET CF 3.5)

Je joins à ce post un ensemble de classes utilitaires que j’ai eu l’occasion d’utiliser au cours de développements sur des plateformes Windows CE et qui je l’espère vous serons utiles.

Laurent Nyffels

ClassesUtiles.zip (6,45 kb)

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Créer une classe AppSettings sur le .NET CF 3.5 avec Linq to XML

clock June 26, 2008 10:11 by author lnyffels

Il y a quelques années j’ai écrit un article sur « codeppc », un site dédié au développement sur plate-forme WinCE. A l’époque, je déplorai l’absence de l’assembly System.Configuration et du fichier de configuration App.config sur le .NET Compact Framework 1.0.

Force est de constater que 6 ans après sa sortie, le Compact Framework 3.5 n’apporte toujours pas cette fonctionnalité pourtant bien pratique qui consiste à pouvoir externaliser des variables dans un fichier XML et de pouvoir les récupérer simplement dans une application sur Pocket PC ou smartphone simplement via une classe technique .NET. Heureusement, il en fournit bien d’autres…

Le Compact Framework de l’époque offrait toutefois la possibilité de manipuler une source XML à travers l’assembly System.Xml et nous pouvions assez facilement recréer une classe technique pour manipuler un fichier de type App.Config   (cf. http://www.codeppc.com/articles/sde2/sde2.htm ).

Aujourd’hui, le .NET CF 3.5 permet d’utiliser la technologie  Linq to Object et Linq to XML pour construire, lire et modifier une source XML.

Je me suis donc amusé avec les classes XDocument et XElement de Linq to Xml pour simuler le comportement  de la classe ConfigurationSettings du framework .NET et de la propriété AppSettings.   

Pour se faire, je propose d’externaliser cette classe dans une assembly ConfigurationManager.dll en créant un projet SmartDevice de type Class Library dans Visual Studio 2008.

Créons au sein de cette classe une propriété statique permettant de récupérer le chemin de l’app.config déployer sur le PPC.

 

 

Remarquer l’utilisation de la « réflexion » pour récupérer le répertoire de l’assembly en cours d’éxécution. Bon OK, la lignede code est un peu longue… mais bon, elle est fun, non ? Nous allons ensuite créer une méthode statique AppSettings permettant de récupérer la valeur de l’attribut value de l’élément <add> en passant le nom de la clé (attribut key) en paramètre  de la méthode 

<?xml version="1.0" encoding="utf-8" ?><configuration>  <appSettings>    <add key="dossier_exercices" value="C:\exo\questions"/>    <add key="dossier_corrections" value="C:\exo\corrections"/>  </appSettings></configuration>

La première étape consiste à charger le fichier App.Config avec la classe XDocument. Ensuite, on applique une simple requête Linq pour récupérer l’ensemble des éléments <add> comportant la clé choisie. Il suffit ensuite de récupérer l’attribut value qui est le dernier de l’élement add à travers un foreach.

 

Ajouter à cela quelques vérifications d’usages des valeurs passées en paramètre et un try – catch pour générer les éventuelles erreurs et le tour est joué ! Exemple de l’appel à la méthode au sein de l’application est le suivant :

String valeur = ConfigurationSettings.AppSettings("dossier_exercices")

Pour obtenir plus d’informations sur Linq je vous engage à parcourir le site msdn sur le sujet et à suivre le maître inconstesté : Anders Hejlsberg.

http://msdn.microsoft.com/en-us/netframework/aa904594.aspx

Laurent Nyffels

SmartTestLinqXML.zip (49,81 kb)

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Changement dans certains événements entre la Beta 1 et la Beta 2 de SL2

clock June 19, 2008 07:24 by author aequoy

Je teste actuellement la nouvelle mouture de SilverLight 2 et je tenais à vous faire part d'un changement qui m'a pas mal agacé.

Le VisualStateManager est assez sympathique à utiliser. C'est très simple, par contre cela m'a obligé à reprendre tous mes styles précédemment créé en Beta 1 pour les convertir dans ce nouveau mode.

Nous sommes en beta, c'est donc normal qu'il y ait des changements.

Prenons le cas d'un template que j'avais défini pour mes boutons ronds dans le caroussel.

Le look and Feel précédemment défini via des StoryBoard portant des noms précis :

<Storyboard x:Key="Normal State" />
                                <Storyboard x:Key="MouseOver State">
                                    <DoubleAnimation Duration="0:0:0.3" Storyboard.TargetName="LinearBevelLightStart" Storyboard.TargetProperty="Offset" To=".5" />
                                    <DoubleAnimation Duration="0:0:0.3" Storyboard.TargetName="LinearBevelLightStart2" Storyboard.TargetProperty="Offset" To=".5" />
                                </Storyboard>
                                <Storyboard x:Key="Pressed State">
                                    <DoubleAnimation Duration="0:0:0.1" Storyboard.TargetName="LinearBevelLightEnd" Storyboard.TargetProperty="Offset" To=".5" />
                                    <DoubleAnimation Duration="0:0:0.1" Storyboard.TargetName="LinearBevelLightEnd2" Storyboard.TargetProperty="Offset" To=".5" />
                                </Storyboard>
                                <Storyboard x:Key="Disabled State">
                                    <DoubleAnimation Duration="0:0:0" Storyboard.TargetName="LinearBevelLightEnd" Storyboard.TargetProperty="Opacity" To="1" />
                                    <DoubleAnimation Duration="0:0:0" Storyboard.TargetName="LinearBevelLightEnd2" Storyboard.TargetProperty="Opacity" To="1" />
                                </Storyboard>

s'est changé en :
                            <vsm:VisualStateManager.VisualStateGroups>
                                <vsm:VisualStateGroup x:Name="FocusStates">
                                    <vsm:VisualState x:Name="Unfocused"/>
                                    <vsm:VisualState x:Name="Focused"/>
                                </vsm:VisualStateGroup>
                                <vsm:VisualStateGroup x:Name="CommonStates">
                                    <vsm:VisualState x:Name="MouseOver">
                                        <Storyboard>
                                            <DoubleAnimation Duration="0:0:0.3" Storyboard.TargetName="LinearBevelLightStart" Storyboard.TargetProperty="Offset" To=".5" />
                                            <DoubleAnimation Duration="0:0:0.3" Storyboard.TargetName="LinearBevelLightStart2" Storyboard.TargetProperty="Offset" To=".5" />
                                        </Storyboard>
                                    </vsm:VisualState>
                                    <vsm:VisualState x:Name="Pressed">
                                        <Storyboard>
                                            <DoubleAnimation Duration="0:0:0.1" Storyboard.TargetName="LinearBevelLightEnd" Storyboard.TargetProperty="Offset" To=".5" />
                                            <DoubleAnimation Duration="0:0:0.1" Storyboard.TargetName="LinearBevelLightEnd2" Storyboard.TargetProperty="Offset" To=".5" />
                                        </Storyboard>
                                    </vsm:VisualState>
                                    <vsm:VisualState x:Name="Disabled">
                                        <Storyboard>
                                            <DoubleAnimation Duration="0:0:0" Storyboard.TargetName="LinearBevelLightEnd" Storyboard.TargetProperty="Opacity" To="1" />
                                            <DoubleAnimation Duration="0:0:0" Storyboard.TargetName="LinearBevelLightEnd2" Storyboard.TargetProperty="Opacity" To="1" />
                                        </Storyboard>
                                    </vsm:VisualState>
                                    <vsm:VisualState x:Name="Normal"/>
                                </vsm:VisualStateGroup>
                            </vsm:VisualStateManager.VisualStateGroups>

Jusque là tout va bien. Les changements sont sympathiques.

Par contre là où le bas blesse, concerne la gestion des événements sur les contrôles type button et autre listbox.

Dans les "Breaking Changes Between Beta 1 and Beta 2" que je vous invite à lire, on peut remarquer des changements sur ButtonBase, par exemple :) .

Certains événements ne sont plus "routés" et il n'est donc plus possible de s'y abonner.

Parmis ceux-ci on retrouve 3 événements qui m'ont pas mal servi, notamment dans le carrousel et dans l'utilisation de drag and drop :

  • OnMouseLeftButtonDown

  • OnMouseLeftButtonUp

  • OnMouseMove

Sachez juste que ces événements sont "routés" parfaitement sur les éléments graphiques tels que les glyphes, les ellipses et autres rectangles.

La conclusion de cela est que je vais devoir créer mes propres contrôles si je veux utiliser ces événements.

Alexandre Equoy

Currently rated 4.3 by 3 people

  • Currently 4.333333/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Formatage d'une Exception en XML

clock June 16, 2008 12:17 by author crezenthel

 

Bonjour à tous, 

Et voilà mon 1er Ticket! :o)
Voici une classe qui permet de formater une Exception sous la forme d’un flux XML en DotNet 2.0. 

Exemple de formatage d'exception:

 <EXCEPTION>
  <Date>06/05/2008 15:58:11</Date>
  <Type>System.Exception</Type>
  <Message>Exception 1</Message>
  <Source />
  <HelpLink />
  <Data>System.Collections.ListDictionaryInternal</Data>
  <StackTrace>StackTrace non disponible</StackTrace>
  <AdditionalInfo>
    ** InnerException **
    Type : System.Exception
    Message : Exception 2
    Source :
    HelpLink :
    Data : System.Collections.ListDictionaryInternal
    StackTrace : StackTrace non disponible</AdditionalInfo>
 </EXCEPTION>

Je joins en format PDF toutes les explications car le ticket fait 4 pages!

Formatage_en_XML_d'une_Exception.pdf (124,08 kb)

Et voici le fichier cs :

XmlExceptionFormatter.cs (10,57 kb)

@+ pour de nouvelles aventures.

Christophe REZENTHEL

Currently rated 4.5 by 2 people

  • Currently 4.5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Silverlight 2 Beta 2 : installation parfois calamiteuse :)

clock June 12, 2008 04:42 by author aequoy

Si comme moi vous avez installé et testé les outils de développement de la beta 2 de Silverlight 2, Microsoft va nous remettre une médaille :).

Personnellement, j'ai rencontré, comme en beta 1, pas mal de soucis d'installation que je vais décrire ici.

Heureusement que la communauté est très active, en regroupant diverses sources, je suis arrivé à mes fins.

Si vous n'avez pas encore installé SL2B2, voici la procédure qui m'a permis de réussir l'installation :

1- Avant toute chose, vérifier que la mise à jour KB949325 n'est pas installée. Si c'est le cas, il faut la désinstaller.

2 - Si vous avez désinstallé la KB, il vous faut passer les batchs suivants :

rem Repair features Visual Studio SP1
rem ENU VSTS
msiexec /passive /i {80C06CCD-7D07-3DB6-86CD-B57B3F0614D8} ADDLOCAL=VWD_for_VS_Ent_5902_x86_enu /L*vx %TEMP%\dd_repair_VSTS.log

rem ENU VSTD
msiexec /passive /i {6721AC10-3743-38F1-B178-C0EC6C9A4108} ADDLOCAL=VWD_for_VS_Ent_5902_x86_enu /L*vx %TEMP%\dd_repair_VSTD.log

rem ENU PRO
msiexec /passive /i {D7DAD1E4-45F4-3B2B-899A-EA728167EC4F} ADDLOCAL=VWD_for_VS_Ent_5902_x86_enu /L*vx %TEMP%\dd_repair_PRO.log

rem ENU VSTA
msiexec /passive /i {8F10429A-DFF5-3B55-9306-0ADEB337CFD3} ADDLOCAL=VWD_for_VS_Ent_5902_x86_enu /L*vx %TEMP%\dd_repair_VSTA.log

rem ENU VSTT
msiexec /passive /i {23D0117E-F9A5-364E-A379-70EC2DE02B9F} ADDLOCAL=VWD_for_VS_Ent_5902_x86_enu /L*vx %TEMP%\dd_repair_VSTT.log

rem ENU VSDB
msiexec /passive /i {4298C783-524F-3C3E-9B11-36FA64604B2B} ADDLOCAL=VWD_for_VS_Ent_5902_x86_enu /L*vx %TEMP%\dd_repair_VSDB.log

rem ENU STD
msiexec /passive /i {F434F50E-7614-3EA8-9008-2FB866B697DA} ADDLOCAL=VWD_for_VS_Ent_5902_x86_enu /L*vx %TEMP%\dd_repair_STD.log

 3 - Installer silverlight_chainer pour la beta2 

 4 - Démarrer VS 2008 et créer un projet SL2. 

 4.1 - Si jamais vous avez un message "Object reference not set to an instance of an object" Vérifier la taille de l'installation des Silverlight Tools. Si c'est 1.14 Mo comme moi, alors aller déplacer la DLL 

\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\Microsoft.VisualStudio.ServicesProxy.dll dans un répertoire temporaire. Il semble que cette DLL soit mise à jour par SL2B2.

Réinstaller silverlight_chainer dans ce cas. Normalement les Silverlight Tools pèsent 1.17 ou 1.18 Mo

 4.2 - Passer les commandes suivantes si 4.1 ou si le message est "The project type is not supported by this installation"

devenv /resetskippkgs

devenv /setup

  5 - Relancer VS 2008 et la création doit fonctionner enfin pour ma part ca a été le cas :)

 Bon courage en tout cas :)

Il semblerait que tout le monde n'ait pas les mêmes problèmes. Vous trouverez dans les sources de ce billet certainement une réponse.

Sources :

http://weblogs.asp.net/bradleyb/archive/2008/06/09/upgrading-to-silverlight-beta-2-and-visual-studio-2008-sp1-beta.aspx

http://www.itwriting.com/blog/?p=665

http://silverlight.net/forums/t/17468.aspx

  Alexandre Equoy

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Silverlight 2 Beta 2 cette semaine

clock June 4, 2008 05:33 by author aequoy

Annoncé pendant la keynote du Teched hier par Bill Gates himself, la bêta 2 de Silverlight 2 sort en fin de semaine. Blend 2 June 2008 et les options pour VS2008 sortiront en même temps.

La bêta 2 sortant avec le nom GoLive, c'est donc bel et bien parti pour les développements SilverLight !!!

Source : http://blogs.msdn.com/somasegar/default.aspx

Silverlight 2 beta 2 – This is going to be available later in the week with a commercial Go Live license.  Silverlight 2 beta 2 will be used to power the unprecedented online experience NBC Universal is creating for the 2008 Beijing Olympics. To help developers take full advantage of Silverlight, we are also making available Expression Blend 2.5 June 2008 Preview and Microsoft Silverlight Tools Beta 2 for Visual Studio 2008. 

Pour en savoir plus sur les avancées de cette bêta 2 :

http://community.irritatedvowel.com/blogs/pete_browns_blog/archive/2008/06/03/Silverlight-2-Beta-2-Goodies.aspx

L'intégration directe d'ADO .Net Data Services (ex Astoria), la communication WCF en mode duplex ainsi qu'une meilleure compatibilité avec WPF sont les points majeurs que je retiendrai.

 "Stay tuned" comme on dit chez nos voisins outre atlantique.

Alexandre Equoy

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Caroussel SilverLight en ligne

clock June 3, 2008 10:31 by author aequoy

Vous retrouverez un exemple concret qui montre le résultat des différents billets passés et à venir sur :

http://www.access-it.net/PersonViewerTestPage.aspx

Cela permettra aussi de mesurer les bonnes têtes de champion de l'équipe .Net chez Access it :).

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Calendrier

<<  July 2010  >>
MoTuWeThFrSaSu
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678
Afficher en pleine page

Visiteurs