Exporter (0) Imprimer
Développer tout
Ce sujet n'a pas encore été évalué - Évaluez ce sujet

Données à emporter

Larry Roof
Tonked.com

13 juin 2001

Ce mois-ci, la rubrique Deux pour la route nous emmène sur les plages ensoleillées de Californie du sud, où j'essaie de concilier surf et développement sur Pocket PC. J'avais d'abord réussi à atteindre un équilibre assez juste entre ces deux activités mais j'ai dû me consacrer exclusivement aux vagues le jour où j'ai découvert, ahuri, que les iPaqs ne flottent pas. Je sais, je sais, qui l'eût cru ? Pourquoi Compaq n'a-t-il pas signalé ce genre de problème dans le manuel utilisateur ?

C'est là que les moins névrosés d'entre vous (les développeurs qui ne codent des applications mobiles que parce que cette activité cadre avec leur mode de vie) doivent se demander "Mais qu'est-ce qui lui est passé par la tête pour emporter son iPaq sur sa planche de surf ?".D'accord, j'ai besoin d'aide. Je vous le concède. Donc maintenant tout ce qui me reste de ce parcours, c'est un superbe bronzage et un presse-papier très tendance mais dégoulinant d'eau de mer.

Bref, assez parlé de mes problèmes techniques, passons à la question des données mobiles. Contrairement à cette application mobile de texte déroulant incroyablement utile et absolument indispensable que je vous ai appris à construire le mois dernier, la plupart des applications Pocket PC que vous construirez finiront tôt ou tard par avoir recours à des données.

Les options de données mobiles

Lorsque l'on développe des applications mobiles, tout est question d'options et de compromis à faire à leur sujet. Cela s'applique bien évidemment à l'intégration de données dans vos applications mobiles. Vous avez plusieurs possibilités de stockage de données :

  • Les fichiers séquentiels, à accès aléatoire et binaires : Ces méthodes testées et reconnues sont un moyen facile d'incorporer des données dans vos applications. L'avantage, c'est qu'elles peuvent être aussi simples ou aussi complexes que vous le souhaitez. Elles sont incroyablement performantes si elles sont bien utilisées. L'inconvénient, c'est qu'elles fonctionnent souvent au sein de solutions propriétaires difficilement incorporables dans un environnement d'entreprise.
  • Les bases de données Pocket Access : Ne vous méprenez pas sur le nom Pocket Access. Cette solution pour données mobiles est très inférieure à son équivalent pour ordinateur de bureau, Microsoft Access, bien plus puissant. Pocket Access manque de formulaires, de rapports, de requêtes stockées et de relations entre tables. Plus simplement, il propose le stockage et l'accès à un ensemble de tables. Il est également compatible avec Microsoft Access, prend en charge la synchronisation des données, des outils simples pour déplacer les tables vers et depuis un périphérique et peut être attaqué avec ADOCE, la version mobile de ActiveX® Data Objects (davantage de détails plus bas).
    Remarque : Les tables Pocket Access portent l'extension .cdf .
  • SQL Server 2000 Windows CE Edition : Si vous cherchez la base de données la plus robuste, la plus fournie en fonctionnalités, ne cherchez plus. C'est SQL Server CE qu'il vous faut. Elle propose une base de données relationnelle avec un petit footprint qui inclut un processeur de requête et des capacités de réplication de fusion. Comme avec Pocket Access, vous pouvez travailler avec les bases de données SQL Server CE en utilisant ADOCE. En fait, pour faire passer une application mobile de Pocket Access à SQL Server CE, les modifications à apporter au code sont en général assez réduites.
    Remarque : Les bases de données SQL Server CE portent l'extension .sdf .

SQL Server CE convient tout particulièrement aux applications qui sont conçues pour interagir avec des bases de données SQL Server basées en entreprises. S'il offre de meilleures performances, il ne prend pas en charge le pourtant simple ActiveSync® ni les API ADOCE comme comme c'est le cas avec Pocket Access.

En quoi consiste ADOCE ?

Les bases de données Pocket Access et SQL Server CE sont accessibles depuis vos applications mobile grâce à ADOCE. ADOCE propose une partie des fonctionnalités ADO. Il possède son propre fournisseur de bases de données qui vous permet de travailler avec des bases de données stockées en local sur votre Pocket PC. ADOCE peut également être utilisé pour accéder à des sources de données via un fournisseur OLEDB.

Le principal avantage d'ADOCE, c'est que vous pouvez utiliser vos techniques de codage ADO de bureau pour développer des applications mobiles. Pour davantage de détails sur les fonctionnalités que ADOCE prend en charge, consultez l'aide fournie avec eMbedded Visual Basic® (eVB).

L'application du mois : Mobile Sales

J'ai réalisé lorsque j'ai démarré cet article que l'application du mois dernier, le texte déroulant Hello World, d'une qualité marchande indéniable, serait difficile à suivre. J'ai décidé qu'il fallait accélérer quelque peu le mouvement avec l'application de ce mois : Mobile Sales. Si elle ne semble pas aussi séduisante que le texte déroulant Hello World, elle montre néanmoins comment accroître la puissance d'ADOCE pour qu'il incorpore dans une solution mobile des données stockées dans une base de données Pocket Access.

Mobile Sales montre combien il est facile d'utiliser un Pocket PC pour automatiser un processus de livraison. Avec Mobile Sales, un livreur peut rapidement remplir des commandes pour chaque arrêt effectué. Au fil du stockage des articles, il lui suffit de sélectionner le type et la quantité d'articles à ajouter à la commande. Ces données sont stockées dans une table sur le Pocket PC, puis sont ensuite récupérées à partir du périphérique dès son retour à la station d'accueil.

Mobile Sales est constituée de deux composants :

  • L'application bureau de livraison
  • L'application mobile d'entrée

Je vais vous décrire pas à pas ces deux applications afin qu'une fois que nous aurons terminé, vous compreniez parfaitement le processus complet de distribution, d'utilisation et de rassemblement des données générées par une application mobile.

La base de données de Mobile Sales

La base de données de Microsoft Access utilisée avec Mobile Sales est composée de quatre tables :

  • Customers : La table Customers sert exclusivement à peupler une liste déroulante dans l'application du périphérique. Cette table est en lecture seule sur le périphérique.
  • Products : La table Products est utilisée pour peupler une liste déroulante dans l'application du périphérique. C'est également la source des informations de prix pour chaque produit. Cette table est en lecture seule sur le périphérique.
  • Route : La table Route contient la liste des clients chez qui le livreur doit se rendre dans la journée. Cette table doit être générée chaque jour avec un nouveau groupe de clients. Cette table est en lecture seule sur le périphérique.
  • Orders : La table Orders sert à stocker les informations relatives aux commandes au fur et à mesure qu'elles sont entrées dans les champs. Sa conception est très simple : chaque enregistrement dans la table représente un article commandé par un client.

Mobile Sales - Composant Bureau

dl Téléchargez le code exemple de cette section Site en anglais.

Le composant Bureau de Mobile Sales se charge de fournir la base de données au périphérique puis de récupérer la table Orders sur le périphérique. Comme le montre la figure ci-dessous, son interface est terriblement simpliste.

Fig. 1
Figure 1. Mobile Sales - Interface Bureau

Le composant Bureau de Mobile Sales utilise l'API ADOCE pour réaliser ces transferts. ADOCE propose une méthode programmée pour transférer les tables depuis et vers un périphérique. L'API d'ADOCE est incroyablement simple. Elle ne contient que deux fonctions, DESKTOPTODEVICE et DEVICETODESKTOP.

DESKTOPTODEVICE sert à copier des tables à partir d'une base de donnée de bureau Microsoft Access vers une base de données périphérique Pocket Access. La syntaxe de cette fonction est la suivante :

DESKTOPTODEVICE(DesktopLocn, TableList, Sync, Overwrite, DeviceLocn)

où :



DesktopLocn
 est le chemin et le nom de fichier de la base
de données Access qui contient les tables à transférer. 
Pour cette valeur, vous pouvez aussi utiliser un DSN.


TableList
 est la liste des tables et des champs que vous voulez copier. 
La forme de cet argument est la suivante :

[!]table name.field name..

Le ! situé en tête sert à spécifier qu'une table est en lecture seule.


