Affichage des articles dont le libellé est développement. Afficher tous les articles
Affichage des articles dont le libellé est développement. Afficher tous les articles

vendredi 2 avril 2010

Comment déployer une application avec clickonce sur un serveur Apache ?

Pour le déploiement d'applications au sein d'une entreprise la fonctionnalité de déploiement ClickOnce de Visual Studio se révéle à la fois pratique, rapide, et économique... à condition de disposer d'un serveur IIS.

Si votre intranet fonctionne sous Apache il est malgré tout très facile d'utiliser ClickOnce.

Pour cela ajouter une fichier .htaccess dans votre dossier de déploiement.

Ce fichier doit contenir les 3 lignes suivante :
AddType application/x-ms-application application
AddType application/x-ms-manifest manifest
AddType application/octet-stream deploy

jeudi 1 avril 2010

Comment ajouter dynamiquement des contrôles dans un formulaire ?

Il peut arriver que vous ne connaissiez pas à l'avance le nombre de contrôles dont vos utilisateurs auront besoin dans un formulaire.

C'est par exemple le cas lorsque vous devez présenter des informations tabulaire à vos utilisateurs, comme dans cet exemple :

Certes il existe un contrôle datagrid, mais son utilisation n'est pas toujours possible, ou peut se révéler très lourde.

Une solution consiste à ajouter dynamiquement des contrôles :

'On déclare une liste d'objets "TextBox"
Dim textBoxList As New List(Of TextBox)

Dim x As Integer

For x = 0 To 4
 'On ajoute une nouvelle TextBox dans la liste
 textBoxList.Add(New TextBox)

 'On dimentionne et positionne la TextBox qui vient d'être ajoutée
 With textBoxList.Item(textBoxList.Count - 1)
  .Height = 100
  .Width = 30
  .Location = New System.Drawing.Point(10, textBoxList.Count * 30)
 End With

 'Et on ajoute cette TextBox dans notre formulaire
 Controls.AddRange(New System.Windows.Forms.Control() {textBoxList(textBoxList.Count - 1)})
Next

Naturellement si comme dans l'image ci-dessus chaque ligne est composée de plusieurs contrôles, vous prendrez au préalable le soin de créer une classe chargée de gérer ces groupes de contrôles.

lundi 29 mars 2010

Comment utiliser Automation avec Excel et VB.NET ?

Préparatifs

Pour pouvoir piloter Excel, vous devez ajouter à votre projet une référence à Microsoft Excel Object Library (dans les composants COM) ou référencer directement les Primary Interop Assemblies (PIA) : Microsoft.Office.Interop.Excel.dll, Microsoft.VBE.Interop.dll, et Office.dll

Dans cet exemple j’utiliserai la seconde solution.

A propos des Primary Interop Assemblies

Bien que Microsoft recommande d’utiliser une version des PIA correspondant à la version d’Office installée conjointement avec votre application, j’ai constaté qu’il existe une bonne compatibilité ascendante entre ces assemblies. J’ai donc pris pour habitude d’utiliser une vieille version de ces PIA, celles de Office XP. Elles ont l’avantage de permettre à mes applicatifs de fonctionner sur toutes les versions d’Office de XP à 2007.

Vous pouvez télécharger ces assemblies sur le site de Microsoft :
http://www.microsoft.com/downloads/details.aspx?FamilyId=C41BD61E-3060-4F71-A6B4-01FEBA508E52&displaylang=en

Si vous préférez utiliser les PIA installées avec Office sur votre poste, souvenez vous simplement qu’elles ne fonctionneront pas si vos utilisateurs utilisent une version plus ancienne.

Les bases de l’automation Excel

Création et assignation de l’objet Excel

Dim XlApp As Microsoft.Office.Interop.Excel.Application = New Microsoft.Office.Interop.Excel.Application()



Création d’un classeur

Dim XLDestBook As Microsoft.Office.Interop.Excel.Workbook
XLDestBook = XlApp.Workbooks.Add


Ouverture d’un classeur existant

XLDestBook = XlApp.Workbooks.Open("c:\monfichier.xls")

Ajouter une feuille

Dim xlSheet As Microsoft.Office.Interop.Excel.Worksheet
xlSheet = XLDestBook.Worksheets.Add

Ajouter du texte dans une cellule

xlSheet.Cells(1, 2).value = "Test écriture dans cellule B1"

Ajouter une formule dans une cellule

xlSheet.Cells(1, 3).formula = "=1+5"

