IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Introduction aux Experts IDE sous Delphi 7

Ce tutoriel est destiné à vous faire entrevoir les immenses capacités d'évolution de l'IDE de Delphi, Kylix et BCB. Il est largement adapté de ce que l'on peut trouver sur le sujet dans l'excellent livre de Paul TOTH et d'Olivier DAHAN : Delphi 7 Sudio, éditons Eyrolles.

Remarque
Je n'explique pas ici tous les tenants et aboutissants des experts ni du code donné. Les choix sont par définition discutables, et ça n'est qu'une introduction. N'étant pas un pro des experts, cette approche est plutôt donnée à titre indicatif.

Donc, ne m'en voulez pas si après ce tutoriel, vous ne savez pas pourquoi j'ai utilisé telle classe, ni quelle est la liste exhaustive des méthodes de telle autre, dans l'aide en ligne de l'unité ToolsApi il existe plus ou moins 130 entrées (interfaces et fonctions comprises).
À la fin du tutoriel, vous aurez un expert qui fonctionnera.
Ensuite vous pouvez utiliser le forum Delphi pour échanger vos idées et partager vos informations sur le sujet…

Article lu   fois.

L'auteur

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Public concerné

Débutant

Avancé

Expert

[X]___[X]

[ ]___[ ]

[ ]___[ ]

Testé avec Delphi 7 sous XP pro.
Versions Delphi 6,7.

version 1.0.
Dernière mise à jour, le 13/07/2004.

II. Qu'est-ce qu'un Expert IDE ?

Un Expert IDE peut être vu comme un programme qui facilite la vie du programmeur. C'est un élément intégré à l'environnement de développement (IDE), et qui permet de lui ajouter des fonctionnalités.

Ce tutoriel a pour origine le problème suivant : comment réaliser un expert qui insèrerait dans la fenêtre de code et à l'emplacement du curseur, le code hexadécimal d'une couleur choisie dans une fenêtre de sélection de couleurs ?
L'appel de cet Expert se faisant par une combinaison de touches.

III. Un paquet pour notre Expert

Ce que l'on cherche à faire, c'est dans un premier temps à récupérer une combinaison de touches (Ctrl+Alt+L par exemple), puis de lancer la boîte de dialogue de sélection de couleurs, et enfin d'insérer le code de la couleur.

  • Ouvrez Delphi et faites 'Fichier/Tout Fermer', on n'a pas besoin d'application.
  • 'Fichier/Nouveau/Autres', dans l'onglet nouveau choisir Paquet.
  • 'Fichier/Enregistrer'. Créez un nouveau répertoire et nommez votre package : ExpertInsertColor.dpk.
  • Enfin 'Projet/Options'. Choisir Seulement en Conception et Explicite, comme le montre la capture d'écran suivante :

Reportez-vous à l'aide en ligne pour la signification des différentes options.

Image non disponible


Et voilà, votre paquet est prêt.
Il ne reste plus qu'à ajouter nos deux unités :

  • 'Fichier/Nouveau/Unité' et enregistrez-la sous le nom ExpertClassInsertColor.pas ;
  • 'Fichier/Nouveau/Unité' et enregistrez-la sous le nom ExpertRegisterInsertColor.pas ;
  • 'Fichier/Tout Enregistrer'.

Tout est fin prêt pour créer l'Expert.
Dans la section Requires du paquet, doit se trouver le fichier designide.dcp, s'il n'y est pas cliquez avec le bouton droit de la souris sur Requires, et faites 'Ajouter'. Le fichier se trouve dans le répertoire Lib de Delphi.

IV. Les bases de l'Expert

Nous allons tout d'abord créer un Expert vide qui répond simplement à la combinaison de touches Ctrl+Alt+L.
Voici le code de base à intégrer dans l'unité ExpertClassInsertColor.pas.

Tout d'abord la déclaration de notre classe TExpertInsertColor dans la partie interface de notre unité :

 
Sélectionnez
interface
uses
  Classes, SysUtils, Windows, Menus, ToolsAPI, Graphics;
type
  TExpertInsertColor = class(TNotifierObject, IUnknown, IOTANotifier, IOTAKeyboardBinding)
  protected
    procedure DoBindKeyboard(const Context : IOTAKeyContext; KeyCode : TShortCut;
            var BindingResult : TKeyBindingResult);
  public
    // Les méthodes des interfaces supportées. 
    function GetBindingType : TBindingType;
    function GetDisplayName : String;
    function GetName : String;
    procedure BindKeyboard(const BindingServices : IOTAKeyBindingServices);
  end;

Les méthodes publiques sont celles qui sont importées des différentes interfaces supportées. La méthode protégée DoBindKeyboard est celle qui répond au raccourci clavier.
Voici maintenant le code détaillé de chacune de ces méthodes :

 
Sélectionnez
implementation
uses
  Dialogs;

  // C'est la méthode qui lie la combinaison de touches à la méthode à exécuter : DoBindKeyboard
procedure TExpertInsertColor.BindKeyboard(const BindingServices: IOTAKeyBindingServices);
begin
  BindingServices.AddKeyBinding([ShortCut(Ord('L'), [ssCtrl, ssAlt])],DoBindKeyboard,nil);
end;

  // C'est la méthode qui est exécutée quand la combinaison de touches a été effectuée
procedure TExpertInsertColor.DoBindKeyboard(const Context: IOTAKeyContext; KeyCode: TShortCut;
                    var BindingResult: TKeyBindingResult);