Sync
 définit si ActiveSync doit synchroniser 
les bases de données du bureau et du périphérique.


Overwrite
 indique s'il faut écraser des tables existantes.


DeviceLocn
 est le chemin et le nom de fichier de la 
base de données Pocket Access sur le périphérique.

DEVICETODESKTOP : Cette fonction sert à copier des tables depuis une base de données périphérique Pocket Access vers une base de données bureau Microsoft Access. La syntaxe de cette fonction est la suivante :

DEVICETODESKTOP(DesktopLocn, TableList, Sync, Overwrite, DeviceLocn)

Les arguments de la fonction DEVICETODESKTOP sont identiques à ceux utilisés avec la fonction DESKTOPTODEVICE.

Téléchargement des données de Mobile Sales

Avant d'utiliser la fonction DESKTOPTODEVICE, vous devez la déclarer dans la section General Declarations du module formulaire du composant Bureau de Mobile Sales comme indiqué ci-dessous.

Private Declare Function DESKTOPTODEVICE Lib _
 "c:\Program Files\Microsoft ActiveSync\adofiltr.dll" _
 (ByVal desktoplocn As String, _
 ByVal tablelist As String, _
 ByVal sync As Boolean, _
 ByVal overwrite As Integer, _
 ByVal devicelocn As String) As Long

Le code suivant est ensuite utilisé pour copier les quatre tables depuis la base de données bureau Microsoft Access vers la base de données Pocket Access :

lResult = DESKTOPTODEVICE(App.Path & "\Mobile Sales.mdb", _
 "!Customers..!Products..!Route..Orders..", False, True, _
 "\tonked\Mobile Sales\Mobile Sales.cdb")

Remarque :    Ce code est situé dans l'événement clic mnuFunctionsDownload de l'exemple.

Les tables Customers, Products, Route et Orders sont alors copiées vers le périphérique. Trois d'entre elles, Customers, Products et Route, sont en lecture seule, comme l'indique le "!" situé devant leur nom. Toutes les tables existantes sont écrasées pendant cette opération.

Téléchargement des données de la table Orders

Avant d'utiliser la fonction DEVICETODESKTOP, vous devez également la déclarer dans la section General Declarations du module formulaire du composant Bureau de Mobile Sales.

Private Declare Function DEVICETODESKTOP Lib _
 "c:\program files\Microsoft ActiveSync\adofiltr.dll" _
 (ByVal desktoplocn As String, _
 ByVal tablelist As String, _
 ByVal sync As Boolean, _
 ByVal overwrite As Integer, _
 ByVal devicelocn As String) As Long

Le code suivant est ensuite utilisé pour copier la table Orders depuis la base de données périphérique de Pocket Access vers la base de données bureau Microsoft Access :

lResult = DEVICETODESKTOP(App.Path & "\Mobile Sales.mdb", _
 "Orders..", False, True, "\tonked\Mobile Sales\Mobile Sales.cdb")

Remarque :    Ce code est situé dans l'événement clic mnuFunctionsUpload de l'exemple.

Présentation du composant Bureau

Ce composant prouve combien il est facile de déplacer des données depuis et vers un périphérique. L'API d'ADOCE vous permet de transférer facilement les tables Microsoft Access.

