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

Delphi Discussion :

Propriété Text d'un TCornerButton


Sujet :

Delphi

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2004
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Propriété Text d'un TCornerButton
    Bonjour,

    Je n'arrive pas à atteindre la propriété Text d'un TCornerButton.
    Avec ce code cela fonctionne très bien avec un TBoutton , TLabel, TSpeedButton.
    Si quelqu’un pouvait m'expliquer ?

    Merci

    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
     
    procedure TFAccueil.LangueClick(Sender: TObject);
    var
        i, x: Integer;
        Composent :  TComponent ;
        Forme : TForm ;
     
    begin
      Language:=(sender as Tbutton).Tag;
      If MList.Count > 0 then
        for i := Application.ComponentCount - 1 downto 0 do
        if Application.components[i] is TForm then
        begin
           Forme := TForm(application.components[i]);
     
           if Forme.Name <> 'FLangues' then
           for x := Forme.ComponentCount - 1 downto 0 do
           begin
             Composent := Forme.Components[x];
             if Composent.Tag > 0 then
             begin
                 RecordTxt := MList.Items[Composent.Tag-1] ;
     
                 if Forme.Components[x] is TLabel then
                       TLabel(FindComponent(Composent.Name)).Text         := RecordTxt^.LG[Language] ;
     
                 if Forme.Components[x] is TButton Then
                        TButton(FindComponent(Composent.Name)).Text       := RecordTxt^.LG[Language] ;
     
                 if Forme.Components[x] is TSpeedButton Then
                        TSpeedButton(FindComponent(Composent.Name)).Text  := RecordTxt^.LG[Language] ;
     
                if Forme.Components[x] is TCornerButton then
                        TCornerButton(FindComponent(Composent.Name)).Text := 'essai'//RecordTxt^.LG[Language] ;
             end;
           end;
        end;
    end;
    Nom : TCornerButton.png
