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

Composants VCL Delphi Discussion :

[TColorBox] : problème de refresh


Sujet :

Composants VCL Delphi

  1. #1
    Membre averti
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Points : 436
    Points
    436
    Par défaut [TColorBox] : problème de refresh
    Bonjour à tous,

    j'ai un certain nombre de ColorBox dans un TTabSheet que je cherche à initialiser à partir de records.

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    CB_BACKGROUND_LEGENDE.Selected:=FMyCaracteristiquesChart.Legende.Background;
    CB_BACKGROUND_LEGENDE.Repaint; //j'ai essayé Refresh également
    Déclaration des types record FMyCaracteristiquesChart et FMyCaracteristiquesLegende

    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
     
     
      TMyCaracteristiquesLegende=record
        Font:TFont;
        Location:TLegendAlignment;
        Visible:Boolean;
        Background:TColor;
        Bordure:TMyCaracteristiquesBordure;
      end;
     
      TMyCaracteristiquesChart=record
    ...
        Legende:TMyCaracteristiquesLegende;
    ...
      end;
    Le problème que je rencontre c'est que le ColorBox ne s'initialise jamais la première fois. Si je clic de nouveau sur le bouton qui lance ma procédure cela marche correctement : la couleur sélectionnée est bien celle de ma variable Background.

    J'ai testé la valeur de ma variable Background, en l'affectant à un TLabel par exemple, et cela marche correctement (dés le premier lancement de la procédure)=> la couleur du Label est celle que j'ai dans mon record.

    Alors, mystère ? Serait-ce un bug avec les TColorBox ?
    Faut-il procéder autrement ? Sendmessage ?

    Merci d'avance de votre aide

    @
    PpPool

  2. #2
    Membre chevronné
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Points : 1 943
    Points
    1 943
    Par défaut
    Pas de besoin de Repaint ni de Refresh. Cela devrait fonctionner correctement.
    A priori, je dirais que la valeur affectée est remplacée par une autre. Il faudrait donc nous dire quand l'affectation que tu cite a lieu. Si c'est dans un événement, dis-nous lequel. Tu devrais vérifier s'il n'y a pas une autre partie de ton code qui change également la propriété Selected de ton TColorBox.

  3. #3
    Membre averti
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Points : 436
    Points
    436
    Par défaut
    Bonjour Pierre et merci de ta réponse,

    Je vais essayer d'être plus précis. C'est un peu compliqué et difficile à expliquer sorry !

    J'ai une frame appelé FrChart qui me permet de proposer une configuration de graphique sous forme de TTabControl/TTabSheets.

    Dans mes TabSheets, j'ai différents composant (TEdit par exemple et des TColorBox)

    j'ai une frame appelé FrChartExactitude qui hérite de FrChart.
    A ce niveau, je vais récupérer toutes les infos nécessaires de configuration de mon record à partir de fichiers INI pré-paramètrés.

    Pour cela, je fais appel à une classe que j'ai développé (TMyParseurIni), extrait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    TMyParseurIni=class(TMyCommonChart)
      private
        FMyFileIni:TIniFile;
        FMyPathFileIni:AnsiString;
        ...
    public
        constructor Create(MyPathFileIni:AnsiString;MyParsingChart:Boolean); overload;
        constructor Create(MyPathFileIni:AnsiString;MyCaracteristiquesChart:
    TMyCaracteristiquesChart;MyTabSeries:TMyTabSeries); overload;
        destructor Destroy; override;
    end;
    Je récupére un record 'pré-formaté' que je vais ensuite transmettre à une autre classe pour récupérer les données des séries des graphiques.
    Cette classe va procéder à quelques modifications de mon record de départ, et va créer le graphique
    A ce stade, à partir de FrChartExactitude :
    je récupére le TChart
    je récupére mon record définitif

    Ce record je le transmet ensuite à ma classe mère (FrChart), pour l'affichage de la configuration.

    Tout marche bien ! Mes TEdits sont bien rempli, mes autres composants sont bien initialisés (couleur, font, ...) sauf mes TColorBox, qui restent initialisées à black, sauf si je relance ma procédure. !!!Et là çà marche !

    Je n'ai aucun code qui les modifie.

    Lorsqu'il s'agit de TLabel par exemple, la valeur de ma couleur est correctement affichée !

    Pour moi, il s'agit d'un problème de rafraichissement spécifique au ColorBox, entre ma frame Fille (FrChartExactitude), et ma frame Mére(FrChart);

    Voilà, désolé, je peux pas être plus précis sans te pondre 50 pages.

    Ne peut-on pas forcer le refresh à partir d'un SendMessage ?

    Merci de ton aide
    PpPool

  4. #4
    Membre chevronné
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Points : 1 943
    Points
    1 943
    Par défaut
    Comme je l'ai déjà dit, je ne pense pas qu'il s'agisse d'un problème de refraîchissement. Si tu veux en avoir le coeur net, récupère la valeur de la propriété Selected du TColorBox après ton traitement (en ajoutant un bouton de test sur ta frame par exemple) pour voir quelle est la valeur réellement stockée. Je suis persuadé qu'elle ne contient pas ce que tu pense (mais je peux me tromper )
    Ton code de test ne doit pas être situé juste après l'affectation pour tenir compte de changement qui peuvent être réalisés en réponse à un événement (OnShow, Loaded, etc).
    Si tu as du mal à détecter ce qui se passe, tu peux aussi dériver (ou simplement recopier) le composant TColorBox et surcharger sa propriété selected. Cela te permettra de mettre un point d'arrêt au moment de l'affectation et de tracer avec la pile d'appel.

  5. #5
    Membre averti
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Points : 436
    Points
    436
    Par défaut
    Merci pierre de ta réponse

    Citation Envoyé par Pierre Castelain
    Comme je l'ai déjà dit, je ne pense pas qu'il s'agisse d'un problème de refraîchissement. Si tu veux en avoir le coeur net, récupère la valeur de la propriété Selected du TColorBox après ton traitement (en ajoutant un bouton de test sur ta frame par exemple) pour voir quelle est la valeur réellement stockée. Je suis persuadé qu'elle ne contient pas ce que tu pense (mais je peux me tromper )
    Justement cela fonctionne quand j'affecte ma Color à un TLabel par exemple ! ce qui prouve que mon record contient bien ce que je souhaite !!

    Je vais laisser tomber les TColorBox, et faire autrement
    PpPool

Discussions similaires

  1. [C#] Datagridview, dataset, etc Problème de refresh
    Par nitrous007 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 15/12/2006, 14h01
  2. Réponses: 3
    Dernier message: 16/11/2006, 10h34
  3. Problème de refresh dans une JTable
    Par vano dans le forum Composants
    Réponses: 3
    Dernier message: 04/05/2006, 14h57
  4. Problème de refresh
    Par squallJ dans le forum Oracle
    Réponses: 2
    Dernier message: 17/01/2006, 16h28
  5. problème de refresh sur une DBGrid
    Par lidouka dans le forum Bases de données
    Réponses: 4
    Dernier message: 20/12/2005, 17h12

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