Remarque :    Vous pouvez utiliser le rapport sur les commandes du jour (Today's Orders) de la base de données Microsoft Access fournie avec les exemples pour générer un rapport de commandes (voir ci-dessous).

Fig.
Figure 2. Rapport sur les commandes

Avant de lancer le rapport, vous devez suivre les étapes suivantes :

  1. À l'aide du composant Bureau de Mobile Sales, téléchargez la base de données vers votre périphérique.
  2. Lancez le composant Périphérique de Mobile Sales et traitez quelques commandes client.
  3. À l'aide du composant Bureau de Mobile Sales, téléchargez la table Orders depuis votre périphérique.
  4. À partir de Microsoft Access, lancez le rapport Today's Orders.

Mobile Sales - Composant Périphérique

dl Téléchargez le code exemple de cette section Site en anglais.

Le composant Périphérique de Mobile Sales prouve combien il est facile de créer une application mobile d'entrée de données. Son interface est présentée dans la figure ci-dessous.

Fig.
Figure 3. Mobile Sales - Interface Périphérique

En haut de l'interface Périphérique de Mobile Sales, vous trouverez une liste déroulante affichant les clients chez lesquels le livreur doit se rendre dans la journée. Cette liste déroulante est chargée à partir de la table Route.

Juste en dessous se trouve une deuxième liste déroulante qui contient la liste des produits que transporte le livreur. Ces informations sont chargées à partir de la table Products.

Ensuite, vous trouverez deux contrôles, une zone de texte et une barre de défilement horizontale. Ces contrôles doivent être utilisés en association pour faciliter l'entrée des données.

Remarque :    Ma règle numéro 1 est de faire en sorte que les utilisateurs n'utilisent pas le SIP dans la mesure du possible. Ils seront tellement contents qu'ils vous enverront des cartes de vœux tous les ans et pour le reste de votre vie.

Les deux boutons de commande vous permettent d'entrer et de supprimer des articles dans une commande.

En dessous, vous apercevez un contrôle ListView, qui sert à conserver une commande client. Je préfère ce contrôle à la grille parce qu'il propose une interface plus flexible et plus utile.

Enfin, au bas de l'interface se trouve la barre de menus.

Le code derrière le composant Périphérique de Mobile Sales

La première chose que vous devez faire lorsque vous travaillez avec ADOCE, c'est d'ajouter une référence à Microsoft CE ADO Control dans votre projet. Pour ajouter cette référence :

  1. Dans le menu Project sélectionnez References
  2. Dans la boîte de dialogue References, sélectionnez Microsoft CE ADO Control 3.0

Fig.
Figure 4. Boîte de dialogue Reference

Remarque :    Si SQL Server CE est installé sur la machine dont vous vous servez pour vos développements, vous découvrirez peut-être que vous avez deux versions de Microsoft CE ADO Control, c'est-à-dire les versions 3.0 et 3.1 (voir figure ci-dessus). Lorsque vous travaillez avec SQL Server CE, assurez-vous que vous sélectionnez la version 3.1. Ces deux versions du contrôle ADOCE peuvent être utilisées avec Pocket Access.

L'événement de chargement du formulaire

Cela fait, je suis prêt à commencer à travailler avec nos données. Dans l'événement de chargement de formulaire (Form Load), je peux établir une connection vers la base de données.

' Établir une connection vers la base de données.
 Set cnMobileSales = CreateObject("ADOCE.connection.3.0")
 cnMobileSales.Open "data source=" & App.Path & "\Mobile Sales.cdb"

L'objet de connection ADOCE fournit une collection d'erreurs qui peut être interrogée pour déterminer le succès ou l'échec de toutes les opérations ADOCE.

' La connection a-t-elle été établie ?
 If cnMobileSales.Errors.Count > 0 Then
 MsgBox "Error connecting to database." & vbCrLf & _
 "Error " & Err.Number & vbCrLf & _
 Err.Description, _
 vbCritical, "Open Database"
 Set cnMobileSales = Nothing
 On Error GoTo 0
 App.End
 End If

Ensuite, je charge les contrôles listes déroulantes Customer et Product. Pour mener à bien l'opération de chargement, j'appelle la routine LoadComboBox.

' Chargement des informations sur les clients et sur les produits.
 LoadComboBox cmbCustomers, "Customers", "CustomerID", _
 "CustomerName", True
 LoadComboBox cmbProducts, "Products", "ProductID", _
 "Description", False

La routine LoadComboBox

Cette routine nous donne un premier aperçu du travail avec des données stockées dans une table Pocket Access. La routine LoadComboBox peut être divisée en deux parties. En haut, je crée un jeu d'enregistrements à l'aide d'une simple instruction SQL SELECT. La table que je récupérerai sera transmise sous forme d'argument à la routine LoadComboBox.

' Créer un jeu d'enregistrement de toutes les informations.
 strSQL = "SELECT * FROM " & strTableName
 Set rsTable = CreateObject("ADOCE.Recordset.3.0")
 rsTable.Open strSQL, cnMobileSales, adOpenDynamic, _
 adLockOptimistic
 If (Err.Number) Then
 MsgBox "Error retreiving " & strTableName & _
 " information. ", vbCritical, "Fill ComboBox"
 On Error GoTo 0
 Exit Sub
 End If

Pour charger la liste déroulante spécifiée, il suffit d'itérer dans le jeu d'enregistrement ainsi créé, enregistrement par enregistrement. Le champ ajouté à la liste déroulante est transmis à la routine LoadComboBox sous forme d'argument. L'ID unique de chaque article est à son tour stocké dans la propriété ItemData. Cela permet de retrouver rapidement un champ bien précis ultérieurement dans l'application. Le champ contenant l'ID est également transmis à cette routine sous forme d'argument.

Remarquez que dans le code ci-dessous, la méthode de jeu d'enregistrements MoveNext est utilisée pour naviguer parmi les enregistrements. L'objet de jeu d'enregistrement ADOCE prend en charge les méthodes MoveNext, MovePrevious, MoveFirst et MoveLast, ainsi que les propriétés BOF et EOF. Vous pouvez continuer à les utiliser exactement comme vous le faites avec vos applications de bureau.

' Placer les informations dans la liste déroulante.
 Do While Not (rsTable.EOF)

' Placer un nom dans la liste déroulante.
 cmbObject.AddItem rsTable(strNameColumn).Value

' Placer le numéro d'identification dans l'élément itemdata 
' pour le nom qui vient d'être ajouté.
 cmbObject.ItemData(cmbObject.NewIndex) = _
 CLng(rsTable(strIDColumn).Value)

' Essayer de passer à l'enregistrement suivant.
 rsTable.MoveNext
 Loop

L'événement clic d'ajout d'un article (Add Item)

La procédure de l'événement clic pour le bouton cmdAdd contient notre exemple suivant de travail avec ADOCE. Dans cette routine, on ajoute d'abord un produit au contrôle ListView, puis on appelle la routine GetProductInfo, qui récupère les informations du produit en question dans la base de données Pocket Access. Ces informations sont ensuite chargées dans le contrôle ListView.

' Ajouter l'article en cours à la liste.
 Set objDetails = lvwOrder.ListItems.Add(, , _
 cmbProducts.List(cmbProducts.ListIndex))

' Aller chercher les informations sur le produit en question puis
' ajouter ces informations dans la ligne en cours (celle qui vient
' d'être ajoutée).
 GetProductInfo cmbProducts.ItemData(cmbProducts.ListIndex), _
 curProductCost
 objDetails.SubItems(1) = curProductCost
 objDetails.SubItems(2) = txtQuantity.Text
 objDetails.SubItems(3) = cmbProducts.ItemData(cmbProducts.ListIndex)