Affichages : 205
Taille : 16,5 Ko

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 : 13 447
    Points : 24 844
    Points
    24 844
    Par défaut


    Pourquoi ne pas utiliser correctement vos variables ?

    FindComponent dans votre façon de faire cherche dans l'instance de TFAccueil et non dans l'instance de Forme

    TCornerButton c'est FMX ?

    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
    procedure TFAccueil.LangueClick(Sender: TObject);
    var
      i, x: Integer;
      Composent : TComponent ;
      Forme : TForm ;
    begin
      Language:=(sender as Tbutton).Tag;
      If MList.Count > 0 then
      begin
        for i := Application.ComponentCount - 1 downto 0 do
        begin
          if Application.components[i] is TForm then
          begin
            Forme := TForm(application.components[i]);
     
            if Forme.Name <> 'FLangues' then
            begin
              for x := Forme.ComponentCount - 1 downto 0 do
              begin
               Composent := Forme.Components[x];
               if Composent.Tag > 0 then
               begin
                 RecordTxt := MList.Items[Composent.Tag-1] ;
     
                 if Composent is TLabel then
                   TLabel(Composent).Text := RecordTxt^.LG[Language] 
                 else if Composent   is TButton Then
                   TButton(Composent).Text := RecordTxt^.LG[Language]
                 else if Composent is TSpeedButton Then
                    TSpeedButton(Composent).Text := RecordTxt^.LG[Language] 
                 else if Composent is TCornerButton then
                   TCornerButton(Composent).Text := 'essai'//RecordTxt^.LG[Language] ;
               end;
             end;
           end;
         end;
       end;
     end;
    end;
    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 émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 490
    Points : 2 752
    Points
    2 752
    Billets dans le blog
    10
    Par défaut
    Je pense que l'erreur vient de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if Composent.Tag > 0 then

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 029
    Points : 40 927
    Points
    40 927
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par ShaiLeTroll Voir le message
    TCornerButton c'est FMX ?
    Oui, dans la "page" supplément de la palette
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 490
    Points : 2 752
    Points
    2 752
    Billets dans le blog
    10
    Par défaut
    J'ai testé. L'erreur vient du fait que la propriété Tag n'est pas renseignée pour les TCornerButtons, donc rien à voir avec le composant lui même.
    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
     
    var
        i, x: Integer;
        Composent :  TComponent ;
        Forme : TForm ;
     
    begin
        for i := Application.ComponentCount - 1 downto 0 do
        if Application.components[i] is TForm then
        begin
           Forme := TForm(application.components[i]);
           if Forme.Name <> 'FLangues' then
           for x := Forme.ComponentCount - 1 downto 0 do
           begin
             Composent := Forme.Components[x];
             //if Composent.Tag > 0 then
             begin
                if Forme.Components[x] is TCornerButton then
                        TCornerButton(FindComponent(Composent.Name)).Text := 'essai' ;
             end;
           end;
        end;
    end;

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 : 13 447
    Points : 24 844
    Points
    24 844
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Oui, dans la "page" supplément de la palette
    Merci, je l'ai aussi dans XE2 (même deux fois dans la palette), ne faisant jamais de FMX, je ne connais pas ces nouveaux controles



    Citation Envoyé par ALWEBER Voir le message
    Je pense que l'erreur vient de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if Composent.Tag > 0 then
    Comment peux-tu savoir cela sans le code ?
    Qui te dis que TMario n'a pas faite cette partie ?
    La propriété Tag étant publié depuis le TComponent, toute classe hérité y a accès, il a pu définir le Tag en conception IHM par exemple


    Citation Envoyé par ALWEBER Voir le message
    J'ai testé. L'erreur vient du fait que la propriété Tag n'est pas renseignée pour les TCornerButtons, donc rien à voir avec le composant lui même.

    Citation Envoyé par TMario Voir le message
    Je n'arrive pas à atteindre la propriété Text d'un TCornerButton
    avec ce code cela fonction très bien avec un TBoutton , TLabel, TSpeedButton
    L'image montre qu'il est en cours de débogage (point d'arrêt actif et en prêt à passer en éxécution) avec un accès un instance <nil> et donc une violation à l'adresse <nil>.text
    TMario pense que cela fonctionne avec un TButton , TLabel, TSpeedButton mais j'ai clairement un doute sur la véracité de ces propos !


    Faudrait vraiment avoir la confirmation sur le fait que FindComponent est fait sur Self (TFAccueil) au lieu d'être forme sur Forme (toutes formes de l'application sauf TFLangues) est l'origine du problème
    Même si l'on peut supposer que TFAccueil soit la MainForm donc la première instance dans "Forme"

    Je dirais que sur TFAccueil retourné comme "Forme", cela fonctionne avec I = 0 d'où l'illusion qu'avec TBoutton , TLabel, TSpeedButton cela fonctionne
    Mais lorsque l'on passe sur I = 1, une autre TForm a un TCornerButton comme premier composant et cela plante en cherchant ce contrôle dans TFAccueil, ce qui donne l'illusion qu'avec TCornerButton cela ne fonctionne pas


    Je pense qu'en utilisant la variable locale Composent, déjà on y verra plus clair
    sans compter cela sera en plus bien plus rapide évitant les boucles internes du FindComponent
    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

  7. #7
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 029
    Points : 40 927
    Points
    40 927
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    en fait je ne comprends pas l'objectif, à priori une sorte localisation (internationalisation/traduction) de programme ? en FMX il y a TLang qui peut faire ça très bien en plus il y a même une propriété qui peut empêcher la traduction automatique
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 : 13 447
    Points : 24 844
    Points
    24 844
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    en fait je ne comprends pas l'objectif, à priori une sorte localisation (internationalisation/traduction) de programme ? en FMX il y a TLang qui peut faire ça très bien en plus il y a même une propriété qui peut empêcher la traduction automatique
    C'est bon à savoir de TLang si un jour j'ai du FMX à faire, merci pour l'info
    Je suis encore sur GnuGetText avec des fichiers PO en VCL, la plaie l'i18n !
    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

  9. #9
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 029
    Points : 40 927
    Points
    40 927
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    C'est bon à savoir de TLang si un jour j'ai du FMX à faire, merci pour l'info
    De rien, mais il y a quand même quelques bémols à TLang, je ne suis pas persuadé que cela soit aussi bien que des composants tiers comme DKLang, mais bon je n'ai aps non plus pousser mes essais
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  10. #10
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 490
    Points : 2 752
    Points
    2 752
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Comment peux-tu savoir cela sans le code ?
    Qui te dis que TMario n'a pas faite cette partie ?
    La propriété Tag étant publié depuis le TComponent, toute classe hérité y a accès, il a pu définir le Tag en conception IHM par exemple
    J'ai repris le code source qui nous avait été proposé et je l'ai réduis progressivement pour isoler le problème.
    J'ai mis ce code opérationnel dans mon précédent post ce qui explique mon affirmation

  11. #11
    Candidat au Club
    Inscrit en
    Novembre 2004
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Fonctionne très bien
    Citation Envoyé par ShaiLeTroll Voir le message


    Pourquoi ne pas utiliser correctement vos variables ?

    FindComponent dans votre façon de faire cherche dans l'instance de TFAccueil et non dans l'instance de Forme

    TCornerButton c'est FMX ?

    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
    procedure TFAccueil.LangueClick(Sender: TObject);
    var
      i, x: Integer;
      Composent : TComponent ;
      Forme : TForm ;
    begin
      Language:=(sender as Tbutton).Tag;
      If MList.Count > 0 then
      begin
        for i := Application.ComponentCount - 1 downto 0 do
        begin
          if Application.components[i] is TForm then
          begin
            Forme := TForm(application.components[i]);
     
            if Forme.Name <> 'FLangues' then
            begin
              for x := Forme.ComponentCount - 1 downto 0 do
              begin
               Composent := Forme.Components[x];
               if Composent.Tag > 0 then
               begin
                 RecordTxt := MList.Items[Composent.Tag-1] ;
     
                 if Composent is TLabel then
                   TLabel(Composent).Text := RecordTxt^.LG[Language] 
                 else if Composent   is TButton Then
                   TButton(Composent).Text := RecordTxt^.LG[Language]
                 else if Composent is TSpeedButton Then
                    TSpeedButton(Composent).Text := RecordTxt^.LG[Language] 
                 else if Composent is TCornerButton then
                   TCornerButton(Composent).Text := 'essai'//RecordTxt^.LG[Language] ;
               end;
             end;
           end;
         end;
       end;
     end;
    end;
    Merci
    TCornerButton(Composent).Text := RecordTxt^.LG[Language] ; Fonctionne

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

Discussions similaires

  1. Propriété "Text" en lecture seule
    Par natie_49 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 08/01/2007, 21h25
  2. Réponses: 2
    Dernier message: 31/12/2006, 17h26
  3. Réponses: 4
    Dernier message: 16/10/2006, 14h12
  4. [C#] proprités text d'une Combobox
    Par kooljy dans le forum Windows Forms
    Réponses: 3
    Dernier message: 29/06/2006, 09h24
  5. [Delphi 6] Problème avec la propriété Text d'un composant
    Par bionoir dans le forum Composants VCL
    Réponses: 4
    Dernier message: 08/12/2005, 11h23

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