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

C++Builder Discussion :

Probleme de traduction d'une fonction Delphi en BCB


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut Probleme de traduction d'une fonction Delphi en BCB
    Bonsoir:
    Je convertis un exemple Delphi sur l'utilisation de OpenOffice et je cale sur la traduction d'un passage de parametres.
    en Delphi
    Locale.Country := 'FR';
    ce que j'ai essaye et qui provoque systematiquement une erreur
    vOOoLocale.OleFunction("Country", "FR");
    ou
    vOOoLocale.OleProcedure("Country", "FR");
    ou
    vOOoLocale.OlePropertySet("Country", "FR");
    ou
    vOOoLocale.OlePropertyGet("Country", "FR");

  2. #2
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Je n'ai toujours pas trouve une solution.
    Voila le code Delphi
    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
     
    Var
      Locale: variant;
      MaCellule : variant;
    Begin
      MaCellule := Mafeuille.getCellByPosition(0, 0);
      MaCellule.setPropertyValue('CharFontName', 'Arial');
      MaCellule.setPropertyValue('CharHeight', 8);
      MaCellule.setPropertyValue('CharWeight', 150);
      MaCellule.setPropertyValue('CharPosture',
           CoreReflection.forName('com.sun.star.awt.FontSlant').getField('ITALIC').get());
      CoreReflection.forName('com.sun.star.lang.Locale').createObject(Locale);
      Locale.Country := 'FR';
      Locale.Language := 'fr';
      Locale.Variant := 'fr';
      MaCellule.setPropertyValue('CharLocale', Locale);
    end;
    Voici je que j'ai fait
    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
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include <SysUtils.hpp>
    #include <systvar.h>
    #include <ComObj.hpp> // a inclure obligatoirement
    #include <Variants.hpp> // utile dans certains cas
    #include "Ouverture_OpenOffice.h"  // nom du programme en cour
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    Variant vOOoOpenOffice, vOOoDocument, vOOoDesktop, vOOoLoadParams, CoreReflection;
    Boolean vOOoDocumentExist;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    try
    {
      vOOoOpenOffice = CreateOleObject("com.sun.star.ServiceManager");
    }
    catch (...)
    {
     // si on passe ici c'est qu'il y a une erreur
    }
    if (VarType(vOOoOpenOffice) == varDispatch)
    vOOoDesktop = vOOoOpenOffice.OleFunction("createInstance", "com.sun.star.frame.Desktop");
    int Bounds[2] = {0,-1};
    vOOoLoadParams = VarArrayCreate(Bounds, 1, varVariant);
    // ici on ouvre un nouveau document vierge calc
    vOOoDocument = vOOoDesktop.OleFunction("LoadComponentFromURL", "private:factory/scalc", "_blank", 0, vOOoLoadParams);
    vOOoDocumentExist = !(VarIsEmpty(vOOoOpenOffice) || VarIsNull(vOOoOpenOffice)); // false
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
     
    // la fermeture brutale
        vOOoDesktop.OleFunction("terminate"); //
        vOOoDesktop = Unassigned();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
    // on place le code a tester ici
    Variant vOOoMonClasseur;
    Variant vOOoMaFeuille;
    Variant vOOoLocale;
    Variant vOOoCellule;
     
    CoreReflection = vOOoOpenOffice.OleFunction("createInstance", "com.sun.star.reflection.CoreReflection");
    vOOoMonClasseur = vOOoDocument.OleFunction("getSheets");
    vOOoMaFeuille = vOOoMonClasseur.OleFunction("GetByName", "Feuille1");
    vOOoCellule = vOOoMaFeuille.OleFunction("getCellByPosition", 0, 0);
    vOOoCellule.OleFunction("setPropertyValue", "CharFontName", "Arial");
    vOOoCellule.OleFunction("setPropertyValue", "CharHeight", 10);
    vOOoCellule.OleFunction("setPropertyValue", "CharWeight", 150);
    vOOoCellule.OleFunction("setPropertyValue", "CharPosture", CoreReflection.OleFunction("forName", "com.sun.star.awt.FontSlant").OleFunction("getField", "ITALIC").OleFunction("get", ""));
    CoreReflection.OleFunction("forName", "com.sun.star.lang.Locale").OleFunction("createObject", vOOoLocale);
     
    // Ici je n'arrive pas a passer ("Country", "FR") dans vOOoLocale
    vOOoLocale.OlePropertySet("Country", "FR");
    /*
    ou
    vOOoLocale.OleProcedure("Country", "FR");
    ou
    vOOoLocale.OlePropertySet("Country", "FR");
    ou
    vOOoLocale.OlePropertyGet("Country", "FR");
    */

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 21
    Par défaut
    Bonjour Blondelle.

    Heureux de voir que je ne suis pas le seul à m'amuser avec Ole OpenOffice et BCB!

    Je pense que le code suivant devrait fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    vOOoLocale.OlePropertySet("name","Country");
    vOOoLocale.OlePropertySet("value","Fr");
     
    vOOoCellule.OleFunction("CharLocale", vOOoLocale);
    Je n'ai malheureusement pas le temps de le tester ce soir.

  4. #4
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Alors voila ou j'en suis:
    Si j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CoreReflection = vOOoOpenOffice.OleFunction("createInstance", "com.sun.star.reflection.CoreReflection");
    CoreReflection.OleFunction("forName", "com.sun.star.lang.Locale").OleFunction("createObject", vOOoLocale);
     
    vOOoLocale.OlePropertyGet("name", "Country");
    ou
    vOOoLocale.OlePropertySet("name", "Country");
    ou
    vOOoLocale.OleProcedure("name", "Country");
    ou
    vOOoLocale.OleFunction("name", "Country");
    J'ai systematiquement une erreur

    Si je fais ceci pas d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    vOOoLocale = CoreReflection.OleFunction("forName", "com.sun.star.lang.Locale");
     
    vOOoLocale.OlePropertyGet("name", "Country");
    Je ne peu qu'utiliser OleProperetyGet, sinon j'ai une erreur peut etre que la propriete "lang.Locale" ne permet que la lecture?

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 21
    Par défaut
    Je viens de faire un test rapide : ceci fonctionne sans aucune erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    vOOoLocale = vOOoOpenOffice.OleFunction("Bridge_GetStruct", "com.sun.star.lang.Locale");
     
    vOOoLocale.OlePropertySet("Country", "FR");
    vOOoLocale.OlePropertySet("Language", "fr");
    vOOoLocale.OlePropertySet("Variant", "fr");
     
    vOOoCellule.OleFunction("setPropertyValue","CharLocale", vOOoLocale);
    (La fonction "Bridge_GetStruct" permet de créer facilement des propriétés, alors que le passage par CoreReflection est souvent problématique avec BCB.)

    Mais tout cela ne donne guère d'effet visible... Est-ce vraiment applicable à une cellule ?

  6. #6
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Merci pour tes reponses TABZ:
    J'ai d'autres fonctions avec "CoreReflection" je peu donc les remplacer par "Bridge_GetStruct"

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

Discussions similaires

  1. Probleme de traduction d'une declaration Delphi
    Par blondelle dans le forum C++Builder
    Réponses: 7
    Dernier message: 26/10/2008, 20h43
  2. Réponses: 6
    Dernier message: 10/08/2006, 14h47
  3. Réponses: 1
    Dernier message: 16/06/2006, 16h12
  4. Grand Probleme d'appele d'une fonction
    Par Soufyane dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 17/02/2006, 15h57
  5. Probleme de pointeur sur une fonction
    Par nicky78 dans le forum C
    Réponses: 2
    Dernier message: 23/05/2004, 20h26

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