La routine GetProductInfo

La routine GetProductInfo utilise ADOCE pour récupérer les informations relatives à un produit donné dans la base de données Pocket Access. Elle utilise une instruction SQL SELECT avec l'ID du produit qui est passé à la routine sous forme d'argument. GetProductInfo renvoie le prix du produit demandé à la routine ayant lancé l'appel.

' Trouver l'enregistrement du produit spécifié.
 strSQL = "SELECT Cost FROM Products " & _
 "WHERE ProductID = " & lngProductID
 Set rsProduct = cnMobileSales.Execute(strSQL)

' Vérifier s'il y a eu une erreur.
 If (Err.Number <> 0) Then
 MsgBox "An error was encountered while attempting" & _
 " to retrieve the product info." & vbCrLf & _
 "Error #" & Err.Number & ", " & _
 Err.Description, vbCritical, "Database Error"
 curProductCost = 0
 Else
 curProductCost = rsProduct.Fields("Cost")
 End If

La routine SaveOrder

Jusqu'ici, je me suis intéressé principalement à la récupération des données depuis une base de données Pocket Access. Mais vous voudrez certainement, à un moment ou à un autre, enregistrer des données. C'est l'objectif de la routine SaveOrder.

La routine SaveOrder propose une méthode pour ajouter des enregistrements à une base de données à l'aide d'ADOCE. Elle utilise l'instruction SQL INSERT. Vous pouvez également utiliser la méthode AddNew de l'objet de jeu d'enregistrements.

