I. Présentation de Delphi PRISM

Delphi Prism est la nouvelle plateforme qui permet de développer des applications .Net en Delphi.

De façon résumé, Delphi PRISM est

  • un compilateur Delphi (le langage Pascal Objet adapté pour les composants et le développement RAD)
  • qui génère des applications utilisant la plateforme Microsoft .Net (versions 1 à 3.5)
  • permettant de développer des applications PC (ne nécessitant pas Internet), ainsi que des applications Internet. Ces deux modes ont accès aux bases de données, ce qui est très généralement le besoin
  • l'environnement de développement est Visual Studio 2008 Shell

Du point de vue du développeur, nous allons présenter

  • une application Windows Forms
  • une application Asp.Net
  • nous en profiterons pour décrire le maniement élémentaire de l'IDE (Integrated Development Environment, soit l'environnement de développement)

L'environnement de développement est donc Visual Studio Shell, et est très similaire à l'environnement Delphi 2005 à 2009. Sa présentation générale est la suivante:

Image non disponible

où vous distinguerez sans difficulté

  1. le panneau pour la Forme et le Code Delphi
  2. la palette des composants
  3. l'Inspecteur d'Objets

II. Installation de Delphi Prism

L'installation est des plus classique. Pour utiliser Delphi PRIMS, il faut disposer

  • de la librairie .Net
  • de Visual Studio Shell
  • du compilateur "Oxygen" qui compile le langage Delphi pour générer des applications qui fonctionnent sous .Net
  • et optionnellement:

    • installe Mono si souhaite
    • installe des produits additionnels

      • dPack
      • aspect
      • Mac

En gros tout s'est très bien passé

  • comme nous avions la version "Electronic", nous avons utilisé l'adresse fournie par Codegear pour télécharger le lanceur
  • lancement du lanceur après décompression du .ZIP
  • même traitement pour Visual Studio Shell
  • il a fallu juste cliquer ici ou là pour accepter les accords de licence
  • enregistrement auprès de CodeGear

III. Application Windows Forms Delphi PRISM

III.A. Une application Windows locale

Nous retrouvons (avec plaisir) les applications Windows construites sur la plateforme Dot Net (qui, rappelons-le, avaient disparu avec Delphi 2007).

Pour créer notre application Windows Forms (WinForms pour les intimes):

  • lancez Delphi Prism par "Démarrer | Programs | Delphi Prism | Delphi Prism in Visual Studio 2008"
Image non disponible
  • la version Delphi Prism de Visual Studio Shell est chargée, et la page de démarrage affichée (Ed: la fenêtre a été rapetissée pour éviter le défilement écran dans votre Explorateur .HTML)
Image non disponible
  • démarrez un nouveau projet par "File | New | Project":
Image non disponible
  • un dialogue permettant de sélectionner le type de projet est présenté:
Image non disponible
  • sélectionnez "Delphi Prism | Windows | Windows Application" et cliquez "Ok"
  • au bout de quelques secondes, un projet WinForms vide est créé:
Image non disponible

III.B. Ajout d'un Button et d'un événement

Notre première application va afficher la fenêtre en rouge par un clic sur un Button.

Nous récupérons le Button de la Toolbox (== la Palette). Par défaut, la Toolbox est repliée sur la gauche de la fenêtre.

Pour visualiser la Toolbox

  • promenez la souris du côté de l'icône située à la marge gauche (la flèche rouge)
Image non disponible
  • pour fixer (pinning) cette fenêtre, cliquez la "punaise" située en haut à droite de la Toolbar
Image non disponible

Posons le Button et colorions la fenêtre en rouge:

  • sélectionnez l'onglet "common controls", sélectionnez le Button et posez-le sur la forme
  • cliquez deux fois sur le Button
  • la fenêtre de code est ouverte, et l'événement MainForm.button1_Click a été généré
  • tapez le code pour colorier la fenêtre en rouge:
Image non disponible

Compilons et exécutons:

  • sélectionnez soit l'icône "start debugging" (flèche rouge) ou "start without debugging" (la flèche verte)
Image non disponible
  • la fenêtre est affichée:
Image non disponible

