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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API, COM et SDKs Delphi Discussion :

TStrings en automation


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut TStrings en automation
    Bonjour

    Je reprends par nécessité un vieux tuto sur les server com qui était basé sur Delphi 5.
    C'est un simple TMemo qu'il automatiser.
    Le tuto dit à un moment de creér une propriété de type IStrings mais ça n'existe pas dans la liste de choix.
    Que faudrait-il prendre en remplacement ?

    J'ai oublié de préciser que je suis sur Tokyo

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 090
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 090
    Par défaut
    C'est à toi d'ajouter via l'Editeur de TLB * IStrings, il doit falloir ajouter le type dans la biblothèque pour que ton utilisateur puisse l'utilise car il lui faut connaitres les GUID et DispID pour son binding
    Si tu donnais le lien vers le tutoriel D5 cela aiderait !

    Personnellement, je retournais une interface dédiée de mon cru avec un Count et Items, car souvent les items était rarement juste une liste de chaine mais plutôt une liste de record
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    Si tu donnais le lien vers le tutoriel D5 cela aiderait !
    C'est le bouquin d'Eric Harmon : "DELPHI COM programming" . Il n'est pas sur le net.

    Le tuto présente la création d'un "server out of process" avec un simple TMemo pour lequel on peut changer la couleur, la fonte, ou le texte.
    Le programme en lui-même est ridiculement petit.
    L'ajout des fonctions appelées par l'interface est simple aussi.

    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 Unit24;
     
    interface
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
     
    type
      TForm24 = class(TForm)
        Memo1: TMemo;
        Button1: TButton;
        Button2: TButton;
        FontDialog1: TFontDialog;
        ColorDialog1: TColorDialog;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Déclarations privées }
      public
     
        function GetColor: TColor;
        procedure SetColor(AColor: TColor);
        function GetFont: TFont;
        procedure SetFont(AFont: TFont);
        function GetText: TStrings;
        procedure SetText(AText: TStrings);
      end;
     
    var
      Form24: TForm24;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm24.Button1Click(Sender: TObject);
    begin
      if FontDialog1.Execute then
        Memo1.Font.Assign(FontDialog1.Font);
    end;
     
    procedure TForm24.Button2Click(Sender: TObject);
    begin
      if ColorDialog1.Execute then
        Memo1.Color := ColorDialog1.Color;
    end;
     
    function TForm24.GetColor: TColor;
    begin
      Result := Memo1.Color;
    end;
     
    function TForm24.GetFont: TFont;
    begin
      Result := Memo1.Font;
    end;
     
    function TForm24.GetText: TStrings;
    begin
      Result := Memo1.Lines;
    end;
     
    procedure TForm24.SetColor(AColor: TColor);
    begin
      Memo1.Color := AColor;
    end;
     
    procedure TForm24.SetFont(AFont: TFont);
    begin
      Memo1.Font.Assign(AFont);
    end;
     
    procedure TForm24.SetText(AText: TStrings);
    begin
      Memo1.Lines.Assign(AText);
    end;
     
    end.
    Après, le tuto dit d'aller dans le "Type Library Editor" et:

    Add a read/write property named Text, and set the Type to IStrings
    Problème, ce type existait peut-être en D5 mais pas dans Tokyo.
    Alors je veux bien ajouter le type IStrings quelque part, mais le tuto n'en parle pas quand je le suis pas à pas.
    C'est pour ça que je me dis qu'un nouveau type équivalent doit exister mais tous ceux que je vois ne ressemble pas vraiment à ce qui est demandé :-(

  4. #4
    Membre émérite
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Par défaut
    Bonjour,

    je sais pas si ça peut aider mais dans l'unité "StdVcl.pas" (System.Win.StdVCL.pas) il y a ceci:
    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
    { Collection Interface for TStrings }
     
      IStrings = interface(IDispatch)
        ['{EE05DFE2-5549-11D0-9EA9-0020AF3D82DA}']
        function Get_ControlDefault(Index: Integer): OleVariant; safecall;
        procedure Set_ControlDefault(Index: Integer; Value: OleVariant); safecall;
        function Count: Integer; safecall;
        function Get_Item(Index: Integer): OleVariant; safecall;
        procedure Set_Item(Index: Integer; Value: OleVariant); safecall;
        procedure Remove(Index: Integer); safecall;
        procedure Clear; safecall;
        function Add(Item: OleVariant): Integer; safecall;
        function _NewEnum: IUnknown; safecall;
        property ControlDefault[Index: Integer]: OleVariant read Get_ControlDefault write Set_ControlDefault; default;
        property Item[Index: Integer]: OleVariant read Get_Item write Set_Item;
      end;
    Cordialement,
    @+

  5. #5
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    Je vais ajouter ça et voir ce que ça donne.

    Mais c'est tiré de quelle version de Delphi ? D5 ?

    Merci

  6. #6
    Membre émérite
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    Je vais ajouter ça et voir ce que ça donne.

    Mais c'est tiré de quelle version de Delphi ? D5 ?

    Merci
    tout ce que je peux te dire c'est qu'elle est présente au moins depuis D7

    Cordialement,
    @+

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 638
    Billets dans le blog
    65
    Par défaut
    Bonjour,
    pour Tokyo IStrings est déclaré dans System.Win.StdVCL

  8. #8
    Membre émérite
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Par défaut
    Bon,
    j'ai tenté le tuto sous D7, D2009 et Tokyo

    premier point bizarre IFontDisp & IStrings sont acceptés dans les 3
    avec D7, par contre, lors du rafraichissement de l'implémentation il indique une erreur "doit être de type pointeur" sur Font et Text ...
    impossible d'aller plus loin

    en revanche avec D2009 & Tokyo j'arrive à la fin du tuto les projets semblent fonctionner mais à la connexion erreur "Interface non supportée"

    si quelqu'un d'autre a envie d'essayer ^^

    Cordialement,
    @+

  9. #9
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    IStrings sont acceptés dans les 3
    mais quand tu utilises le bouton de refresh d'implémentation, Tokyo ne change pas le type ????

  10. #10
    Membre émérite
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    mais quand tu utilises le bouton de refresh d'implémentation, Tokyo ne change pas le type ????
    euh ben non
    voici le fichier généré :
    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
    // ************************************************************************ //
    // AVERTISSEMENT
    // -------
    // Ce fichier est généré par l'importateur ou l'éditeur de bibliothèques de types.
    // Sauf les erreurs de syntaxe, l'éditeur analysera les modifications apportées au fichier.
    // Toutefois, lors de l'application de changements via l'éditeur, ce fichier sera régénéré
    // et les commentaires et les changements de formatage seront perdus.
    // ************************************************************************ //
    // Fichier généré le 05/09/2017 13:11:31 (- $Rev: 12980 $, 13929547).
     
    [
      uuid(69A22360-1900-4EAB-93C3-3A579B1C9E2E),
      version(1.0)
     
    ]
    library MemoSrv
    {
     
      importlib("stdole2.tlb");
      importlib("stdvcl40.dll");
     
      interface IMemoIntf;
      coclass MemoIntf;
     
     
      [
        uuid(B0E3CBA9-7D84-4D4F-8001-9EDE6B10EA8D),
        helpstring("Interface dispatch pour MemoIntf Objet"),
        dual,
        oleautomation
      ]
      interface IMemoIntf: IDispatch
      {
        [propget, id(0x000000C9)]
        HRESULT _stdcall Color([out, retval] OLE_COLOR* Value);
        [propput, id(0x000000C9)]
        HRESULT _stdcall Color([in] OLE_COLOR Value);
        [propget, id(0x000000CA)]
        HRESULT _stdcall Font([out, retval] IFontDisp* Value);
        [propput, id(0x000000CA)]
        HRESULT _stdcall Font([in] IFontDisp Value);
        [propget, id(0x000000CB)]
        HRESULT _stdcall Text([out, retval] IStrings* Value);
        [propput, id(0x000000CB)]
        HRESULT _stdcall Text([in] IStrings Value);
      };
     
      [
        uuid(3977B99F-3BBE-467E-BBA0-AE95ECF3F3A1),
        helpstring("MemoIntf Objet")
      ]
      coclass MemoIntf
      {
        [default] interface IMemoIntf;
      };
     
    };

  11. #11
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    :-(

    et le code de TMemoIntf ???

Discussions similaires

  1. Concaténer TStrings
    Par Tuxxy dans le forum Composants VCL
    Réponses: 8
    Dernier message: 07/03/2003, 12h30
  2. Récupération valeur d'une propriété type TStrings
    Par Stéphane Vaillant dans le forum Langage
    Réponses: 2
    Dernier message: 01/03/2003, 11h47
  3. [AUTOMATION WORD]Pilotage Word par Delphi
    Par Sunny dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 05/12/2002, 17h09
  4. [VBA-W] [AUTOMATION]Liste Fonctions/Paramètres
    Par Sunny dans le forum VBA Word
    Réponses: 2
    Dernier message: 05/12/2002, 16h35
  5. Accès à une application ouverte (OLE Automation ?)
    Par PascalB dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/06/2002, 14h39

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