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

Delphi Discussion :

Choix couleur fond des composants


Sujet :

Delphi

  1. #1
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 316
    Points : 158
    Points
    158
    Par défaut Choix couleur fond des composants
    bonjour, je voudrais que l'utilisateur puisse choisir la couleur d'un edit,listbox, combobox. existe-t-il une propriété de la form pour appliquer le choix a tous les composants ou dois-je le faire pr chaque composant ?
    merci

  2. #2
    Membre actif
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Points : 259
    Points
    259
    Par défaut
    Salut,
    Je ne sais pas
    s'il existe ou pas une fonctio déjà tout faite, mais sinon un parcourt de ta form avec un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    For i := 0 to TaForm.ControlCount-1 do
     (TaForm.Controls[i] as je sais pas trop quoi).Color:=TaCouleur;
    Le je sais pas trop quoi c'est parce que je sais plus vraiment quel type il faut définir .. Quelqu'un devrait ocmpléter je pense ...

    Evidemment ceci n'est qu'une approche, après y'a quelques vérifications à faire ... (notemment que le control en cours soit bien du bon Type => cf. is )

    Si besoin fais signe, je te donnerais le type qu'il faut et une fonction plus complète ...

    Bon dev'

  3. #3
    Membre averti Avatar de Soulama
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 619
    Points : 416
    Points
    416
    Par défaut
    pour les Edits par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if Taform.Controls[x] is TEdit Then
       (Taform.Controls[x] as TEdit).Color := clCouleur

  4. #4
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 316
    Points : 158
    Points
    158
    Par défaut
    ok merci bcp je testerai tt ca ce soir et je vous tiens au courant

  5. #5
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 316
    Points : 158
    Points
    158
    Par défaut
    ok ca marche mais il n'a pas l'air de prendre les tdbgrid tcombobox tdbmemo ni les tdbedit, je vais regarder a ca et je poste si je trouve

  6. #6
    Membre actif
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Points : 259
    Points
    259
    Par défaut
    Un petit bout de code pour nous aider pour t'aider =)

  7. #7
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 316
    Points : 158
    Points
    158
    Par défaut
    oui en fait je place ds une bdd le choix des couleurs de l'utilisateur, je vais les recherche au create pr appliquer les couleurs

    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
    if x.Controls[i] is Tdbgrid Then
     (x.Controls[i] as tdbgrid).Color:=colorbox3.selected;
     if x.Controls[i] is Tdbcombobox Then
     (x.Controls[i] as tdbcombobox).Color:=colorbox3.selected;
    avec tedit il les prend sinon il dit 
    [Pascal Error] couleur.pas(107): E2003 Undeclared identifier: 'Tdbgrid'
    [Pascal Error] couleur.pas(108): E2015 Operator not applicable to this operand type
     
    procedure Tx.FormCreate(Sender: TObject);
    var aDatabase: TDatabase;
    utilisateur,bureel,police,burel1:string;
    police1:tcolor;
    i:integer;
    begin
    aDatabase := Session.FindDatabase ('pnt');
    utilisateur:=copy(aDatabase.Params.Text,11,2);
    querycouleur.close;
    querycouleur.sql.Clear;
    querycouleur.SQL.add('select bureau,font,interieur from couleur where nom like "'+utilisateur+'%";');
    querycouleur.open;
    x.Font.color:=stringtocolor(querycouleur.FieldByName('font').asstring);
    x.color:=stringtocolor(querycouleur.FieldByName('bureau').asstring);
    police1:=stringtocolor(querycouleur.fieldbyname('interieur').asstring);
     
    For i := 0 to formclient.ControlCount-1 do
    begin
    if formclient.Controls[i] is TEdit Then
     (formclient.Controls[i] as tedit).Color:=police1;
     end;

  8. #8
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    338
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 338
    Points : 383
    Points
    383
    Par défaut
    bonjour
    pour l'erreur [Pascal Error] couleur.pas(107): E2003 Undeclared identifier: 'Tdbgrid', il te faut mettre DBGrids dans la clause uses

  9. #9
    Membre actif
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Points : 259
    Points
    259
    Par défaut
    Salut,

    Moi je viens de faire un test avec ça et ça marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    uses
      ...DBGrids;
     
    procedure TForm1.FormCreate(Sender: TObject);
    var i : integer;
    begin
    For i := 0 to form1.ControlCount-1 do
    begin
    if form1.Controls[i] is TDBGrid Then
    (form1.Controls[i] as TDBGrid).Color:=clblack;
    end;
    end;

  10. #10
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 316
    Points : 158
    Points
    158
    Par défaut
    ok merci, de fait si j'utilise des composants d'une autre form je dois les declarer ds les uses

  11. #11
    Membre actif
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Points : 259
    Points
    259
    Par défaut
    Citation Envoyé par Mihalis
    ...si j'utilise des composants d'une autre form je dois les declarer ds les uses
    Oui tout à fait ... En tout cas c'est une solution (Propre ???) ... ou alors, a toi de faire une fonction dans l'unit de ta form qui est appelé depuis la create de l'autre (attention à l'ordre des create dans ce cas) pour mettre tes champs à jour ...
    Je m'explique :

    Form1 + Unit1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Uses ..., Form2;
    ...
    Procedure Form1.Create(...)
    Begin
    ...
    MyColor:=StringToColor(...);
    Form2.UpdateColor(MyColor);
    ...
    Form2 (contient tes tDBGrid)+ Unit2 :
    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
    
    TForm2 = Class(...)
     ...
     Public
     Procedure UpdateColor(Color : TColor);
    ...
    
    Implementation
    
     Procedure Form2.UpdateColor(Color : TColor);
    var i : Integer;
    Begin
    For i := 0 to form1.ControlCount-1 do
    begin
    if form2.Controls[i] is TDBGrid Then
    (form2.Controls[i] as TDBGrid).Color:=Color;
    end
    else if form2.Controls[i] is TEdit Then
    (form2.Controls[i] as TEdit).Color:=Color;
    else if ....
    
    End;
    Ah mon avis là tu as tout ce qu'il te faut ...

    Bon dev'

  12. #12
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 316
    Points : 158
    Points
    158
    Par défaut
    cpeut etre une idée intéressante, j'y regarderai demain avec les yeux plus ouverts en attendant je suis dépanné mais ma solution ne me plait pas bcp.
    j'ai fait un autre poste pr parcourir ttes les forms d'un projet et dedans j'y mettrais une boucle pr parcourir les composants, je n'ai pas encore testé mais en théorie ca ne serait pas mal

  13. #13
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 316
    Points : 158
    Points
    158
    Par défaut
    bonjour, je reviens avec un vieux post mais je rencontre un problème
    je m'explique
    j'ai 2 groupbox dans un groupbox
    j'ai donc une fonction récursive pour faire mes traitements mais au lancement du programme j'ai une erreur stack overflow
    voici mon 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
    Procedure tx.ChangeColor(Group : Tgroupbox);
    var k : Integer;
    Begin
     
      for k := 0 to Group.ControlCount-1 do
      Begin
       if (Group.Controls[k] is Tjvcaptionpanel) then ChangeColor(Group.Controls[k] as Tjvcaptionpanel);
       if group.Controls[k] is TEdit Then
     (group.Controls[k] as tedit).Color:=stringtocolor(querycouleur.fieldbyname('interieur').asstring);
     if group.controls[k] is Tcombobox Then
     (group.Controls[k] as tcombobox).Color:=stringtocolor(querycouleur.fieldbyname('interieur').asstring);
     if group.controls[k] is tlistbox then
     (group.controls[k] as tlistbox).color:=stringtocolor(querycouleur.fieldbyname('interieur').asstring);
    if (group.Controls[k] is tdatetimepicker) then
      (group.Controls[k] as tdatetimepicker).Color:=stringtocolor(querycouleur.fieldbyname('interieur').asstring);
    if group.Controls[k] is Tdbgrid Then
     (group.Controls[k] as tdbgrid).Color:=stringtocolor(querycouleur.fieldbyname('interieur').asstring);
    if group.controls[k] is tdbedit then
    (group.controls[k] as tdbedit).Color:=stringtocolor(querycouleur.fieldbyname('interieur').asstring);
    if group.controls[k] is tdbmemo then
    (group.controls[k] as tdbmemo).Color:=stringtocolor(querycouleur.fieldbyname('interieur').asstring);
    if (controls[k] is tjvcaptionpanel) then
    changecolor(controls[k] as tjvcaptionpanel);
    if (controls[k] is tgroupbox) then
    changecolor(controls[k] as tgroupbox);
      end;

  14. #14
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 316
    Points : 158
    Points
    158
    Par défaut
    personne n'a d'idée ?

  15. #15
    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
    Citation Envoyé par Mihalis
    j'ai donc une fonction récursive pour faire mes traitements mais au lancement du programme j'ai une erreur stack overflow
    Erreur typique d'une boucle infinie.
    Verifie bien tes conditions d'arret de ta recursivitée.

Discussions similaires

  1. propriété couleur de fond des composants..
    Par petitours dans le forum IHM
    Réponses: 9
    Dernier message: 31/07/2007, 15h04
  2. Réponses: 12
    Dernier message: 24/01/2006, 13h38
  3. Réponses: 6
    Dernier message: 06/12/2005, 16h52
  4. Réponses: 4
    Dernier message: 26/07/2005, 11h45
  5. [BCB6] Couleur des composants et interfaces
    Par vsavoir dans le forum C++Builder
    Réponses: 6
    Dernier message: 19/08/2004, 18h20

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