pictogram Auteur : Patrick Biker
Date : 3 décembre 2005
Version : 1.0
Révision : aucune

Au menu : WinDev WLangage .NET et C#

Un rapport d'expérience sans jugement de valeur

La situation de départ est la suivante : Ayant réalisé un petit utilitaire avec WinDev, mon outil de développement habituel, j'ai entrepris de recréer le même programme avec C# que je ne connaissais pas du tout.

Au final, je dispose maintenant de deux versions du même programme.

 Le programme WinDev générateur de couleurs Web-safe   Le programme C# générateur de couleurs Web-safe

Les outils

Pour réaliser la version WinDev je disposais de WinDev 9, de plusieurs années d'expérience avec cet outil, d'une aide complète et assez bien faite, d'un support technique gratuit et d'un forum développeur composé de professionnels compétents. La réalisation du programme a demandé environ une heure.

Pour réaliser la version C# je disposais de l'environnement de développement SharpDevelop, du SDK .NET et du runtime .NET 1.1 (tous gratuits) et de Google. La réalisation du programme a demandé environ quatre heures.

SharpDevelop environnement de développement gratuit pour C#

La version WinDev

Le programme utilise 3 sélecteurs (type bouton radio) pour choisir la quantité de rouge, de vert et de bleu. Chaque sélecteur dispose de 6 options avec les libellés "FF", "CC", ... "00". C'est à partir de ce libellé que l'on calculera la couleur à chaque modification du sélecteur.

Tous les sélecteurs réalisent le même traitement, qui est appelé dans le code "A chaque modification". C'est de cette manière que WinDev fonctionne. Chaque élément de l'interface dispose de codes pré-définis. Pour un bouton, il existe ainsi le code "Clic sur le bouton".

Procédure ChangeCouleur

Le code "A chaque modification" de chaque sélecteur appelle la procédure ChangeCouleur qui nous allons détailler ici. Cette procédure utilise elle-même une autre procédure, HexaVersEntier. Le code de cette dernière est fourni avec WinDev comme des centaines d'autres codes directement utilisables.

PROCEDURE ChangeCouleur()
nCouleur est un entier
composanteRouge est un entier
composanteVerte est un entier
composanteBleu est un entier
sCSScolor est une chaîne
// Récupération du libellé sélectionné pour chaque sélecteur
// HexaVersEntier convertit le libellé en nombre
// 
composanteRouge = HexaVersEntier(Rselect[Rselect]..Libellé)
composanteVerte = HexaVersEntier(Gselect[Gselect]..Libellé)
composanteBleu = HexaVersEntier(Bselect[Bselect]..Libellé)
//
// Contruction du texte avec la 1ère lettre de chaque libellé
//
sCSScolor = "#"+Rselect[Rselect]..Libellé[[1 A 1]]+ ...
            Gselect[Gselect]..Libellé[[1 A 1]]+...
            Bselect[Bselect]..Libellé[[1 A 1]]+";"
sCSScolor = Minuscule(sCSScolor)
//
// La couleur est utilisée pour remplir un champ image
dDébutDessin(Image1)
dRemplissage(5, 5, RGB(composanteRouge,composanteVerte,composanteBleu))
//
// Le texte est dessiné sur l'image
dTexte(50,50,sCSScolor, RGB(255-composanteRouge, 
255-composanteVerte, 255-composanteBleu))
// Enfin le texte est transféré dans le presse-papier
VersPressePapier(sCSScolor)

La version C#

Le programme utilise 18 sélecteurs (RadioButton) et 3 supports de sélecteurs (GroupBox). Le fonctionnement des sélecteurs est assez différent de celui de WinDev. Le sélecteur n'a qu'une seule option. Evidemment un sélecteur avec une seule option ne sert à rien, mais si on pose un 2ème sélecteur dans la fenêtre. Il va se connecter automatique au premier. En exécution, on constate alors que sélectionner le premier désélectionne le second et réciproquement. Si on rajoute un 3ème sélecteur, c'est pareil.

En fait tous les sélecteurs qui ont le même parent, ici la fenêtre, se connectent entre eux pour former l'équivalent d'un sélecteur au sens WinDev.

Ici nous avions besoin de 3 sélecteurs pour le rouge, le vert et le bleu. Les sélecteurs ont donc été regroupés 6 par 6 sur un support (GroupBox). Un support est implement une surface qui va jouer le rôle de parent pour le sélecteur.

Chaque support (GroupBox) posséde un libellé. Nous avons utilisé pour libellé "R", "V" et "B" pour rouge, vert, bleu. Ce libellé (propriété .Text) est important car il permettra de connaitre la couleur associée.