Les formules doivent être écrites dans la langue d’Excel. Si vos utilisateurs sont susceptibles d’utiliser des versions d’Excel dans différentes langues vous devrez donc traduire vos formules. Pour cela vous pouvez utiliser cette référence http://cherbe.free.fr/fonctions_XL.ZIP

Recommandations

Prenez l’habitude avant tout traitement d’automation de désactiver le rafraichissement d’écran d’Excel, et d’empêcher les saisies utilisateur. Les performances en seront largement améliorées, et cela évitera que vos utilisateurs ne viennent perturber le traitement.

Pour cela utilisez les lignes suivantes avant tout traitement :

XlApp.ScreenUpdating = False
XlApp.Interactive = False

Repassez ces paramètres à True lorsque vos traitements sont achevés, sinon Excel sera inutilisable.

Pour plus d’infos vous pouvez vous référer à la base de connaissance Microsoft : http://support.microsoft.com/kb/301982/fr


Attention à la langue

Si vous avez des utilisateurs utilisant une version anglaise de Windows, il y a de fortes chances pour que votre application plante avec un message : Error: 0x80028018 (-2147647512) - Description: Old Format or Invalid Type Library

Ce cas de figure se produit lorsque l’utilisateur a personnalisé les paramètres régionaux de Windows. C’est un cas que j’ai régulièrement rencontré avec les expatriés. Ils sélectionnent dans les paramètres régionaux leur pays de résidence, et modifient le séparateur décimal et l’unité monétaire pour les faire correspondre à ceux de leur pays d’origine.

La base de connaissance Microsoft vous donnera plus de détails sur ce problème : http://support.microsoft.com/?scid=kb%3Ben-us%3B320369&x=19&y=18

Pour le contourner, 2 solutions :
• Demander à vos utilisateurs de ne pas personnaliser les paramètres régionaux. Pas toujours possible.
• Avant toute opération d’automation Excel modifier la culture du système en « en-US », et surtout restaurer les paramètres utilisateurs lorsque vos traitements sont terminés.

La base de connaissance peut une nouvelle fois vous aider : http://support.microsoft.com/kb/914356/fr

Personnellement j’utilise le code suivant (dérivé des exemples MS) :

'Sauvegarde le réglage de culture
Dim oldCI As System.Globalization.CultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture

''' 
''' Modifie la culture en "en-US".
''' 
''' 
Sub ChangeCulture()
Dim LangueExcel As Integer 'code correspondant à la langue Excel
Dim RegionalString As String 'Equivalence entre la langue Excel et la culture système

LangueExcel = XlApp.LanguageSettings.LanguageID(Microsoft.Office.Core.MsoAppLanguageID.msoLanguageIDInstall) 'Récupére le code correspondant à la langue d'Excel
Select Case LangueExcel
Case 1033 : RegionalString = "en-US" 'Anglais USA
Case 1036 : RegionalString = "fr-FR" 'Français FRANCE
Case Else : RegionalString = "en-US" 'Anglais USA
End Select
System.Threading.Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo(RegionalString)
End Sub


''' 
''' Rétablit la culture d'origine du système
''' 
''' 
Sub RestoreCulture()
System.Threading.Thread.CurrentThread.CurrentCulture = oldCI
End Sub

mercredi 24 mars 2010

Comment utiliser la colorisation syntaxique de code sur Blogger ?

Si vous avez déjà tentés de publier du code source sur un blog, vous avez pu constater que les moteurs de blogs grand public ne proposent tout simplement pas cette option.

Alors vous me direz, avec un petit hébergement, et un CMS type Joomla l'ajout de cette fonction est très facile. Certes.

Si vous persistez à vouloir utiliser une plateforme de blog type Blogger, la solution est d'utiliser SyntaxHighlighter, le site Code 18 vous offre le mode d'emploi d'une parfaite intégration sur cette plateforme.

Avec ça plus de raisons pour ne pas partager un peu de code !

Comment parcourir du XML en Visual Basic 2005 ?

Jagadish Chaterjee propose un excellent tutorial (en anglais) sur l'utilisation et la transformation du XML en VB 2005.
Toujours utile si vos projets doivent être déployés sous le Framework.Net 2.0.

Et si au lieu de récupérer votre XML à partir d'un fichier, vous souhaitez utiliser le contenu d'une variable :

Dim rd As System.Xml.XmlReader = System.Xml.XmlReader.Create(New  System.IO.StringReader(maString))