1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    mars 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2010
    Messages : 21
    Points : 26
    Points
    26

    Par défaut Creation Ruban avec Ribbon Designer Framework

    Bonjour à tous,
    Je teste la nouvelle proposition de Delphi pour créer un ruban sous Delphi 10. Le composant tRibbon ayant disparut (pour cause de licence avec Microsoft), Embarcadero propose d'utiliser Microsoft SDK.

    J'ai passé de longues heures à essayer de mettre en œuvre l'exemple de :
    http://www.bilsen.com/windowsribbon/tutorial.shtml

    Quelqu'un peut-il m'expliquer où et comment le compilateur crée et affecte les objets FCmdPaste, FCmdPasteSpecial... ? dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    procedure TFormMain.CommandCreated(const Sender: TUIRibbon;
      const Command: TUICommand);
    begin
      inherited;
      case Command.CommandId of
        CmdPaste:
          begin
            FCmdPaste := Command as TUICommandAction;
            FCmdPaste.OnExecute := PasteExecute;
          end;
     
        CmdPasteSpecial:
          begin
            FCmdPasteSpecial := Command as TUICommandAction;
            FCmdPasteSpecial.SetShortCut([ssCtrl, ssAlt], 'V');
            FCmdPasteSpecial.OnExecute := PasteExecute;
          end;
     
        CmdCut:
          begin
            FCmdCut := Command as TUICommandAction;
            FCmdCut.OnExecute := PasteExecute;
          end;
     
        CmdCopy:
          begin
            FCmdCopy := Command as TUICommandAction;
            FCmdCopy.OnExecute := PasteExecute;
          end;
      end;
    end;
    Merci par avance pour votre aide...

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    6 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2002
    Messages : 6 722
    Points : 21 446
    Points
    21 446

    Par défaut

    je ne sais pas pour le code que tu utilises, mais les Ribbon du SDK sont en fait définis dans un fichier XML compilé avec UICC.exe.

    pour afficher le Ribbon on utilise l'objet COM IUIFramework; il est initialisé en lui passant un IUIApplication (qui doit être implémenté par l'application hôte) et le XML compilé est chargé depuis une ressource avec la méthode IUIFramework.LoadUI.

    Dès lors c'est l'interaction entre les deux interfaces qui va déclencher les événements, notamment IUIApplication.OnCreateUICommand est appelé par le Ribbon pour que l'application puisse configurer les commandes (on peut tout définir dans le XML, ou ne définir qu'une partie et le reste dans l'application ... ce qui permet le support multilangue par exemple).

    Dans ton code tu as manifestement un objet Delphi qui implémente l'interface IUIApplication, il crée un TUICommand qui englobe le IUICommandHandler envoyé par le Ribbon, la commande est stockée dans des variables privée (FCmdPaste...) et initialisée comme il se doit.

    L'avantage de ce SDK c'est que tout l'interface est gérée par Windows, son gros inconvénient à mon sens, c'est que le Ribbon ne supporte aucune création dynamique; il est par exemple impossible de créer des boutons à la volée pour des plugins. MS Office le fait, mais MS Office n'utilise pas ce SDK mais une implémentation propriétaire du Ribbon.

    J'ai étudié la question pour un client qui a choisi de s'orienter vers le Ribbon de DevExpress qui est codé entièrement sous Delphi...par contre la personnalisation de leur ribbon (en dehors de ce qu'ils ont prévu), si elle est possible, relève de la haute voltige. C'est notamment le cas car ils ont décidé de coller au plus près au Ribbon MS en ne prévoyant aucune facilité pour sortir de ce cadre...ce que je trouve dommage pour un composant entièrement codé sous Delphi.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Produits : UPnP, RemoteOffice, FlashPascal

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    mars 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2010
    Messages : 21
    Points : 26
    Points
    26

    Par défaut

    Merci Paul, je commençais à croire être le seul à m'intéresser à cette méthode.
    J'avais utilisé le tRibbon avec XE2, qui répondait à tous les avantages dont tu parles. Ca fonctionne bien, est très homogène avec les rubans de Microsoft et parfaitement intégré à Delphi...sauf que...

    Mon problème est que tout est crée parfaitement (le visuel est nickel même si ça ne peut pas évoluer...) mais je dois louper une étape et les objets f... ne sont pas créés.
    Je n'arrive donc pas à faire de lien entre la commande et l'action.
    Je vais passer un peu de temps pour aller explorer le fichier Xml...

    Si je ne trouve pas, je vais tenter de me rabattre sur un autre composant...

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    mars 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2010
    Messages : 21
    Points : 26
    Points
    26

    Par défaut

    J'ai testé un exemple fournis dans le package (cf lien ci-dessus) et l'ajout d'un simple ShowMessage() dans l'une des commandes, ne fonctionne pas...
    Problème Delphi Tokyo ? Framework SDK ? ou d'installation ?

    Merci par avance pour vos avis....

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    mars 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2010
    Messages : 21
    Points : 26
    Points
    26

    Par défaut

    Eureka...

    Solution :
    Pour tout ceux qui souhaite utiliser le ruban de Framework SDK en téléchargeant l'exemple fourni (TextPad) :
    • La procédure de création du ruban, avec Ribbon Designer est OK
    • A la création de l'application, ajouter l'objet tUIRibbon sur la form
    • Ne pas changer la class de la form principale comme précisé dans le descriptif
    • Ne pas ajouter la commande de fichier ressource mais seulement Uses...


    A la compilation, comme à l'exécution, tout semble correct.

    Pour être complet, rappel de la documentation :
    http://www.bilsen.com/windowsribbon/index.shtml

    Et mon code de test (qui utilise un ruban créé avec Ribbon Designer et en cochant le Template Textpad)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    unit FMain;
     
    interface
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
      System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
      UIRibbon, UIRibbonForm, UIRibbonCommands, GraphUtil;
     
    type
      TFormMain = class(TForm)
        Ribbon: TUIRibbon;
        procedure RibbonLoaded(Sender: TObject);
        procedure CommandCreated(const Sender: TUIRibbon;
          const Command: TUICommand);
      private
        { Déclarations privées }
        FCmdPaste: TUICommandAction;
        FCmdPasteSpecial: TUICommandAction;
        FCmdCut: TUICommandAction;
        FCmdCopy: TUICommandAction;
        procedure Test(const Args: TUICommandActionEventArgs);
      public
        { Déclarations publiques }
      end;
     
    var
      FormMain: TFormMain;
     
    implementation
     
    {$R *.dfm}
    uses RibbonMarkup;
     
    procedure TFormMain.Test (const Args: TUICommandActionEventArgs);
    begin
      ShowMessage('Test');
    end;
     
    procedure TFormMain.RibbonLoaded;
    begin
      inherited;
      Color := ColorAdjustLuma(Ribbon.BackgroundColor, -25, False);
    end;
     
      procedure TFormMain.CommandCreated(const Sender: TUIRibbon;
      const Command: TUICommand);
    begin
      inherited;
      case Command.CommandId of
        CmdPaste:
          begin
            FCmdPaste := Command as TUICommandAction;
            FCmdPaste.OnExecute := Test;
          end;
     
        CmdPasteSpecial:
          begin
            FCmdPasteSpecial := Command as TUICommandAction;
            FCmdPasteSpecial.SetShortCut([ssCtrl, ssAlt], 'V');
            FCmdPasteSpecial.OnExecute := Test;
          end;
     
        CmdCut:
          begin
            FCmdCut := Command as TUICommandAction;
            FCmdCut.OnExecute := Test;
          end;
     
        CmdCopy:
          begin
            FCmdCopy := Command as TUICommandAction;
            FCmdCopy.OnExecute := Test;
          end;
      end;
    end;
     
    end.
    A bientôt...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/09/2014, 13h49
  2. [2010] Attributs "getImage" et autres avec Ribbon Visual Designer (Visual Studio 2012)
    Par Ragmaxone dans le forum Microsoft Office
    Réponses: 1
    Dernier message: 18/09/2014, 09h16
  3. [XL-2010] Attributs "getImage" et autres avec Ribbon Visual Designer (Visual Studio 2012)
    Par Ragmaxone dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/09/2014, 07h14
  4. [Entity Framework] Problème avec le Designer
    Par farfadet dans le forum Framework .NET
    Réponses: 16
    Dernier message: 18/02/2010, 13h13
  5. Réponses: 2
    Dernier message: 06/04/2009, 15h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo