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 FMX Delphi Discussion :

[XE8], modifier la couleur de fond d'un TEdit indépendemment du style


Sujet :

Composants FMX Delphi

  1. #1
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut [XE8], modifier la couleur de fond d'un TEdit indépendemment du style
    Bonjour,

    Je souhaite modifier dynamiquement la couleur de fond d'un composant TEdit indépendamment du style sélectionné.
    Le composant contiendra une valeur numérique qui va influer sur la couleur de fond.

    Google n'est pas trop mon ami sur ce coup là , je n'ai rien trouvé de concluant, mais peut-être que l'un d'entre vous a résolu ce petit problème...
    Philippe.

  2. #2
    Membre émérite
    Avatar de Thierry Laborde
    Homme Profil pro
    N/A
    Inscrit en
    Avril 2002
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : N/A

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 391
    Points : 2 529
    Points
    2 529
    Par défaut
    Bonjour,

    Le Background d'une TEdit est basé sur une image stocké dans le style de base. Donc le plus simple serait de modifier ce style pour rajouter par exemple un TRectangle au fond et ensuite jouer sur la propriété Fill de ce TRectangle pour modifier la couleur de l'Edit.

  3. #3
    Membre émérite
    Avatar de Thierry Laborde
    Homme Profil pro
    N/A
    Inscrit en
    Avril 2002
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : N/A

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 391
    Points : 2 529
    Points
    2 529
    Par défaut
    Voici un bout de code si vous ne voulez pas modifier le style à la conception, mais plutôt à l’exécution. Le code modifie le style en rajoutant le TRectangle comme je l'ai indiqué au dessus.
    Sur votre fenêtre vous posez un TEdit : Edit1 et un TButton : Button1. puis sur le click du bouton vous mettez le code suivant :

    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
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Obj: TFmxObject;
      RectEdit: TRectangle;
    begin
      Obj := Edit1.FindStyleResource('background');
      if Assigned(Obj) then
      begin
        RectEdit              := TRectangle.Create(Obj);
        Obj.AddObject(RectEdit);
        RectEdit.Align        := TAlignLayout.Client;
        RectEdit.Stroke.Kind  := TBrushKind.None;
        RectEdit.Fill.Color   := TAlphaColorRec.Red;  // A Remplacer par la couleur souhaitée
        RectEdit.HitTest      := False;
      end;
    end;

  4. #4
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,

    Merci Thierry pour cette piste.

    J'ai juste adapté le code pour éviter de recréer la forme TRectangle à chaque passage et réévaluation de la couleur...

    Cela donne:
    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
    procedure TForm1.EditBackGroundColor(AEdit: TCustomEdit; AColor: TAlphaColor);
    const
      TAGSTR = 'RBGC';
    var
      Obj: TFmxObject;
      RecEdt: TRectangle;
      i: Integer;
    begin
      Obj := AEdit.FindStyleResource('background');
      if Assigned(Obj) then
      begin
        RecEdt := nil;
        for i := 0 to Obj.ChildrenCount - 1 do
          if (Obj.Children[i] is TRectangle) and (Obj.Children[i].TagString = TAGSTR) then
          begin
            RecEdt := TRectangle(Obj.Children[i]);
            Break;
          end;
     
        if RecEdt = nil then
        begin
          RecEdt              := TRectangle.Create(Obj);
          RecEdt.TagString := 'RBGC';
          Obj.AddObject(RecEdt);
          RecEdt.Align        := TAlignLayout.Client;
          RecEdt.Stroke.Kind  := TBrushKind.None;
          RecEdt.HitTest      := False;
        end;
        RecEdt.Fill.Color   := AColor;
      end;
    end;
    Philippe.

  5. #5
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Bonjour,

    Voici une version qui garde le même principe mais en redéclarant TEdit. On pourrait aussi créer et enregistrer un composant TColoredEdit

    notez que je commence par regarder s'il existe un rectangle 'backgroundcolor' qui pourrait avoir été ajouté dans le style de l'objet sans qu'il soit nécessaire de le créer nous même. La valeur de la propriété BackgroundColor est conservée au cas ou le style n'a pas encore été appliqué, ou si on venait à en changer en cours de route.

    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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
     
    unit Unit1;
     
    interface
     
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
      FMX.Controls.Presentation, FMX.Edit, FMX.Objects;
     
    type
      TEdit = class(FMX.Edit.TEdit)
      private
        FBackgroundRect : TRectangle;
        FBackgroundColor: TAlphaColor;
        procedure SetBackgroundColor(Value: TAlphaColor);
      public
        procedure ApplyStyle; override;
        procedure FreeStyle; override;
        property BackgroundColor: TAlphaColor read FBackgroundColor write SetBackgroundColor;
      end;
     
      TForm1 = class(TForm)
        Edit1: TEdit;
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.fmx}
     
    { TEdit }
     
    procedure TEdit.ApplyStyle;
    var
      StyleObject: TFmxObject;
    begin
      inherited;
     
      FBackgroundRect := nil;
     
      StyleObject := FindStyleResource('backgroundcolor');
      if (StyleObject <> nil) and (StyleObject is TRectangle) then
      begin
        FBackgroundRect := StyleObject as TRectangle;
      end else begin
        StyleObject := FindStyleResource('background');
        if StyleObject <> nil then
        begin
          FBackgroundRect := TRectangle.Create(StyleObject);
          StyleObject.AddObject(FBackgroundRect);
          FBackgroundRect.StyleName := 'backgroundcolor';
          FBackgroundRect.Align := TAlignLayout.Client;
          FBackgroundRect.Stroke.Kind := TBrushKind.None;
          FBackgroundRect.HitTest := False;
        end;
      end;
     
      if FBackgroundRect <> nil then
        FBackgroundRect.Fill.Color := FBackgroundColor;
     
    end;
     
    procedure TEdit.FreeStyle;
    begin
      FBackgroundRect := nil;
      inherited;
    end;
     
    procedure TEdit.SetBackgroundColor(Value: TAlphaColor);
    begin
      if FBackgroundColor <> Value then
      begin
        FBackgroundColor := Value;
        if FBackgroundRect <> nil then
          FBackgroundRect.Fill.Color := Value;
      end;
    end;
     
    { TForm1 }
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Edit1.BackgroundColor := TAlphaColorRec.Red;
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      Edit1.BackgroundColor := TAlphaColorRec.Blue;
    end;
     
    end.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/03/2007, 10h18
  2. c# Comment modifier la couleur de fond d'une statusBar
    Par padodanle51 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 06/03/2006, 17h36
  3. Modifier la couleur de fond d'Access (97)
    Par pht33 dans le forum IHM
    Réponses: 1
    Dernier message: 08/12/2005, 23h02
  4. [JTable] Modifier la couleur de fond d'une ligne
    Par joes_bushi dans le forum Composants
    Réponses: 2
    Dernier message: 20/09/2005, 12h13
  5. Modifier la couleur de fond d'un popupmenu
    Par lil_jam63 dans le forum Composants VCL
    Réponses: 6
    Dernier message: 05/08/2004, 20h23

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