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 :

Couleur de fond TTabSheet et TTabControl


Sujet :

Composants VCL Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 157
    Points : 67
    Points
    67
    Par défaut Couleur de fond TTabSheet et TTabControl
    Bonjour,

    J'utilise dans mon projet des composants TPageControl et THTabContol. Je voudrais affecter une couleur de fond à certains de leurs éléments par exemple pour un TTabSheet dans une TPageControl.

    J'ai utilisé pour un TTabsheet le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
         tab_sheet : TTabSheet;
         tab_sheet.Brush.Color := ClRed;
    Mais j'ai pas eu de résultat. le TTabSheet est toujours dans la couleur standard.

    Auriez vous une idée pour pouvoir réaliser cette opération ?

    Merci

  2. #2
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 959
    Points
    6 959
    Par défaut
    Moi, je mettrais un TPanel dans le TTabSheet, et je donnerais la couleur au Panel.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  3. #3
    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
    Et ne pas oublier de changer ParentBackgroundà False du TPanel pour qu'il accepte la couleur malgré un thème Système !



    Au passage, l'inverse, un code pour récupérer la couleur du TTabSheet,
    c'est ce que j'ai fait pour que la couleur de fond de mes TAnimate directement posé sur un TTabSheet soit correcte aussi bien en Thème Windows 2000, XP, Aero et les Styles Delphi VCL

    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
    //------------------------------------------------------------------------------
    class function TTabSheetSLTAssistant.GetThemedBackgroundColor(): TColor;
    var
      Details: TThemedElementDetails;
    begin
      // Si c'est thème système, le TabSheet a une couleur spécifique
      if StyleServices.IsSystemStyle then
      begin
        // Sous Vista, c'est le thème Aero
        if CheckWin32Version(6, 0) then
          Details := StyleServices.GetElementDetails(ttAeroWizardBody)
        else
          Details := StyleServices.GetElementDetails(ttBody);
     
        StyleServices.GetElementColor(Details, ecFillColor, Result);
      end
      else
        Result := ColorToRGB(StyleServices.GetStyleColor(scWindow));
    end;

    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
    //------------------------------------------------------------------------------
    procedure TAnimateSLTAssistant.ActiveThemedTabSheetTransparence();
    var
      DC: HDC;
      TabSheetColor: TColor;
    begin
      FAnimate.Transparent := True; // Avec les thèmes cela ne fonctionne pas correctement, il faut le forcer manuellement !
      if StyleServices.Enabled then
      begin
        FAnimate.DoubleBuffered := True;
     
        // Si c'est thème système, le TabSheet a une couleur spécifique
        TabSheetColor := TTabSheetSLTAssistant.GetThemedBackgroundColor();
     
        FAnimate.Color := TabSheetColor;
        DC := GetDCEx(FAnimate.Handle, 0, DCX_WINDOW or DCX_CACHE or DCX_CLIPSIBLINGS);
        try
          SetBkColor(DC, TabSheetColor);
        finally
          ReleaseDC(FAnimate.Handle, DC);
        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

  4. #4
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 416
    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 416
    Points : 5 814
    Points
    5 814
    Par défaut
    salut

    autant il est assez facile de changer la couleur des onglet autant ça se complique si tu veut tout le classeur

    mais deja l'onglet donne un jolie rendue
    voici la marche a suivre


    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
     
    Type
      TAckPC = class (TPageControl) // sert a accéder a certaine propriété
      end;
     
      TMaForm = Class(TForm)
    ....
     
    procedure TMaForm.PcMainDrawTab(Control: TCustomTabControl;
      TabIndex: Integer; const Rect: TRect; Active: Boolean);
    var
      TabText: string;
      P: TPageControl;
      OutRect : TRect;
    begin
     p :=   Control as TPageControl ;
     
     TabText := TAckPC(P).Tabs[TabIndex];
     OutRect := Rect;
     InflateRect (OutRect, -3, -3);
     OutRect.Left := OutRect.Left + 3;
     if Active Then
     begin
       P.Canvas.Font.Color := clred ;
       P.Canvas.Brush.Color := clYellow;
       P.Canvas.FillRect(OutRect);
     end
     else
     begin
       P.Canvas.Font.Color := clBlack;
     end;
     DrawText (Control.Canvas.Handle,
        PChar (ExtractFileName (TabText)),
        Length (ExtractFileName (TabText)),
        OutRect, dt_Left or dt_SingleLine or dt_VCenter);
    end;
    et voila tu te retrouve avec un onglet jaune ecrit en rouge sur l'onglet actif
    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

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 628
    Points : 10 553
    Points
    10 553
    Par défaut
    Cela ne doit pas être le seul cas . Il y a le même problème avec les "radio button" et leur couleur de fond.

    Il me semble qu'il faut activer le manifeste XP (le thème Windows) et mettre les propriétés ParentColor et ParentBackground à false

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 157
    Points : 67
    Points
    67
    Par défaut
    Merci pour vos réponse. J'ai essayé de les appliquer mais ça ne donne rien.7

    Je précise que moi je cherche à changer la couleur de fond de l'onglet du tabSheet seulement et non pas la page complétement. Je saias pas si c'est possible, j'utilise une version ancienne de delphi (Delphi2005) donc peut être que ce n'est pas possible.

    Merci de me répondre si vous avez des suggestions.

  7. #7
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 416
    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 416
    Points : 5 814
    Points
    5 814
    Par défaut
    salut

    si tu ne cherche qu'a changer l'onglet le code fournis fonctionne parfaitement
    mais peut être n'as tu pas mis onwerdraw a true sur le TPagecontrol
    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. [WD12] Mettre une couleur de fond dans un champ d'un etat
    Par galsen.quebec dans le forum WinDev
    Réponses: 2
    Dernier message: 01/06/2011, 15h08
  2. Réponses: 4
    Dernier message: 22/04/2007, 19h20
  3. [C# 2.0] Couleur de fond dans une listView
    Par OtI$ dans le forum Windows Forms
    Réponses: 3
    Dernier message: 07/02/2007, 14h50
  4. Couleur de fond dans une zone de liste
    Par kornkiller dans le forum Access
    Réponses: 1
    Dernier message: 08/08/2006, 20h50
  5. Insérer une couleur dans une page.
    Par Paulinho dans le forum FAQ LaTeX
    Réponses: 12
    Dernier message: 23/04/2006, 15h37

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