Le premier site francophone dédié au développement Pocket PC

Calpin, votre premier programme en VB.NET (partie 4)
Auteur
Stéphane Sibué
Date 23 décembre 2002
 
   


Partie 1
Partie 2
Partie 3
Partie 4

Sources VB.NET de Calpin

Voici la dernière partie de cet article. Nous allons ajouter quelques points de détails pour faire de notre petite application .NET un bloc notes sympa à utiliser.

Ajoutons la gestion du SIP

Vous l'avez sans doute remarqué mais si vous faites apparaitre le clavier virtuel (le fameux SIP), la partie basse de l'écran est masquée. Pour éviter celà, il faut utiliser le contrôle de type "InputPanel" que nous avons appelé "InputPanel1". Ce contrôle est très simple à utiliser. Il génère un événement lorsque le SIP change d'état (visible/invisible). Il suffit alors de retailler l'écran :

Private Sub InputPanel1_EnabledChanged(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles InputPanel1.EnabledChanged
 TXT_Texte.Left = 0
 TXT_Texte.Top = 0
 TXT_Texte.Width = Me.Width

 If InputPanel1.Enabled Then
  TXT_Texte.Height = Me.Height - InputPanel1.Bounds.Height + 1
 Else
  TXT_Texte.Height = Me.Height - SB_Calpin.Height
 End If

End Sub

Avc ce code, lorsque le SIP est invisible (Enabled = False) le contrôle StatusBar (SB_Calpin) est visible, à l'inverse lorsque le SIP est visible, seul la zone de saisie reste visible (c'est un choix perso que vous pouvez changer très facilement).

Un écran d'accueil, ou Splash Screen

Lorsque Calpin démarre, un écran d'accueil apparaît pendant quelques secondes avant de laisser place à l'application elle même. J'ai décidé d'implémenter cet écran avec une seconde fenêtre qui sera "Form2". Pour ajouter cette nouvelle feuille à votre projet, cliquez sur le menu "Projet -> Add Windows Form" et choisissez d'ajouter une nouvelle feuille.

J'ai composé une petite image (un bmp tout simple) en guise d'écran d'accueil, et je l'ai ajouté au projet (Menu Project -> Add Existing Item). Mais je me suis retrouvé en face d'un gros problème (si si), comment faire pour charger cette image qui est placée à coté du fichier .exe sans connaître le chemin de celle-ci ? Avec eVB nous disposons de la propriété App.Path qui retourne le chemin du programme en cours d'éxécusion. Avec Compact Framework, je n'ai rien trouvé qui s'en rapporche (j'ai peut-être mal cherché).

La solution est d'utiliser les services d'une API (elles nous sauvent toujours la vies ces braves petites !).

Le App.Path de VB.NET

L'API en question est "GetModuleFileName" qui retourne le chemin complet du programme appellant. En utilisant cette API on se retrouve quasiment avec l'équivalent du bon vieux App.Path de eVB !

L'API est déclarée de la manière suivante :

Public Declare Function GetModuleFileName Lib "Coredll" _
Alias "GetModuleFileNameW" _
(ByVal hModule As Int32, _
ByVal lpFileName As String, _
ByVal nSize As Int32) As Int32

Petite note pour les développeurs eVB : Par rapport à eVB, partout où vous mettiez des Long dans les instructions "Declare", vous devez mettre avec VB.NET des Int32, sinon on obtient un gros crash !

Comment charger l'image dans le fond de la feuille ?

Le chargement de l'image s'effectue dans l'événement "Load" de Form2. L'image est chargée mais ce n'est pas là qu'elle sera affichée. Pour effectuer cette petite opération, nous devons déclarer une variable de type "Bitmap" et une autre de type "Graphics" :

Private SplashBitmap As Bitmap
Private GraphicSplash As Graphics

Puis le code de l'événement "Load" qui charge le bitmap :

Private Sub Form2_Load(ByVal sender As System.Object, _ 
 ByVal e As System.EventArgs) Handles MyBase.Load             
 Dim wBuffer As New String(CChar(" "), 301)
 Dim Retval As Long
 Dim k As Integer

Retval = GetModuleFileName(0&, wBuffer, 300) wBuffer = Strings.Left(wBuffer, Retval) k = Strings.InStrRev(wBuffer, "\") If k > 0 Then wBuffer = Strings.Left(wBuffer, k) & "Splash.bmp" SplashBitmap = New Bitmap(wBuffer) GraphicSplash = CreateGraphics() End If End Sub

Dans ce petit bout de code nous mettons en oeuvre 2 objets, l'un de type "Bitmap", et l'autre de type "Graphics". Une petite manipulation sur le chemin retourné par "GetModuleFileName" permet de composer dynamiquement le chemin d'accès au fichier "Splash.bmp" (elle est pas belle la vie !).

Bon, maintenant il faut que notre image s'affiche dans le fond de Form2. Pour celà nous allons placer du code en réponse à l'événement "Paint" de Form2 :

Private Sub Form2_Paint(ByVal sender As Object, _ 
  ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint


 If Not GraphicSplash Is Nothing Then GraphicSplash.DrawImage(SplashBitmap, 1, 1)


End Sub

En analysant le code de Calpin vous découvrirez comment afficher Form2 (je ne vais pas tout faire tout de même, vous allez prendre de mauvaises habitudes ;) ).

Conclusion de cet article

Voilà, nous venons de faire le tour d'une grande partie du code de notre première application .NET pour Pocket PC. Comme vous pouvez le constater il n'y a rien de bien compliqué. Le code est à votre disposition en libre téléchargement en haut de cette page. Je vous invite à le consulter car je n'ai pas expliqué (entre autre) comment fermer par programme une fenêtre, alors que dans le code cette opération est effectuée.

Si quelqu'un veut traduire les sources de Calpin en C# qu'il me le fasse savoir, je me ferai un plaisir de mettre son code en téléchargement avec le mien.

J'espère que cet article vous aidera à mettre le pied dans VS.NET, Compact Framework et les SDE. N'oubliez pas qu'en cas de problème, ou si vous avez des questions, le forum .NET de CodePPC est à votre disposition.

Stéphane Sibué

 

 
   

Copyright 2001-2004 - Tous droits réservés
Toutes les autres marques et produits présents dans ces pages sont la propriété exclusive de leurs sociétés respectives.