begin
    // On affiche qu'on a bien récupéré la combinaison de touches
  ShowMessage('Ca maaaaaaarche !!!);
    // On signifie que l'on a bien géré ce que l'on voulait
  BindingResult := krHandled;
end;

  // Méthode qui dit quel type d'affectation de touches on effectue
function TExpertInsertColor.GetBindingType: TBindingType;
begin
    // On ne surcharge pas tout le clavier
  Result := btPartial;
end;

  // Renvoie la chaîne à afficher dans Outils/Options de l'éditeur/Affectations de touches
function TExpertInsertColor.GetDisplayName: String;
begin
  Result := 'Ctrl+Alt+L : Insert Color';
end;

  // Renvoie le nom de l'Expert, ce nom doit être unique
function TExpertInsertColor.GetName: String;
begin
  Result := 'Lamoureux.Experts.InsertColor';
end;

Il faut maintenant enregistrer votre Expert auprès de Delphi. Dans l'unité ExpertRegisterInsertColor ajoutez le code suivant :

 
Sélectionnez
interface

  procedure Register;

implementation

uses
  ToolsAPI,
  ExpertClassInsertColor;

procedure Register;
begin
  (BorlandIDEServices as IOTAKeyboardServices).AddKeyboardBinding(TExpertInsertColor.Create);
end;

Voilà, votre premier Expert est fini. Il vous reste à compiler votre paquet (Ctrl+F9) et à l'installer (Bouton dans la fenêtre Paquet).

Vous pouvez tester en vous mettant dans une fenêtre de code et en tapant Ctrl+Alt+L.

Image non disponible

Votre Expert fonctionne, mais il ne fait pas encore ce que nous voulons…

V. Mettons-nous à la couleur

Nous allons maintenant ajouter l'insertion de la couleur dans l'éditeur de code. Pour ce faire, nous allons écrire la méthode InsertColor qui se chargera de cette opération.

Dans la partie protégée de la classe TExpertInsertColor, on ajoute l'en-tête suivant :

 
Sélectionnez
procedure InsertColor(const Editor: IOTASourceEditor; const View: IOTAEditView);

Et son code associé dans la partie implementation :

 
Sélectionnez
procedure TExpertInsertColor.InsertColor(const Editor: IOTASourceEditor; const View: IOTAEditView);
var
  ColorDialog : TColorDialog;
begin
    // Création de la boîte de sélection de couleurs
  ColorDialog := TColorDialog.Create(nil);
  try
      // Si l'utilisateur clique sur OK
    if ColorDialog.Execute then
      // Alors on insère la couleur transformée en texte dans l'éditeur
      View.Position.InsertText(ColorToString(ColorDialog.Color));
  finally
    ColorDialog.Free;
  end;
end;

Il ne reste plus qu'à appeler la méthode InsertColor à la place de notre ShowMessage dans la méthode DoBindKeyboard.

 
Sélectionnez
procedure TExpertInsertColor.DoBindKeyboard(const Context: IOTAKeyContext; KeyCode: TShortCut;
                    var BindingResult: TKeyBindingResult);
begin
    // On insère une couleur
  InsertColor(Context.EditBuffer,Context.EditBuffer.TopView);
    // On signifie que l'on a bien géré ce que l'on voulait
  BindingResult := krHandled;
end;

Compilez, placez-vous dans la fenêtre de code puis faites Ctrl+Alt+L. Vous pouvez constater l'insertion du code de la couleur choisie à l'emplacement du curseur.

Remarque : il peut arriver qu'une erreur survienne lors de la compilation due au fait que Delphi utilise le paquet, et par conséquent ne puisse le recréer.
Il suffit alors de sauvegarder votre travail, quitter Delphi puis de le rouvrir. Fermez tout, rouvrez votre paquet et compilez-le.

VI. Un peu plus loin…

Nous aimerions, si le texte sélectionné dans l'éditeur est un code de couleur, que la boite de sélection se positionne sur cette couleur.
Nous allons donc ajouter une méthode qui va lire ce qui est sélectionné dans l'éditeur de code.

Ajoutons donc dans la partie protégée de notre classe la méthode suivante :

 
Sélectionnez
function ReadColor(const Editor: IOTAEditBuffer) : TColor;

Et son code dans la partie implementation :

 
Sélectionnez
function TExpertInsertColor.ReadColor(const Editor: IOTAEditBuffer): TColor;
var
  Text : string;
begin
    // Si rien n'est sélectionné, on renvoie noir
  if Editor.EditBlock.Size = 0 then
    Result := clBlack
  else
  begin
      // On récupère le texte sélectionné
    Text := Editor.EditBlock.Text;
    try
        // On le transforme en couleur
      Result := StringToColor(Text);
    except
        // Si c'est pas une couleur on renvoie noir
      Result := clBlack;
    end;
  end;
end;

Et juste avant d'exécuter la boîte de couleurs, on initialise sa couleur à ce qui est lu dans l'éditeur :

 
Sélectionnez
ColorDialog.Color := ReadColor(Editor as IOTAEditBuffer);

Compilez et vérifier qu'il fonctionne.
J'espère que votre entrée dans le monde des Experts vous aura plu.

Vous trouverez des exemples des Api OpenTools dans le répertoire \Delphi\Demos\ToolsAPI


Quelques liens sur le sujet :

Documents sur une conférence Borland 2001 autour d'OpenTools.

Utilisation des packages pour les composants.

La gestion des packages.

Code central,section Open Tools.

Une mine d'informations sur Opentools : une FAQ, des liens, une liste des bogues d'OpenTools D5, D6, D7

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Ce document est issu de https://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.