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 :

Simulation clique boutons


Sujet :

C++Builder

  1. #21
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 17
    Par défaut
    Salut Henderson !

    En fait, je dois créer une application multi langue. Quand je charge mes mots sur mes composants, ils ne s'affichent pas directement (j'ai essayé un refresh mais je n'ai pas eu beaucoup de succès...). Du coup pour que la valeur s'affiche instantanément je simule un clic sur mes composants.

    J'ai réussi avec 2 composants sur 5 ( ).

    Les AdvEditBtn sont composés d'un Edit et d'un Button. Et je voudrais simuler un clic sur l'Edit de ce composants. Malheureusement, la fonction "click()" n'existe pas pour ce composant. Mais quand je clic sur l'Edit dans l'application, mas valeur change.

    Voilà, j'espère que c'est clair ...

    Merci pour ton aide

  2. #22
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 432
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 432
    Par défaut
    Salut !

    Plus ou moins clair ...

    S'il s'agit de modifier le texte affiché par les composants en fonction d'une langue particulière, il y a un truc assez simple à mettre en oeuvre !

    En fait, il s'agit de terminer ton logiciel pour une langue donnée (à ce stade, peu importe ici la langue utilsée).

    Et le point important est que ton exé va toujours créer ses objets dans le même ordre, en particulier tout ce qui dérive de TComponent.

    Cela signifie que lorsque ton exécutable sera exécuté la première fois, il te sera possible de générer un fichier texte pour y collecter chaque mot ou phrase.

    Une fois que cette étape est terminée, il te suffit de créer autant de fichiers qu'il y aura de langues proposées, chacun comportant le même nombre de mots ... mais traduits et ce qui sera à faire manuellement !

    Le changement de langue sera donc l'opération inverse, consistant à lire le contenu d'un fichier .TXT, d'extraire chaque mot pour l'affecter à un composant.

    On se servira donc de l'ordre de création des composants qui transparaît dans la propriété TComponents* Components[] de TForm.

    Voici d'une manière synthétique, ce qu'il y aura à développer :

    a) On part du principe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TStringList *Mots;
    enum{english=0, french, german, italian, spanish, local};
    AnsiString FilePath;
    b) pour la collecte des mots une fois que ton logiciel est prêt à être diffusé :
    C'est une méthode à compléter... à modifier en fonction des classes utilisées dans ton programme.
    Dans ce que je montre, j'ai utilisé au moins 1 objet de telle ou telle classe !!!

    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
    void __fastcall TForm1::Close1Click(TObject *Sender)
    {
    AnsiString F;
    int i, j;
    TComponent *C;
    TRadioGroup *RG;
    Mots->Clear();
    for(j=0; j < ComponentCount; j++) {
    C = Components[j];
     
    if(C->InheritsFrom( __classid(TMainMenu))) Mots->Add( "MainMenu"); // <== ne fait rien de plus
    else if(C->InheritsFrom( __classid(TMenuItem))) Mots->Add( ((TMenuItem*)C)->Caption );
    else if(C->InheritsFrom( __classid(TEdit))) Mots->Add( ((TEdit*)C)->Text );
    else if(C->InheritsFrom( __classid(TLabel))) Mots->Add( ((TLabel*)C)->Caption );
    else if(C->InheritsFrom( __classid(TPanel))) Mots->Add( ((TPanel*)C)->Caption );
    else if(C->InheritsFrom( __classid(TButton))) Mots->Add( ((TButton*)C)->Caption );
    else if(C->InheritsFrom( __classid(TRadioButton))) Mots->Add( ((TRadioButton*)C)->Caption );
    else if(C->InheritsFrom( __classid(TSpeedButton))) Mots->Add( ((TSpeedButton*)C)->Caption );
    else if(C->InheritsFrom( __classid(TCheckBox))) Mots->Add( ((TCheckBox*)C)->Caption );
    else if(C->InheritsFrom( __classid(TGroupBox))) Mots->Add( ((TGroupBox*)C)->Caption );
    else if(C->InheritsFrom( __classid(TRadioGroup)))
            {
            RG = (TRadioGroup*)C;
            F = RG->Caption;
            for(i = 0; i < RG->Items->Count; i++ )
                {
                F = F + "-" + RG->Items->Strings[i];
                }
            Mots->Add( F );
     
            }
     
    //...
        }
    F = FilePath + "\\" + "engl.TXT";
    Mots->SaveToFile( F );
     
    Close();
    }
    //--------

    c) pour l'actualisation de la langue :


    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
    void ChargerLangue(int Langue)
    {
    AnsiString F;
    switch(Langue) // en relation avec l'enumération
        {
        case english : F = "engl.txt"; break;
        case french  : F = "fran.txt"; break;
        case german  : F = "germ.txt"; break;
        case italian : F = "ital.txt"; break;
        case spanish : F = "span.txt"; break;
        case local   : F = "local.txt"; break;
        }
    F = FilePath + "\\" + F;
    if(FileExists( F ))
        {
        Mots->LoadFromFile( F );
        }
    else
        {
        //...
        }
    }
    Après chargement, il faut donc modifier chaque objet devant l'être :

    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
    void ChangerMots(TComponent *Component)
    {
    int i, j, n;
    AnsiString N;
    AnsiString A;
    TComponent *C;
    TRadioGroup *RG;
    for(j=0; (j < Component->ComponentCount) && (j < Mots->Count); j++)
        {
        N = Mots->Strings[j];
        C = Component->Components[j];
        if(C->InheritsFrom(__classid(TMainMenu))) j = j; // <== ne fait rien de plus
        else if(C->InheritsFrom(__classid(TMenuItem))) ((TMenuItem*)C)->Caption = N;
        else if(C->InheritsFrom(__classid(TEdit))) ((TEdit*)C)->Text = N;
        else if(C->InheritsFrom(__classid(TLabel))) ((TLabel*)C)->Caption = N;
        else if(C->InheritsFrom(__classid(TPanel))) ((TPanel*)C)->Caption = N;
        else if(C->InheritsFrom(__classid(TButton))) ((TButton*)C)->Caption = N;
        else if(C->InheritsFrom(__classid(TRadioButton))) ((TRadioButton*)C)->Caption = N;
        else if(C->InheritsFrom(__classid(TSpeedButton))) ((TSpeedButton*)C)->Caption = N;
        else if(C->InheritsFrom(__classid(TCheckBox))) ((TCheckBox*)C)->Caption = N;
        else if(C->InheritsFrom(__classid(TGroupBox))) ((TGroupBox*)C)->Caption = N;
        else if(C->InheritsFrom( __classid(TRadioGroup)))
            {
            RG = (TRadioGroup*)C;
            n = N.Pos("-");
            RG->Caption = N.SubString(1, n-1);
            for(i = 0; i < RG->Items->Count; i++ )
                {
                N = N.SubString(n+1, N.Length());
                n = N.Pos("-");
                if(n != 0)RG->Items->Strings[i] = N.SubString(1, n-1);
                else RG->Items->Strings[i] = N;
                }
            }
        }
    }
    Et pour l'usage :

    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
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    FilePath = ExtractFilePath( Application->ExeName );
    Mots = new TStringList();
    }
    //------------- Eventuellement rajouter le destructeur
    __fastcall TForm1::~TForm1()
    {
    Mots->Clear();
    delete Mots;
    }
    //----------
     
    void __fastcall TForm1::English1Click(TObject *Sender)
    {
    ChargerLangue(english);
    ChangerMots( this );
    }
    //----------
    void __fastcall TForm1::French1Click(TObject *Sender)
    {
    ChargerLangue(french);
    ChangerMots( this );
    }
    // ...
    J'ai testé avec :

    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
    __published:	// Composants gérés par l'EDI
        TMainMenu *MainMenu1; // <== n'est pas directement concerné mais dérive de TComponent
        TMenuItem *File1;
        TMenuItem *English1;
        TMenuItem *French1;
        TMenuItem *German1;
        TMenuItem *Italian1;
        TMenuItem *Spanish1;
        TMenuItem *Local1;
        TMenuItem *N1; // le séparateur "-"
        TMenuItem *Close1;
        TLabel *Label1;
        TPanel *Panel1;
        TSpeedButton *SpeedButton1;
        TCheckBox *CheckBox1;
        TButton *Button1;
        TRadioButton *RadioButton1;
        TGroupBox *GroupBox1;
        TRadioGroup *RadioGroup1; // avec 4 items
        TCheckBox *CheckBox2;
        TCheckBox *CheckBox3;
        TCheckBox *CheckBox4;
        TLabel *Label2;
    S'il y a mieux ...en ce qui me concerne j'ai testé avec BCB3 Pro donc ... avec les moyens du bord !

    En souhaitant une bonne année à tous !

    A plus !

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/07/2014, 16h22
  2. [Débutant] Lien HTML simulant clique sur Bouton ASP.net
    Par jck2003 dans le forum ASP.NET
    Réponses: 6
    Dernier message: 28/07/2011, 15h09
  3. Simuler clique sur bouton
    Par jerem59300 dans le forum Windows Mobile
    Réponses: 3
    Dernier message: 20/10/2007, 02h03
  4. [Vb.NET]simulation de bouton lors de la touche entrée
    Par Monstros Velu dans le forum ASP.NET
    Réponses: 2
    Dernier message: 13/04/2006, 10h34
  5. Simuler le bouton réinitialiser via un autre bouton ?
    Par beegees dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 28/02/2006, 11h49

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