' Stocker les différents articles de cette commande.
 For intCounter = 1 To lvwOrder.ListItems.Count

' Placer les informations dans la base de données.
 strSQL = "INSERT INTO Orders (CustomerID, ProductID," & _
 " Quantity) VALUES (" & _
 cmbCustomers.ItemData(cmbCustomers.ListIndex) & ", " & _
 lvwOrder.ListItems(intCounter).SubItems(3) & ", " & _
 lvwOrder.ListItems(intCounter).SubItems(2) & ")"
 cnMobileSales.Execute strSQL

' Vérifier si une erreur s'est produite.
 If (Err.Number <> 0) Then
 For intErrors = 1 To cnMobileSales.Errors.Count
 MsgBox cnMobileSales.Errors(intErrors).Number & _
 " - " & _
 cnMobileSales.Errors(intErrors).Description, _
 vbCritical, _
 "Save Order"
 Next intErrors
 Err.Clear
 On Error GoTo 0
 Exit Sub
 End If
 Next intCounter

Vous devriez maintenant réaliser que la méthode de travail avec ADOCE est, dans bien des cas, identique à celle de ADO. Vous pouvez réutiliser dans vos applications mobiles créées à l'aide de eVB le code et les techniques de codage que vous avez appliqués dans dans vos applications de bureau Visual Basic®.

Comment travailler avec SQL Server CE

Vous vous demandez peut-être ce qu'il faut faire pour utiliser SQL Server CE à la place de Pocket Access pour stocker les données Mobile Sales. La réponse est : pas grand chose. Tout d'abord, vous devez référencer la version 3.1 de Microsoft CE ADO Control. Ensuite, modifiez simplement les informations de connection fournies dans l'événement de chargement du formulaire.

Set cnMobileSales = CreateObject("ADOCE.connection.3.1")
cnMobileSales.Open "Provider=Microsoft.SQLSERVER.OLEDB.CE.1.0; " & _
 " data source=" & App.Path & "\Mobile Sales.sdf"

Tout le reste peut être utilisé tel quel. Cela fait partie de la magie d'ADOCE : il vous permet de passer facilement d'une base de données Pocket Access à une base de données SQL Server CE sans que cela n'ait quasiment aucun impact sur votre code. Au fil de la croissance de votre application et de l'évolution de vos besoins, vous pouvez convertir rapidement vos applications mobiles d'une base de données en une autre.

Mobile Sales - Résumé

Voilà ! Vous savez tout : comment développer facilement des applications d'accès aux données en utilisant eVB et ADOCE. Évidemment, vous voudrez en savoir plus au sujet d'ADOCE. Vous pouvez prendre le temps de parcourir la documentation ADOCE fournie avec eVB ainsi que les informations complémentaires fournies avec SQL Server CE. Ces informations sont disponibles dans le menu d'aide de l'environnement de développement eVB.

ADOCE n'est pas exclusivement réservé aux développeurs eVB. Il est possible de l'utiliser avec eMbedded Visual C++®, bien qu'il faille avouer qu'il ne permettra pas un accès plus rapide aux données. À moins que vous autres, fanatiques du eVC++, ne preniez votre courage à deux mains et ne réécriviez les DLL d'ADOCE, juste pour "émoustiller un peu leurs performances".

Remarque :    Ne manquez pas de découvrir les autres facettes de l'application Mobile Sales que je n'ai pas présentées ici. Les sections qui ne s'intéressent pas à ADOCE donnent des exemples pour configurer la barre de menus avec à la fois un menu et un bouton et pour mettre en forme le contrôle ListView.

Astuces pour la route

dl Téléchargez le code exemple de cette section Site en anglais.

Il y a de cela quelques semaines, j'étais à Washington pour présenter un cours sur le développement d'applications à l'aide de eVB. Alors que nous parlions à bâtons rompus de eVB pendant le cours, Linda, l'une des étudiantes, a posé une question sur un point que nous n'allions pas aborder. Elle voulait savoir comment faire pour créer une liste à laquelle l'utilisateur pourrait accéder pour passer une nouvelle commande en utilisant la méthode du glisser-déplacer. La requête de Linda était suffisamment intrigante pour que je m'attaque à nouveau à eVB alors que la classe travaillait sur un nouvel atelier et créait ce que j'ai fini par appeler PLOT (Pocket List Ordering Thingy).