Notez que:

  • comme pour Delphi, lorsque le projet s'exécute, l'IDE présente les panneaux utiles pour suivre l'exécution (apparition des panneaux "Auto" et "Call Stack", suppression de la Toolbox et Property Inspector)
  • nous avons fixé la Toolbox. Ceci n'est naturellement pas une obligation, et certains développeurs (en Delphi 2007 ou 2009) conservent des panneaux "mobiles" pour permettre une meilleure visibilité du code
  • la zone centrale ("documents" comporte actuellement 3 onglets. L'onglet "Start Page" peut être fermée sans grand préjudice en cliquant l'icône en haut à droite:

    Image non disponible

    Vous pourrez toujours la ré-ouvrir par "View | Other Window | Start page"

III.C. Ajout d'un dialogue

Le Solution Explorer contient un certain nombre de fichiers. Pour mieux comprendre leur organisation, ajoutons une seconde fenêtre que nous allons afficher de façon modale

Par conséquent :

  • cliquez la petite flèche de la seconde icône de la Toolbar "add new item", et sélectionnez le premier élément "new item" (ou clic droit sur "Solution Explorer | WindowsApplication1 | Add | New Item" ou encore "Project | Add New Item")
Image non disponible
  • le dialogue "New Item" est présenté
Image non disponible
  • cliquez "Windows Form"
  • une nouvelle forme est créée
Image non disponible
  • posez un composant sur Form1, par exemple une CheckBox
  • retournez sur la forme principale par "Solution Explorer | double click sur Main.Pas'
Image non disponible
  • posez un Button, créez son événement, et tapez le code qui ouvrira la forme de façon modale:
 
Sélectionnez

method MainForm.button2_Click(sender: System.Object; e: System.EventArgs);
  var l_form_1: Form1;
  begin
    l_form_1:= New Form1;
    if l_form_1.ShowDialog= System.Windows.Forms.DialogResult.Cancel
      then BackColor:= Color.Lime;
  end; // button2_Click

Notez que

  • nous avons ajouté une CheckBox sur Form1, car sinon le compilateur se plaignait de l'absence de FORM1.RESX

III.D. Les fichiers utilisés

En examinant le Solution Explorer, la structure devient plus claire

  • le fichier PROGRAM.PAS est le point d'entrée principal qui lance la fenêtre MAIN.
  • pour chaque fenêtre, il y a 3 fichiers:

    • xxx.PAS qui contient notre code
    • xxx.DESIGNER.PAS qui créé les composants
    • xxx.RESX un fichier qui contient les resources (icônes etc)
  • la fenêtre qui est lancée par le programme principal est appelée MAIN
  • les autres fenêtres sont appelées FORM1, FORM2 etc

Tous ces fichiers sont placés dans:

 
Sélectionnez

C:\Documents and Settings\ds\Mes documents\Visual Studio 2008\Projects\WindowsApplication1\WindowsApplication1

et voici le détail de ce répertoire (_data est un répertoire que nous avons ajouté pour nos bases de données DataSnap et Ado.Net, et qui n'a rien à voir avec cette application):

Image non disponible

III.E. Le code de MAIN.PAS

Le code de MAIN.PAS est le suivant:

 
Sélectionnez

namespace WindowsApplication1;
  interface
    uses
      System.Drawing,
      System.Collections,
      System.Collections.Generic,
      System.Linq,
      System.Windows.Forms,
      System.ComponentModel;

    type MainForm =
             partial class(System.Windows.Forms.Form)
               private
                 method button1_Click(sender: System.Object; e: System.EventArgs);
                 method button2_Click(sender: System.Object; e: System.EventArgs);
               protected
                 method Dispose(disposing: Boolean); override;
               public
                 constructor;
             end; // MainForm

  implementation

    constructor MainForm;
      begin
        InitializeComponent();
      end; // MainForm

    method MainForm.Dispose(disposing: Boolean);
      begin
        if disposing then begin
          if assigned(components) then
            components.Dispose();
        end;
        inherited Dispose(disposing);
      end; // Dispose

    method MainForm.button1_Click(sender: System.Object; e: System.EventArgs);
      begin
        BackColor:= Color.Red;
      end; // button1_Click

    method MainForm.button2_Click(sender: System.Object; e: System.EventArgs);
      var l_form_1: Form1;
      begin
        l_form_1:= New Form1;
        if l_form_1.ShowDialog= System.Windows.Forms.DialogResult.Cancel
          then BackColor:= Color.Lime;
      end; // button2_Click

  end.

Notez que:

  • le mot clé UNIT est remplacé par NAMESPACE
  • la Classe est une Classe Partial. Nous retrouverons l'autre partie de cette Classe dans le fichier MAIN.DESIGNER.PAS
  • les mots clé PROCEDURE et FUNCTION ont été remplacés par METHOD
  • le CONSTRUCTOR n'a pas ce nom: c'est le constructeur par défaut
  • la méthode MainForm et le Constructor sont dans une section (repliée par défaut dans l'IDE)
  • les paramètres sont à la syntaxe .Net: e: System.Arg, le type dépendant en général de la méthode
  • les composants et les propriétés sont ceux de .Net:

    • un type Button (au lieu de tButton)
    • une propriété BackColor (au lieu de Color)
    • une valeur Color.Red (le type de l'énuméré et la valeur) au lieu de la constante clRed
    • pour créer un objet, il faut utiliser la nouvelle syntaxe New
    • l'ouverture d'une fenêtre modale se fait par ShowDialog (au lieu de ShowModal)
    • la valeur de résultat modal se désigne par System.Windows.Forms.DialogResult.Cancel (au lieu de la constante mrCancel)

A par les nouveaux mots clé, l'utilisation de la notation .Net a déjà été abondamment présentée dans nos tutoriels précédents sur Delphi .Net.

III.F. Le code de MAIN.DESIGNER.PAS

Le contenu de MAIN.DESIGNER.PAS est le suivant

 
Sélectionnez

namespace WindowsApplication1;
  interface
    uses
      System.Windows.Forms,
      System.Drawing;

    type MainForm =
            partial class
              private
                components: System.ComponentModel.Container := nil;
                button1: System.Windows.Forms.Button;
                button2: System.Windows.Forms.Button;
                method InitializeComponent;
              end;

  implementation

    method MainForm.InitializeComponent;
      begin
        var resources: System.ComponentModel.ComponentResourceManager
            := new System.ComponentModel.ComponentResourceManager(typeOf(MainForm));

        self.button1 := new System.Windows.Forms.Button();
        self.button2 := new System.Windows.Forms.Button();
        self.SuspendLayout();
        // -- button1
        self.button1.Location := new System.Drawing.Point(13, 13);
        self.button1.Name := 'button1';
        self.button1.Size := new System.Drawing.Size(75, 23);
        self.button1.TabIndex := 0;
        self.button1.Text := 'button1';
        self.button1.UseVisualStyleBackColor := true;
        self.button1.Click += new System.EventHandler(@self.button1_Click);
        // -- button2
        self.button2.Location := new System.Drawing.Point(13, 43);
        self.button2.Name := 'button2';
        self.button2.Size := new System.Drawing.Size(75, 23);
        self.button2.TabIndex := 1;
        self.button2.Text := 'button2';
        self.button2.UseVisualStyleBackColor := true;
        self.button2.Click += new System.EventHandler(@self.button2_Click);
        // -- MainForm
        self.ClientSize := new System.Drawing.Size(292, 273);
        self.Controls.Add(self.button2);
        self.Controls.Add(self.button1);
        self.Icon := (resources.GetObject('$this.Icon') as System.Drawing.Icon);
        self.Name := 'MainForm';
        self.Text := 'MainForm';

        self.ResumeLayout(false);
       end; // InitializeComponent

    end.

Notez que:

  • la Classe est aussi Partial
  • nous retrouvons bien la définition de nos deux Buttons
  • la méthode InitializeComponent se charge de créer les composants par code (au lieu d'utiliser, comme Delphi Win32 un fichier .DFM qui est utilisé par une procédure de l'.EXE pour créer les composants). Au niveau de résultat, c'est strictement la même chose, mais, pour de nouveaux composants cela de s'inspirer de ces instructions de création pour créer des composants nous même dynamiquement
    Cette technique était aussi la même en Delphi 2006.Net

III.G. Le "programme" principal

Le code de PROGRAM.PAS est le suivant:

 
Sélectionnez

namespace WindowsApplication1;
  interface
    uses
      System.Threading,
      System.Windows.Forms;

    type Program = 
             assembly static class
               private
                 class method OnThreadException(sender: Object;
                     e: ThreadExceptionEventArgs);
               public
                 class method Main;
               end; // Program

  implementation

    [STAThread]
    class method Program.Main;
        // The main entry point for the application.
      begin
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.ThreadException += OnThreadException;
        using lMainForm := new MainForm do
          Application.Run(lMainForm);
      end; // Main

    class method Program.OnThreadException(sender: Object; 
        e: ThreadExceptionEventArgs);
        // Default exception handler
      begin
        MessageBox.Show(e.Exception.Message);
      end; // OnThreadException

    end.

Et nous constatons que

  • la Classe contenant le programme est définie comme une Assembly, ce qui, dans la terminologie .Net est similaire à "Module" en Win32 (.DLL ou .EXE)
  • la Method de Classe Main crée bien la fenêtre principale et lance l'application

III.H. Les autres fichiers

Le fichier xxx.SLN (sln = Solution) correspond au projet. C'est celui-ci que nous cliquons lorsque nous souhaitons charger un projet.

Le fichier .EXE est situé dans BIN\DEBUG et ne fait que 32K

III.I. Le Solution Explorer

Notre Solution Explorer se présente ainsi:

Image non disponible

Mentionnons simplement que :

  • la zone référence contient les autres "assemblies" utilisées par notre projet. C'est ici qu'il faudra éventuellement ajouter des assemblies qui ne seraient pas importés automatiquement par Delphi Prism

IV. Navigation et Raccourcis Visual Studio

IV.A. Les noms et les emplacements

Naturellement, outre les changements de noms (Propriété au lieu d'Inspecteur d'Objet, Toolbox au lieu de Palette) et d'emplacement (les Propriétés à droite au lieu de gauche etc), le plus déroutant pour les nouveaux arrivants dans le monde Visual Studio est la navigation et les raccourcis.

Voici donc un petit guide à ce sujet

IV.B. Organisation Générale Visual Studio

Visual Studio comporte deux types de panneaux

  • les "documents" qui sont situés dans le panneau central. Dans notre cas, c'est là que seront présentés

    • les formes (designer)
    • les textes

      • essentiellement les fichiers de code
      • ou d'autres fichiers (fichiers .XML, .CSS etc
  • les "tools" qui sont utilisés pour manipuler les documents. Dans notre cas :

    • la Toolbox (et le Serveur Explorer situé dans un autre onglet)
    • les Properties qui contient les propriétés et les événements
    • le Solution Explorer qui présente tous les fichiers utilisés par nos applications (dans l'onglet "Class View" une vue des Classes, mais qui n'est actuellement pas opérationnel)
    • les panneaux du bas (Output, Error list, dont nous n'aurons naturellement jamais besoin, etc)

Tous ces éléments sont éminnement "dockables".

Très vite la présentation initiale risque d'être modifiée, et de redocker les panneaux à un emplacement donné se révèle non trivial. Heureusement il existe un bouton "panique", accessible par "Window | Reset Window" que nous utilisons assez régulièrement (il existe vraissemblablement quelque part une possibilité de verrouiller le docking).

IV.C. Navigation Code / Designer

Pour un développeur, le plus crucial est la navigation Code / Forme.

Le plus simple est d'utiliser les icônes situées en haut du Solution Explorer. Naviguons par exemple entre le code et la Forme de Main:

  • dans Solution Explorer, DOUBLE cliquez sur "Main"(ou sur "Main.Designer" !)
  • la Forme de Main est affichée dans le panneau central des documents
  • pour voir le code, cliquez sur l'icône "View Code"

    Image non disponible

    pour retourner sur la Forme, nous pouvons utiliser l'icône "View Designer" située à côté de "View Code"

Le panneau central ne peut pas être défilé. En revanche nous pouvons utiliser la petite flèche "Active Forms" située à côté de l'icône de fermeture de document:

IV.D. Raccourci de Navigation entre les Tools

Pour naviguer entre les panneaux nous pouvons utiliser

  • Alt F7

Par exemple

  • sélectionnez Visual Studio
  • tapez Alt F7
  • un dialogue présentant toutes les Tools est présenté

    Image non disponible
  • la frappe répétée de F7 présentera les Tools les uns après les autres

Si par mégarde vous fermez une Tool, vous pouvez la réafficher par le menu "View"

IV.D.1. Les Properties

Ce panneau affiche

  • les propriétés du composant sélectionné sur la Forme
  • un peu plus étonnant, les propriétés d'un fichier sélectionné (par simple clic) dans le Solution Explorer

Pour les propriétés des composants, nous basculons des propriétés aux événements en cliquant l'icône "Events" située en haut des Properties:

Image non disponible

IV.D.2. Raccourcis divers

De nombreuses navigations et actions sont possibles en utilisant des raccourcis claviers. Citons entre autre

  • Ctrl Shift B pour compiler
  • Ctrl Tab pour changer de document:

    Image non disponible
  • Ctrl F6 (et Shift Ctrl F6) ont le même rôle (en évitant le dialogue)
  • F5 lance la compilation
  • pratiquement toutes les Tools sont accessibles directement par des raccourcis (par exemple Ctrl Alt X pour la ToolBox). Pour connaître ces raccourcis, voyez le menu "View"

Nous ne pouvons pas dire que ces choix de raccourcis nous ont transporté d'allégresse. Toutefois il doit être possible de les redéfinir ("Tools | Options | Environment | Keyboard). Pour une présentation plus complète des raccourcis Visual Studio, consultez les pages MSDN

V. Application ASP.NET avec Delphi PRISM

Voici une application Asp.Net simple

  • fermez l'application précédente par "File | Close Solution"

Il est possible de gérer plusieurs projets simultanément, mais nous préférons travailler projet par projet s'ils n'ont aucun lien en commun

Voici notre exemple qui colorie une page .HTML en rouge:

  • créez une application Asp.Net par "File |
Image non disponible
  • un dialogue nous propose soit une application Asp.Net soit un service Web:
Image non disponible
  • sélectionnez l'application Asp.Net
  • au bout de quelques instants, une nouvelle application Asp.Net est présentée:
Image non disponible

Notez que

  • comme d'habitude, dans l'IDE, une fenêtre Asp.Net comporte trois parties

    • le texte du "modèle", stocké dans un fichier xxx.Aspx
    • la Forme, qui représente la page telle que la verra l'utilisateur (designer, qui est une représentation graphique du fichier .ASPX)
    • le code, contenant nos événements, contenu ici dans le fichier xxx.ASPX.PAS
  • il existe comme d'habitude un fichier WEB.CONFIG (gestion de la sécurité, des Data Providers etc) et un MACHINE.CONFIG global
  • pour naviguer de l'une de ces partie à une autre, nous utilisons

    • les icônes "code" et "designer" au dessus du Solution Explorer (flèches mauves et bleues)
    • les icônes au bas du document (flèches rouges)
  • le projet indique "c:\..\Website1\. En fait, les paramètres du projet (*.SLN) sont sous "PROJECTS" alors que les fichiers Asp.Net sont sous "WEBSITES":

    Image non disponible

    Le répertoire APP_DATA est, comme d'habitude, créé pour placer les données propres à notre "site", comme, par exemple une base de données Blackfish Sql.

Ajoutons notre bouton:

  • cliquez le bouton "Design" en bas du document
  • la Forme est présentée
  • depuis la page "Standard" de la ToolBox, déposez un Button et un Label
  • voici le résultat:

    Image non disponible
  • cliquez deux fois sur Button1 pour créer l'événement
  • tapez le code qui affiche un texte dans Label1

     
    Sélectionnez
    
    method _Default.Button1_Click(sender: System.Object; e: System.EventArgs);
      begin
        Label1.Text:= 'hello world';
      end; // Button1_Click
    
  • lancez la compilation / exécution
  • Delphi Prism

    • compile le code
    • lance le serveur local (le cousin de Cassini) que vous pouvez afficher en cliquant sur son icône située sur le "tray icon":

      Image non disponible
    • lance votre explorateur web par défaut (FireFox dans notre cas)
    • charge dans ce Browser notre page:

      Image non disponible
  • cliquez "Button1"
  • après un aller retour, le résultat est affiché:

    Image non disponible

Mentionnons que la dernière icône située en haut et à droite du Solution Explorer lance l'outil d'administration du site (la sécurité, les rôles, profils etc, cf notre article sur le sujet):

Image non disponible

VI. Notre Opinion et quelques Commentaires

VI.A. Un bref historique

Comme nous l'avons déjà présenté dans l'article sur les versions Delphi :

  • Delphi 2006 .Net permettait de développer des applications utilisant la librairie .Net

    • en utilisant directement la librairie .Net

      • pour Windows Forms (non internet)
      • pour Asp.Net (internet)
    • en utilisant une couche d'adaptation pour avoir le même code que sous Win32, Vcl.Net. Le même code Win32 pouvait être compilé, en utilisant simplement une autre librairie sous-jacente

soit:

Image non disponible

et

  • Rad Studio 2007 ne permettait plus que la création d'applications Asp.Net, mais avec la version 2.0 de .Net
  • Delphi 2009 était purement Win32

Delphi PRISM permet donc à nouveau de réaliser des applications

  • non Internet
  • Asp.Net pour Internet (plus des services Web)

et en ayant accès aux nouveautés de la version 3.5 de .Net

Commercialement, Delphi PRISM est fourni avec "Rad Studio 2009", avec Delphi 2009 pour la partie Win32, et Delphi PRISM pour la partie .Net

Image non disponible

Certains regrettent l'abandon de Vcl.Net, qui permettait de compiler indifféremment avec la librairie Win32 ou .Net. D'autres affirment que l'adaptation difficile entre deux librairies assez différentes faisaient de Vcl.Net un produit hybride, que ne pouvait être parfait ni dans le monde Win32 ni dans celui de .Net.

Pour notre part, nous n'avons guère utilisé cette version Vcl.Net. A droite ou à gauche, mais pas au milieu. Pour des applications utilisant la syntaxe Win32 (les tEdit, les tStringlist), travailler directement en Win32 offre l'avantage de l'accès direct à la librairie et de la performance (compilation, vitesse d'exécution, et, in fine, coût de développement).

Au contraire, la possibilité d'écrire du code Delphi (= Pascal objet) pour accéder en direct à la librairie .Net (Clr, Fcl) nous paraissaient une ouverture majeure. Force est de reconnaître que Microsoft, avec ses moyens, impose un peu la tendance. Par exemple les génériques et méthodes anonymes de Delphi 2009 "suivent" les concepts introduits par .Net2.0. Il reste donc important de garder un oeil attentif sur les nouveautés introduites par .Net

Vous l'avez compris, nous ne regrettons en rien l'abandon de Vcl.Net

En revanche, nous avons du mal à comprendre pourquoi Codegear n'a pas pu adapter leur compilateur à la librairie .Net3.5. Ils avaient déjà réalisé un compilateur "Delphi Pascal => .Net 2.0", et avaient déjà un IDE sous la main.

RemObject a du réaliser un travail bien plus important en adaptant leur compilateur "Pascal => .Net 3.5" à la plateforme Visual Studio. Marc HOFFMAN de RemObject a souligné que la majeure partie de leur temps a été de trouver les points d'entrée dans Visual Studio, et que ceci n'a été possible que grâce à des contacts personnels avec les développeurs de Microsoft. Edifiant pour ceux qui souhaitent utiliser Visual Studio Shell.

VI.B. RemObjects

Cette société a commencé par offrir une couche d'accès aux bases de donnée et aux objets distribuée "Data Abstract".

Puis elle a ajouté un compilateur "Pascal => .Net". Lorsque Microsoft a lancé .Net, ils ont activement soutenu les organisations qui créaient des compilateurs de n'importe quel langage (Prolog, Fortran, Lisp, Pascal etc) vers le code intermédiaire MSIL (Microsoft Intermediate Language). L'environnement .Net se chargeait de passer du MSIL vers le code natif.

En Octobre 2000 une version Open Source (Component Pascal, Université de Queensland) étaient disponible sur le Web. Nous ignorons si RemObject a utilisé ou non cette base pour créer sa première version "Pascal => .Net" (Chrome), mais cette version a été une base pour explorer certaines extensions de Delphi Pascal.

RemObjects a ensuite proposé le compilateur Oxygen.

C'est ce compilateur qui a été intégré à Delphi PRISM

VI.C. Delphi PRISM

Delphi PRISM

  • Microsoft offre

    • un Ide générique "vide" comportant un inspecteur d'objet, une palette et une zone pour les "documents".
      Les personne souhaitant utiliser cet Ide installent leur produit par dessus, et c'est ce qu'a réalisé RemObjects.

    • la librairie .Net. Donc

      • une couche de gestion (compilateur, gestionnaire mémoire, vérification des types)
      • une librairie de composants (Edit, Collection)
  • RemObject ajoute

    • un compilateur "Pascal" vers le code intermédiaire .Net
    • le raccordement entre ce langage et l'Ide et la librairie .Net
    • accessoirement la librairie Data Abstract
  • Codegear encapsule le tout

    • en ajoutant la couche d'accès aux données dbx4 / DataSnap et Blackfish Sql

VI.D. Nos commentaires sur l'utilisation de PRISM

VI.D.1. Le code Delphi Pascal

Pour le langage :

  • quelques modifications de forme

    • utilisation de Method, Assembly etc, et de nouveaux mots clé
  • utilisation des librairies et conventions .Net

    • signatures différentes (paramètres événement, par exemple)
    • librairie FCL

En revanche, nous bénéficions

  • d'une syntaxe Pascal

    • Begin et End etc
    • plus important, With, variables globales, constantes, paramètres valeur et variable, Units comme élément d'aggrégation, séparation de l'Interface et de l'Implementation
  • de nombreux ajouts propres à .Net

    • les génériques et les méthodes anonymes
    • les extensions de type LINQ (qui semblerait toutefois en voie d'obsolescence du côté de Microsoft)
  • les extensions RemObject : Marc HOFFMAN a incorporé quelques unes de ses marottes, comme

    • les contrats (DBC Design By Contract, cher à Bertrand MEYER)

Nous approuvons fortement ces amélioration, et ne pouvons que souhaiter qu'elles soient incorporées prochainement à Delphi Win32

VI.D.2. Quant à l'IDE

Nous avons relevé

  • des nouveautés superficielles

    • au niveau des noms et de la position

      • la Palette s'appelle la Toolbox et est à gauche
      • le gestionnaire de projet s'appelle le "Solution Explorer"
      • l'Inspecter d'Objet s'appelle Properties et ne comporte pas d'onglet "événement"

      Pas très grave: nous savons à priori ce qu'il faut trouver (une Palette, un un Inspecteur d'Object, une zone de conception et un Editeur de code). Donc il suffit de chercher un peu

    • au niveau des raccourcis

      • pas, semble-t-il de raccourci pour basculer entre le concepteur et l'inspecteur (F11 et F12)
      • des raccourcis compliqués en général (Ctrl Shift B !)
    • docking très sensible, et impossibilité de le bloquer
  • quelques fonctionnalités non implémentées

    • possibilité d'effacer un fichier depuis le Solution Explorer
    • impossibilité d'utiliser "Clic Droit | Sauvegarder" sur chaque fichier dans le Solution Explorer
    • "Enregistrer sous" pénible
    • dans les options, absence semble-t-il de spécifier les chemins de destination de l'.EXE, les chemins de recherche des Unités
  • absences de certaines possibilités ou composants

    • le Class Explorer
    • certains composants utilisant les bases de données (tXxxConnection etc). L'ensemble se fait en utilisant des Wizards (ou ensuite par code)

Nous avons aussi trouvé certaines lenteurs. Mais comme nous avons utilisé un PC à 1.400 Mhz et 512Mb de mémoire, vous bénéficierez sans aucun doute avec les PC actuels d'une meilleure performance.

VI.D.3. Linux et Mac

Nous ne l'avons pas mentionné, mais Delphi PRISM permet de développer des applications destinées à Linux (via la librairie MONO qui émule .Net) et Mac Intosh (via une version de Mono pour Mac)

VI.D.4. L'aide et la Documentation

C'est peut-être là que le bat blesse.

Actuellement F1 n'est pas implémenté, mais devrait être ajouté par la suite

La documentation est proposée sous forme de Page Wikipedia :

Image non disponible

Notez que

  • il est recommandé de télécharger régulièrement les mises à jour, la version initiale (4 Meg) étant constamment enrichie (12 Meg pour notre téléchargement Février 2009)
  • ATTENTION, il existe aussi Delphi Prism qui est un Wiki sans le soutien de Codegear, et plutôt creux
  • pour avoir une vision plus épurée et hiérarchique de ce Wiki, nous avons créé un outil qui présente les fichiers .HTML avec un accès par TreeView:

    Image non disponible

    qui est en cours de publication

Ce qui manque le plus est l'aide .Net. Pour Delphi 2006 et 2007, Codegear avait licencié l'aide Microsoft. Même si les exemples sont en C#, c'était une source inestimable pour explorer la librairie (les Classes, leurs relations, les propriétés, événements et méthodes) et pour les exemples très nombreux. Sans ce type de document, comment donc deviner que pour ouvrir un dialogue il faut utiliser "ShowDialog" et pas "ShowModal" ?

La page "téléchargement recommandé" de Delphi Prism suggère de télécharger le Visual Studio SDK (136 Megs, 6 heures à 61 Kbd)

Pour le moment, nous utilisons l'aide Microsoft fournie avec Delphi 2007.

La situation n'est pas sans espoir:

  • pour ceux qui ont Delphi 2006 ou 2007, utiliser l'aide Microsoft
  • télécharger le Sdk Microsoft
  • utiliser l'Object Browser ("View | Object Browser", alias "Alt Ctrl J"):

    Image non disponible
  • user et abuser du "code completion". Un de nos clients m'a récemment montré une technique à laquelle je n'avais pas pensé: pour visualiser les méthodes et propriétés d'une Forme, tapez "Self." (Self et un point).
  • finalement, F1 devrait arriver
  • utiliser les newsgroups Delphi PRISM.
    Nous avons utilisé nos aspirateur Internet (déjà publiés en source) pour avoir une copie locale ayant un moteur de recherche avec AND, OR, NOT, parenthèses etc. Mais naturellement la version en ligne est aussi utilisable

  • faire appel à MSDN (le site d'information développeur Microsoft), les sites .Net (comme Code Project), ou, plus généralement Google.

VI.E. La Roadmap Prism

Nick HODGES a publié une Roadmap PRISM qui a été traduite en Français par Thierry LABORDE. Cette feuille de route indique que:

  • l'intégration d'accès aux bases de données va s'étoffer. En particulier

    • la possibilité de créer des serveurs DataSnap
    • l'utilisation de l'"Entity Framework" qui semble le remplaçant de LINQ
  • l'intégration de Nunit, l'environnement de test unitaire

VI.F. Notre recommandation

En conclusion

  • Delphi PRISM nous permet de "recoller" aux nouveautés Microsoft
  • les personnes ayant déjà utilisé une version Delphi .Net seront rapidement opérationnels, ayant uniquement à se familiariser avec Visual Studio.
  • en revanche débuter dans le monde .Net en utilisant Delphi PRISM ne sera pas évident compte tenu de la documentation actuelle. Naturellement des articles sur Developpez ou ailleurs - :) - vous aideront à découvrir ce monde nouveau

Et compte tenu de la position privilégiée de Delphi PRISM (syntaxe Delphi PASCAL avec accès au monde .Net), nous avons déjà organisé des Formations Delphi PRISM

VII. Liens et Références

Quelques liens utiles:

  • le Visual Studio Shell : l'IDE générique Microsoft
  • les pages MSDN, comme, par exemple:

  • Le PrismWiki
  • Les newsgroups Delphi PRISM accessibles par https://forums.codegear.com/category.jspa?categoryID=51 sont les suivants:

    • embarcadero.public.delphiprism.aspnet.webservices
    • embarcadero.public.delphiprism.compactframework
    • embarcadero.public.delphiprism.language
    • embarcadero.public.delphiprism.mono.linux
    • embarcadero.public.delphiprism.mono.osx
    • embarcadero.public.delphiprism.non-technical
    • embarcadero.public.delphiprism.silverlight
    • embarcadero.public.delphiprism.thirdpartytools
    • embarcadero.public.delphiprism.winforms
    • embarcadero.public.delphiprism.wpf
  • La Roadmap PRISM se trouve à Prism Roadmap, avec une traduction française sur le site de Logix
  • Nous proposons aussi des Formations Delphi PRISM dont le programme détaillé se trouve sur notre site.

VIII. L'auteur

John COLIBRI est passionné par le développement Delphi et les applications de Bases de Données. Il a écrit de nombreux livres et articles, et partage son temps entre le développement de projets pour ses clients, le conseil et la formation.