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 :

Comment changer seulement la couleur de la bordure ?


Sujet :

Composants VCL Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2004
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 20
    Points : 7
    Points
    7
    Par défaut Comment changer seulement la couleur de la bordure ?
    Bonjour !

    Je cherche le moyen de changer la couleur de la bordure d'un panel et d'un radiogroup (ou autres objets de ce type) sans changer la couleur de fond.
    Quelqu'un peut-il m'aider svp?

    Merci d'avance 8)

  2. #2
    Membre habitué
    Inscrit en
    Février 2003
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 171
    Points : 126
    Points
    126
    Par défaut
    Bonjour,

    J'ai pas trouvé de propriété mais il est possible de ruser comme un renard en mettant un panel (panel N°1) puis dans ce panel il faut mettre un autre panel (panel N°2 qui correpond au panel dont on veut changer la couleur de la bordure).

    Pour changer la couleur de la brodure du panel 2 (qui en fait n'a pas de bordure car les propriétés bevelouter et bevelinnner sont à bvnone), il suffit de changer la couleur de fond du panel N°1.

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2004
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    salut seb !

    merci pour ta réponse et je pense que ça va marcher.

    Cependant, j'aimerais bien trouvé un vrai truc car en fait, g une feuille de style en XML et ds celle ci, je mets la couleur des bordures et par conséquent, cela concerne TOUS les panels (et groupBox, ...) de mon appli alors je ne me vois pas dessiner un autre cadre pour chacun de ces objets.

    Connais tu "brush" et "canvas" ? car je pense que la solution est ici...

    @+

  4. #4
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Qu'entends tu par "Bordure" ? Le relief ??

    Sinon tu sais que tu peux creer un nouvel objet TMonPanel derivant de TPanel et en surchargeant la Methode Paint, appeler l'ancienne Pour dessiner l'objet puis apres coup dessiner ta propre bordure.

    Dans le cas des panels, tu peux aussi creer un panel plat (sans bordure) et y ajouter un TImage avec un bitmap qui represente ta bordure.

    Ca marche aussi pour les forms.
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  5. #5
    Membre habitué
    Inscrit en
    Février 2003
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 171
    Points : 126
    Points
    126
    Par défaut
    C'est la même chose avec le canvas.
    Tu seras obligé de dessiner une bordure autour de tous les composants.

    Combien as-tu de composants ?

  6. #6
    Futur Membre du Club
    Inscrit en
    Mai 2004
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    précisions : :
    la "bordure", est l'encadrement que l'on trouve dans une groupBox ou radioGroup par exemple. toujours de couleur gris et impossible a changer dans les propriétés.
    Cet encadrement est coupé par le "caption".
    Au pire, je voudrais dessiner un cadre autour de ces controles.


    pour clorish
    ton idée est bonne et si j'avais su, c'est ce que j'aurai fait ms je n'ai pas le tps de tout redessiner.

    pour sebCbien
    g environ 300 components.
    Voici ce que j'ai pour le mmt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     with MainFormDemo.GroupBox2 do begin 
          canvas.Brush.Color:=clRed; 
          canvas.Rectangle(MainFormDemo.GroupBox2.left - 2,MainFormDemo.GroupBox2.top - 2,MainFormDemo.GroupBox2.left+MainFormDemo.GroupBox2.width + 2,MainFormDemo.GroupBox2.top+MainFormDemo.GroupBox2.Height + 2); 
        end;
    Mais le cadre ne se dessine que dans la Form ou le code est écrit alors que j'aimerais le faire pour le groupBox2 de MainFormDemo.

    contrairement a redessiner un autre panel(ou groupbox ou autre) avec canvas, je peux écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for i:=0 to componentcount - 1 do 
      // code ci dessus corrigé
    et cela m'évite de surcharger mes feuilles qui ont déjà pas mal d'objets.

    Merci encore de votre aide ![/b]

  7. #7
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    300 Composants c'est 300 Classes differentes ?? ou 300 instances de 2 ou 3 classes a tout casser ... Ca change tout dans la maniere de proceder.
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  8. #8
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Je pense que la Creation de nouveaux composants n'est pas tres compliqué et donnera les meileurs resulats

    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
     
    Type
        tMonPanel = Class(TcustomPanel)
        Protected
          Procedure Paint; Override;
        End;
     
        TMonGroupBox = Class(TGroupBox)
        Protected
          Procedure Paint; Override;
        End;
     
    implementation
     
    Procedure TMonPanel.Paint;
    Var i : Integer;
    Begin
    Inherited;
    Canvas.Pen.Color := clRed;
    Canvas.MoveTo(0,0);
    Canvas.LineTo(0, Self.Height-1);
    Canvas.LineTo(Self.Width-1, Self.Height-1);
    Canvas.LineTo(Self.Width-1, 0);
    Canvas.LineTo(0, 0);
     
    End;
     
    Procedure TMonGroupBox.Paint;
    Begin
    Inherited;
    Canvas.Pen.Color := clRed;
    Canvas.MoveTo(7,5);
    Canvas.LineTo(0,5);
    Canvas.LineTo(0, Self.Height-2);
    Canvas.LineTo(Self.Width-2, Self.Height-2);
    Canvas.LineTo(Self.Width-2, 5);
    Canvas.LineTo(7+Canvas.TextWidth(Self.Caption), 5);
    End;
    Principe : Surcharger la pethode Paint, executer celle heritee et dessiner apres coup sur les "traits coloré" des trains de la nouvelle couleur.

    Remarque :
    Bordure d'un Panel :
    - Epaisseur 1px
    - Bord Droit et Bas = Couleur
    - Bord Haut et Gauche = Couleur plus clair si "raised" plus foncé si "lowered"

    Bordure d'un GroupBox :
    - Bordure 2 px
    - 1 Bordure coloré de 0 -> Largeur -2 et Hauteur -2
    - 1 bordure Claire decalé de 1px (de 1 a LArgeur -1 et hauteur -1)
    - Bordure Claire a dessiner avant la bordure Foncee.
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  9. #9
    Membre confirmé
    Avatar de lil_jam63
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 447
    Points : 600
    Points
    600
    Par défaut
    Si je comprend bien ce que tu cherche a faire, c'est une sorte de skin pour ton appli utilisant un fichier XML, je pense que celà est possible, je m'y suis interessé il y a qqs temps mais apres plusieurs recherches sur google, je n'ai rien trouvé qui pouvais m'éclaircir sur le sujet, j'ai justement un soft qui utilise cette technique (nouveau yahoo messenger) et apres une recherche sur mon disque, je suis tombé sur le fichier xml du skin que j'ai analysé mais je ne vois pas comment on peut implementé ça au sein de l'application, j'ai aussi essayé de chercher des exemple en c++ et autres language, j'ai posé des questions un peu partout mais aucune réponse. Je me suis penché sur le fonctionnement des themes XP avec le manifest dans l'espoir de trouver une piste mais j'ai rien trouvé

    Sinon, je peux te proposer qqs liens qui te donneront une idée de la manière dont tu peux créer un fichier xml de skin mais pas comment implementé au sein de l'executable, c'est toujours ça
    http://www.winamp.com/nsdn/winamp/skinning/modern/tutorials/2.3-simpleskin.php
    http://www.angelfire.com/al4/tsoft/skinabout.html un peu plus interessante mais sans suite

    Bonne chance si c'est ce que j'ai compris

    PS: Si tes recherches sont plus fluctueuses que les miennes, je suis preneur
    ----------------------------------------------------
    Avant de poster, pensez à utiliser les différents outils à votre disposition:
    Google, la FAQ et le moteur de recherche.

  10. #10
    Futur Membre du Club
    Inscrit en
    Mai 2004
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    lil_jam63,
    g posté un message la dessus :"feuille de style XML"; tu y retrouveras mon pseudo. ça marche pour tous les components mais pas pour les propriétés qui ne sont pas dans l'inspecteurs d'objets d'où ma venue sur le forum de nouveau.

    Je pense que la meilleure solution est de créer soi même ses objets. ce que je vais faire tout de suite ! (merci a l'auteur de cette idée )

  11. #11
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Ya pas mieux que l'implementation de compos persos .... si tu place bien tes props, tu cela te facilitera meme les developpements futurs.

    JE sais pas si c'est possible, mais si tu arrive a modifier la methode de TWincontrol elle meme tu devrais pouvoir changer la couleur de bordure de tous tes composants sans redevelopper une chasse speciale pour chacun d'entre eux.

    Mais pour cela il faut au moins avoir acces aux soucres des classes TWincontrol (edition > Enterprise il me semble) pour la modifier et recompiler l'unitee DCU
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  12. #12
    Futur Membre du Club
    Inscrit en
    Mai 2004
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    Clorish, peux tu stp, me montrer un exemple (avec MonGroupBox1 par exemple) utilisant les classes que tu m'as donné.

    pour créer une instance ?
    la placer sur une feuille ?
    Lui attribuer des propriétés/procédures et en l'occurence "paint" ?

    Merci car je ne connais pas ce genre de chose ...

    Sinon, j'avais pensé à une astuce qui aurais été de dessiner un "shape" dynamiquement mais comment fait on ds ce cas ?

  13. #13
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Tu cree une nouvelle unitee :

    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
     
    Unit Unit2;
     
    Interface
     
    Uses .....;  
     
    Type 
        tMonPanel = Class(Panel)     
        Private 
          pBorderColor : TColor;        // Variable de stockage de la couleur
          Procedure SetBorderColor(Color : TColor);
        Protected 
          Procedure Paint; Override; 
        Public
          Property BorderColor : TColor Read pBorderColor Write SetBorderColor default clBlack;      // Change la couleur par defaut si tu veux
          Constructor Create(AOwner : TComponent); Override;
        End; 
     
    implementation 
     
    Constructor TMonPanel.Create(AOwner : TComponent); 
    Begin
    Inherited;
    pBorderColor := clBlack;   // Reporte ici la couleur par defaut;
    End;
     
    Procedure TMonPanel.Paint; 
    Var i : Integer; 
    Begin 
    Inherited; 
    Canvas.Pen.Color := pBorderColor;
    Canvas.MoveTo(0,0); 
    Canvas.LineTo(0, Self.Height-1); 
    Canvas.LineTo(Self.Width-1, Self.Height-1); 
    Canvas.LineTo(Self.Width-1, 0); 
    Canvas.LineTo(0, 0); 
     
    End; 
     
    Procedure TMonPanel.SetBorderColor(Color : TColor);
    Begin
    pBorderColor := Color;
    Self.Repaint;
    end;
     
    End.
    Pour ce qui est de la creation/Utilisation rien de plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ...
    Uses Unit2;
    ...
    Var MonPanel : TMonPanel;
    ...
    MonPAnel := TMonPanel.Create(Self);
    MonPanel.PArent := Self;
    MonPanel.BorderColor := clRed;
    ....
    Cela sous entends bien sur que tu ai des connaissances minimales sur la creation de composants et l'utilisaton dynamique de composants.

    Dans un premier temps tu doit ajouter l'unitee qui contient la declaration de tous tes composants (ici Unit2) dans tes projets, mais si tu prends le DCU et que tu le copie sous Borland\Delphi\lib tu n'aura plus besoin de faire ca .. et il te suffit juste de nomer l'unite dans la clause Uses.
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  14. #14
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Pour ce qui est de le placer sur la feuille comme tout autre objets de la toolbar, il faut pour cela l'enregistrer.

    Essaye Composant, installer dans un premier temps.
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  15. #15
    Membre confirmé
    Avatar de lil_jam63
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 447
    Points : 600
    Points
    600
    Par défaut
    En effet, j'avais raté le sujet "fichiers XML" , et en 2 minutes, j'en ai appris plus que pendant toutes une semaine a faire des recherches sur google.
    ----------------------------------------------------
    Avant de poster, pensez à utiliser les différents outils à votre disposition:
    Google, la FAQ et le moteur de recherche.

  16. #16
    Futur Membre du Club
    Inscrit en
    Mai 2004
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 20
    Points : 7
    Points
    7
    Par défaut ça marche !
    Clorish, je dois vraiment te remercier car ça marche comme je veux !
    ça m'a permis d'apprendre tout ce qui est création de composant aussi.


    Je file une partie de code pour ceux que ça interesse. Il s'agit de la classe TMonGroupBox où on peux modifier la couleur du contour :

    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
     
    unit MonGroupBox;
     
    interface
     
    uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ComCtrls, StdCtrls, ExtCtrls, ImgList, Grids, Buttons;
     
    type
      TMonGroupBox = class(TGroupBox)
      private
        pBorderColor : TColor; //variable de stockage de la couleur
        procedure SetBorderColor(color : TColor);
      protected
        Procedure Paint; Override;
      public
        property BorderColor : TColor Read pBorderColor Write SetBorderColor default clBlack;
        Constructor Create(AOwner : TComponent);Override;
      published
        { Déclarations publiées }
      end;
     
    procedure Register;
     
    implementation
     
    procedure Register;
    begin
      RegisterComponents('Standard', [TMonGroupBox]);
    end;
     
    Constructor TMonGroupBox.Create(AOwner : TComponent);
    Begin
      Inherited;
      pBorderColor := clBlack;   // Reporte ici la couleur par defaut;
    End;
     
    Procedure TMonGroupBox.Paint;
    Begin
      Inherited;
      Canvas.Pen.Color := pBorderColor;
      Canvas.MoveTo(7,5);
      Canvas.LineTo(0,5);
      Canvas.LineTo(0, Self.Height-2);
      Canvas.LineTo(Self.Width-2, Self.Height-2);
      Canvas.LineTo(Self.Width-2, 5);
      Canvas.LineTo(7+Canvas.TextWidth(Self.Caption), 5);
    End;
     
    Procedure TMonGroupBox.SetBorderColor(Color : TColor);
    Begin
      pBorderColor := Color;
      Self.Repaint;
    end;
     
    end.
    Ensuite, il n'y a plus qu'à faire Composant|installer pour obtenir ce nouvel élément dans la palette outils. un "uses" et c parti

  17. #17
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Je rajoute une precision sur mon idee de modification des Classes Delphi.

    Si on possede les Sources des Unites delphi (StdCtrls.pas par exe) livré dans certaines version de Delphi, on peux modifier ces sources pour inclure nos propres methodes, proprietes pour en faire beneficier les sous objets.

    Ex : Modifier TWinControl repercule la modif sur les TLabels, TGroupBox, etc... sans avoir a creer sa propre classe derivant de chacuns de ces Types incluant n fois la meme prop/Methode.

    Seul Hic : Incompatibilitee entre la nouvelle classe cree et celle connu de delphi dans d'autres unitees.

    Ex : Modifier TLabel dans StdCtrls entraine une incompatibilitee avec l'unitee Dialogs qui a ete compile avec l'ancienne unite stcCtrls.
    Il faut simplment penser a recompiler toutes les unties delphi pour que les autres unites incluant l'unitee modifiee dans sa declaration puissent prendre en compte la modif.

    Ya encore QQun ?

    Je tenais juste a preciser ce fait au cas ou qqun aurait ete interesse par cette methode.
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/12/2010, 15h43
  2. Réponses: 5
    Dernier message: 17/05/2007, 14h28
  3. [phpBB] Comment changer les couleurs
    Par ludolecho dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 19/05/2005, 08h20
  4. comment changer la couleur du crayon?
    Par meli0207 dans le forum MFC
    Réponses: 10
    Dernier message: 07/05/2005, 10h41
  5. Réponses: 2
    Dernier message: 01/12/2004, 22h48

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