Fig. 5
Figure 5. PLOT

Je sais ce que vous pensez : "Roof, pourquoi est-ce que tu révèles ces applications à qui veut l'entendre alors que tu pourrais les vendre comme des petits pains ?". C'est pour mieux vous appâter, très chers, et pour vous vendre par la suite Hello World Marquee Pro et PLOT Édition spéciale. Maintenant que je vous ai révélé qu'il s'agit là d'un odieux complot, vous rigolez moins, n'est-ce pas ? Croyiez-vous vraiment que l'acronyme PLOT (complot en anglais) ait été choisi au hasard ?

Mais je m'égare... Revenons-en à l'application. L'interface de PLOT est très simple. Elle contient une seule zone de texte qui sert à entrer les nouveaux articles, deux boutons de commande et une zone de liste.

Le code qui exécute la formule magique de mon glisser-déplacer est basé sur deux procédures d'événements. Le premier est l'événement Souris appuyée sur la zone de liste. C'est là que j'enregistre l'article que l'utilisateur a sélectionné au départ. Ce n'est qu'à ce moment-là que je l'enregistre car cet article sera susceptible de changer lorsque l'utilisateur déplacera le stylet le long de la liste.

' Enregistrer l'article que l'utilisateur souhaite déplacer.
 iStartingItem = lstItems.ListIndex

La seconde procédure d'événement est l'événement Souris relâchée sur la zone de liste. C'est là que se produit le tour de passe-passe. Je commence par enregistrer la position actuelle du stylet. C'est là que je veux que se situe l'article sélectionnée quand j'aurai terminé.

' Enregistrer notre position actuelle.
 iEndingItem = lstItems.ListIndex

Ensuite, je vérifie que l'emplacement duquel je pars est différent de celui vers lequel je vais (inutile de réaliser un déplacement pour aboutir là où vous avez démarré). Si ces deux emplacements sont effectivement différents, j'enregistre l'article de départ, je le supprime de son emplacement de départ et je l'insère à l'emplacement final souhaité.


' Vérifier que quelque chose a effectivement été déplacé. Si c'est le cas,
' procéder à la nouvelle commande.
 If (iStartingItem <> lstItems.ListIndex) Then
 sTemp = lstItems.List(iStartingItem)
 lstItems.RemoveItem (iStartingItem)
 lstItems.AddItem sTemp, iEndingItem
 lstItems.ListIndex = -1
 End If

Ça y est ! Vous avez maintenant votre méthode de renouvellement de commande par glisser-déplacer dans une liste.

De nouveau en route

C'est tout pour ce mois-ci. Je veux que vous vous lanciez dans la création d'époustouflantes applications d'accès aux données avec eVB et ADOCE. Faites-moi part de vos résultats sur lroof@tonked.com. Il est temps pour moi de remballer ma planche de surf et mon iPaq dégoulinant et de mettre le cap à l'Est. Atlanta est ma prochaine escale pour la conférence Microsoft Tech-Ed. J'interviendrai sur le développement d'applications pour Pocket PC, notamment comment utiliser eVC++ pour créer un wrapper d'API DLL. Vraiment, je vous assure que lorsque vous tombez sur un de ces boulots de codage payés à l'heure, c'est eVC++ qu'il vous faut. Passez me voir si vous êtes à Atlanta. En attendant, je me remets en route.

 

Deux pour la route

Le jour, John Kennedy est rédacteur technique et programmeur dans le groupe Visual C++. La nuit, sa double vie l'amène à développer pour Pocket PC.

Larry Roof est un partenaire chez tonked Lien non Microsoft Site en anglais, entreprise spécialisée dans le développement de solutions mobiles et dans la formation. Il est l'auteur de Professional Visual Basic Windows CE disponible chez Wrox Press.



Dernière mise à jour le lundi 27 août 2001



Cela vous a-t-il été utile ?
(1500 caractères restants)
Merci pour vos suggestions.
Afficher:
© 2014 Microsoft. Tous droits réservés.