Le même code est utilisé pour tous les sélecteurs. C'est la procédure rClick. C'est une procédure de gestion d'événement. Pour associer chaque sélecteur à cette procédure, il a fallu écrire le code suivant 18 fois.

radioButton1.Click += new System.EventHandler(rClick);
radioButton2.Click += new System.EventHandler(rClick);
radioButton3.Click += new System.EventHandler(rClick);
...
radioButton17.Click += new System.EventHandler(rClick);
radioButton18.Click += new System.EventHandler(rClick);

Tous le reste se passe dans la procédure rClick qui est détaillée ici.

La procédure rClick

Cette procédure utilise les variables globales composanteRouge, composanteVerte et composanteBleu. Elle reçoit en paramètre un objet et un événement. Cette procédure utilise elle-même une autre procédure GetNumberFromNotation qui joue le même rôle que la procédure HexaVersEntier dans WinDev. Le code de cette procédure a été récupéré sur un site après une recherche avec Google.

private void rClick(object sender, System.EventArgs e)
{
// définition d'un objet RadioButton
RadioButton rdb;
rdb = (RadioButton)sender;
// choix de la composante à modifier
// grâce au libellé du GroupBox parent
switch (rdb.Parent.Text) {
case "R":
    composanteRouge = rdb.Text[1].ToString();
    break;
case "G":
    composanteVerte = rdb.Text[1].ToString();
    break;
case "B":
    composanteBleu = rdb.Text[1].ToString();
    break;
}
// Le texte de la couleur
couleurNom = "#"+composanteRouge+composanteVerte+composanteBleu + ";" ;
// Le texte de la couleur est affecté à un libellé
// placé sur l'image
ColorName.Text = couleurNom;
// Il est envoyé dans le presse-papier
Clipboard.SetDataObject(couleurNom.ToLower());
// la couleur du texte du libellé
// elle est inversée pour être toujours visible
ColorName.ForeColor = Color.FromArgb(255 - 
    GetNumberFromNotation(composanteRouge[0]), 
    255 - GetNumberFromNotation(composanteVerte[0]),
    255 - GetNumberFromNotation(composanteBleu[0]));
// la couleur de fond du libellé
ColorName.BackColor = Color.FromArgb(
    GetNumberFromNotation(composanteRouge[0]),
    GetNumberFromNotation(composanteVerte[0]),
    GetNumberFromNotation(composanteBleu[0]));
// la couleur de fond de l'image (la même)
pictureBox1.BackColor = ColorName.BackColor;
}

Le bilan

Cette expérience a été très enrichissante pour moi. Elle m'a prouvé que je n'étais pas encore trop "rouillé". Voici mes conclusions.

Le prix

Au rythme actuel des mises à jour (tous les ans) WinDev coûte 400 euros par an. C'est peut-être cher pour un étudiant, mais c'est un coût ridicule pour un professionel.

L'interface utilisateur

Le programme est quasiment identique dans les 2 versions. Je pense que WinDev a un avantage en matière de look, même si ce n'est pas très visible sur cet exemple. Par exemple, dans la version C# chaque sélecteur est représenté par un petit cercle. J'ai cherché vainement à remplacer ce cercle par un carré comme dans WinDev, mais j'ai du renoncer après de longues recherches infructueuses.

La documentation

Ce qui m'a fasciné avec C#, c'est la facilité pour trouver un exemple avec Google. Tapez "C# clipboard" sous Google et vous trouverez l'exemple de code dans les premiers résultats.

Le langage de programmation

C# est plus puissant notamment sur les gestions des collections et de énumérations. Il est plus cohérent.

Le WLangage est plus simple et plus lisible. Il faudrait lui ajouter comme en C# ou en Javascript la possibilité de passer des fonctions en paramètres et de retourner des tableaux de valeurs (comme le split de Javascript).

Le verdict

Je garde WinDev ! Mais pour un étudiant au budget limité mais disposant d'une connexion internet haut-débit, C# est certainement un bon choix.

Faites-vous votre propre opinion

 Couverture du livre

Vous souhaitez vous forger votre propre opinion, je vous conseille cet ouvrage en français (c'est rare et ce n'est pas une traduction) : Pratique de .NET et C# de Patrick Smacchia, ISBN : 2841772454.

Le site de l'auteur, Patrick Smacchia

Les sources et les exécutables

Les sources en WLangage et en C# sont disponibles en téléchargement, ainsi que les exécutables.

Le programme WinDev : SafeColor

Les sources (projet WinDev SafeColor)

Le programme C# .NET : WebColor

Les sources C#