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

Langage Delphi Discussion :

Modifier la couleur des tabs d'un pagecontrole


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 187
    Points : 72
    Points
    72
    Par défaut Modifier la couleur des tabs d'un pagecontrole


    La question est un peu dans le titre
    Je souhaite assigner/ modifier la couleur des tabs de mon pagecontrole et je ne vois vraiment pas comment!
    Tout ce que je sais faire pour le moment, c'est modifier la couleur du tab selectionne :
    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
    procedure TForm1.PageControl1DrawTab(Control: TCustomTabControl;
      TabIndex: Integer; const Rect: TRect; Active: Boolean);
    begin
    Control.Canvas.Brush.Color := ClWhite;
    Control.Canvas.FillRect(Rect);
     
    if (Active = true) then
        begin
        Control.Canvas.Font.Color := clyellow;
        Control.Canvas.Brush.Color := clblue;
        Control.Canvas.FillRect(Rect);
        end;   
    Control.Canvas.TextOut(Rect.left+110,Rect.top+12,
    PageControl1.Pages[tabindex].Caption);
    end;
    Un peu d'aide serait vraiment cool
    thx in advance.

  2. #2
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    salut,

    essaye ce code:
    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
    {...}
     
    type
      TTabSheet = class(ComCtrls.TTabSheet)
      private
        FColor: TColor;
        procedure SetColor(Value: TColor);
        procedure WMEraseBkGnd(var Msg: TWMEraseBkGnd);
          message WM_ERASEBKGND;
      public
        constructor Create(aOwner: TComponent); override;
        property Color: TColor read FColor write SetColor;
      end;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        PageControl1: TPageControl;
        TabSheet1: TTabSheet;
        TabSheet2: TTabSheet;
        TabSheet3: TTabSheet;
        procedure PageControl1DrawTab(Control: TCustomTabControl;
          TabIndex: Integer; const Rect: TRect; Active: Boolean);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    constructor TTabSheet.Create(aOwner: TComponent);
    begin
      inherited;
      FColor := clBtnFace;
    end;
     
    procedure TTabSheet.SetColor(Value: TColor);
    begin
      if FColor <> Value then
      begin
        FColor := Value;
        Invalidate;
      end;
    end;
     
    procedure TTabSheet.WMEraseBkGnd(var Msg: TWMEraseBkGnd);
    begin
      if FColor = clBtnFace then
        inherited
      else
      begin
        Brush.Color := FColor;
        Windows.FillRect(Msg.dc, ClientRect, Brush.Handle);
        Msg.Result := 1;
      end;
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Tabsheet1.Color := clWhite;
      TabSheet2.Color := clLime;
    end;
     
    // PageControl1.OwnerDraw := True !
     
    procedure TForm1.PageControl1DrawTab(Control: TCustomTabControl;
      TabIndex: Integer; const Rect: TRect; Active: Boolean);
    var
      AText: string;
      APoint: TPoint;
    begin
      with (Control as TPageControl).Canvas do
      begin
        Brush.Color := ClGreen;
        FillRect(Rect);
        AText := TPageControl(Control).Pages[TabIndex].Caption;
        with Control.Canvas do
        begin
          APoint.x := (Rect.Right - Rect.Left) div 2 - TextWidth(AText) div 2;
          APoint.y := (Rect.Bottom - Rect.Top) div 2 - TextHeight(AText) div 2;
          TextRect(Rect, Rect.Left + APoint.x, Rect.Top + APoint.y, AText);
        end;
      end;
    end;
    A+

    NABIL74

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 187
    Points : 72
    Points
    72
    Par défaut
    Merci Nabil74 pour ta réponse (j'ai pas tout compris mais j'ai quand même pris le temps s'essayer).

    Le résultat: C'est les panneau de TabShit1 et TabShit2 qui sont colorié et non les tabs eux même.

    Tu m'a permis de faire ceci:



    Et je cherche à faire cela:

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 42
    Points : 51
    Points
    51
    Par défaut
    Tout ce que je sais faire pour le moment, c'est modifier la couleur du tab selectionne :
    du coup j'avais aussi compris que tu voulait changer la couleur de la page.
    (puisque tu savait déjà faire pour le tab)

    si le problème est juste de colorier les autres tabs, il suffit d'utiliser tabindex :
    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
     
    procedure TForm1.PageControl1DrawTab(Control: TCustomTabControl;
      TabIndex: Integer; const Rect: TRect; Active: Boolean);
    begin
      if (Active = true) then begin
          Control.Canvas.Font.Color := clyellow;
          Control.Canvas.Brush.Color := clblue;
      end else begin
          Control.Canvas.Font.Color := clBlack;
          case tabindex of
            0: Control.Canvas.Brush.Color := clGreen;
            1: Control.Canvas.Brush.Color := clRed;
            2: Control.Canvas.Brush.Color := clYellow;
          end;
      end;
      Control.Canvas.FillRect(Rect);
      Control.Canvas.TextOut(Rect.left+2,Rect.top+2,
        PageControl1.Pages[tabindex].Caption);
    end;

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 534
    Points : 25 082
    Points
    25 082
    Par défaut
    Informations à ce sujet, j'ai remarqué des problèmes de colorisation d'un TTabControl sur Windows 2008 Server (chez un client qui s'est proposé pour tester)
    Faut que je teste plus loin (faut que j'installe 2008 avec un D7 dessus pour tester en débug ...)
    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

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 187
    Points : 72
    Points
    72
    Par défaut
    C'est cool!!! On se rapproche un peu plus de la solution

    Dernier petit problème : J'ai redimensionné la hauteur et la largeur des tab du PageControl et donc, seul le contour du texte se colorie et non pas tout le tab!

    Comment definir la zone qui doit être colorié ?
    J'imagine que ça va être un truc du genre: "prendre les coordonnées du tab redimenssionné et remplir d'une couleur"

    Thxs in advance ;-)

  7. #7
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 434
    Points : 5 846
    Points
    5 846
    Par défaut
    salut

    as tu deja fait des recherche dans le forum

    exemple ici

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

Discussions similaires

  1. [ezplot] Modifier la couleur des courbes tracées
    Par nini94 dans le forum MATLAB
    Réponses: 3
    Dernier message: 13/06/2008, 11h24
  2. Réponses: 11
    Dernier message: 21/04/2008, 09h42
  3. [plotyy] Modifier la couleur des axes
    Par fab08 dans le forum MATLAB
    Réponses: 3
    Dernier message: 08/04/2008, 14h54
  4. Modifier la couleur des liens dans balise a
    Par hellspawn_ludo dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 29/01/2008, 11h57
  5. Réponses: 6
    Dernier message: 13/01/2007, 13h33

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