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
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
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 :
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 ...
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;
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'
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
ok merci bcp je testerai tt ca ce soir et je vous tiens au courant
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
Un petit bout de code pour nous aider pour t'aider =)
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;
bonjour
pour l'erreur [Pascal Error] couleur.pas(107): E2003 Undeclared identifier: 'Tdbgrid', il te faut mettre DBGrids dans la clause uses
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;
ok merci, de fait 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 ...Envoyé par Mihalis
Je m'explique :
Form1 + Unit1 :
Form2 (contient tes tDBGrid)+ Unit2 :
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); ...
Ah mon avis là tu as tout ce qu'il te faut ...
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;
Bon dev'
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
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;
personne n'a d'idée ?
Erreur typique d'une boucle infinie.Envoyé par Mihalis
Verifie bien tes conditions d'arret de ta recursivitée.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager