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 :

Pb Transtypage Property IDispatch


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    juillet 2002
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2002
    Messages : 61
    Points : 63
    Points
    63
    Par défaut Pb Transtypage Property IDispatch
    Bonsoir à toute la communauté,

    Voila, j'ai besoin d'aide à propos d'une propriété de type IDispatch
    Voici un extraie du fichier Excel2000.pas (server):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // Fichier Excel2000.pas
    _Workbook = interface(IDispatch)
        ['{000208DA-0000-0000-C000-000000000046}']
    	....
    	....
      	property CustomDocumentProperties: IDispatch read Get_CustomDocumentProperties;
    end;
    En effet je devrais pouvoir faire : ExcelApp.ActiveWorkBook.CustomDocumentProperties['Toto'].Value:= 'Titi';
    Mais le compilateur refuse et ne me propose pas les Champs appropriés
    Je suppose qu'il devrait falloir faire un genre d'interrogation d'interface par rapport à IDispatch mais comment faire ???

    Merci pour vos propositions

    Amicalement Laurent
    C++ BUILDER & DELPHI

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    juillet 2002
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2002
    Messages : 61
    Points : 63
    Points
    63
    Par défaut
    Bonsoir à tous,

    Pour ceux que ça interesse, voici la solution:
    Rappel du Pb:
    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
     
    // Fichier Excel2000.pas
    _Workbook = interface(IDispatch)
        ['{000208DA-0000-0000-C000-000000000046}']
    	....
    	....
    // La propriété posant problème...  	
          property CustomDocumentProperties: IDispatch read Get_CustomDocumentProperties;
    end;
     
    // Fichier Office2000.pas
    DocumentProperties = interface(IDispatch)
        ['{2DF8D04D-5BFA-101B-BDE5-00AA0044DE52}']
        ...
        function Get_Item(Index: OleVariant; lcid: Integer; out ppIDocProp: DocumentProperty): HResult; stdcall;
     
    end;
     
    DocumentProperty = interface(IDispatch)
        ['{2DF8D04E-5BFA-101B-BDE5-00AA0044DE52}']
        ...   
        function Get_Value(lcid: Integer; out pvargRetVal: OleVariant): HResult; stdcall;
        ...
    end;
    Nous retrouvons en effet les méthodes nous intessant:
    CustomDocumentProperties.Get_Item['Nom Prop].Get_Value...

    Méthode pour Lire une propriété dans notre classeur...
    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
     
    uses
        Variants, VarUtils, Excel2000, Office2000;
     
    function TWbInstance.GetDocumentProperties(PropName: string): OleVariant;
    const
    // GUID de l'Interface CustomProperties
       IID_DocumentProperties: TGUID = '{2DF8D04D-5BFA-101B-BDE5-00AA0044DE52}';
    var
       IProps  : DocumentProperties;
       IProp   : DocumentProperty;
       Value   : OleVariant;
    begin
       Result:= UnAssigned;
       if(ExcelApp.Workbooks.Count <> 0)then
       begin
          ExcelApp.ActiveWorkbook.CustomDocumentProperties.QueryInterface(IID_DocumentProperties, IProps);
          if Assigned(IProps)then
          try
             IProps.Get_Item(PropName, 0, IProp);
             IProp.Get_Value(0, Value);
             Result:= Value;
          finally
             IProp:= nil;
             IProps:= nil;
             VariantClear(TVarData(Value));
          end;
       end;
    end;
     
    // Méthode appelante...
    function TWbInstance.GetWorkPath: string;
    var
       V : OleVariant;
    begin
       Result:= '';
       V:= GetDocumentProperties('WorkPath');
       if not VarIsEmpty(V)then
       begin
          Result:= VarToStr(V);
       end;
    end;
    Voila c'est tout

    Laurent
    C++ BUILDER & DELPHI

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

Discussions similaires

  1. [Kylix] PB property published?
    Par le_barbu dans le forum EDI
    Réponses: 2
    Dernier message: 23/12/2003, 21h01
  2. [struts] utiliser plusieurs fichiers properties
    Par jaimepasteevy dans le forum Struts 1
    Réponses: 7
    Dernier message: 03/10/2003, 18h02
  3. Published property d'un compo conservées pendant l'exécution
    Par bobby-b dans le forum Composants VCL
    Réponses: 2
    Dernier message: 04/09/2003, 11h15
  4. [warning][properties]problème de police introuvable
    Par cyrdec dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 11/04/2003, 18h41
  5. [transtypage]PChar et WideString
    Par rbag dans le forum Bases de données
    Réponses: 2
    Dernier message: 05/09/2002, 21h12

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