Couleur

Résolu
watrem Messages postés 51 Date d'inscription samedi 15 octobre 2005 Statut Membre Dernière intervention 17 août 2008 - 2 mai 2008 à 20:21
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 - 4 mai 2008 à 12:41
Bonjour , je debute en delphi et j'en suis vraiment au debut.
En cliquant sur un tbutton je sait changer la couleur de l'ecran avec la formule

Form().color :=Clyellow par exemple , mais je n'arrive pas

1- a attribuer 2 ou 3 couleur consecutives pour le meme bouton

2- a alterner en permanence 2 couleur comme "bleu" puis "blanc" pour le meme bouton

merci

24 réponses

f0xi Messages postés 4204 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 34
2 mai 2008 à 22:50
tu integre mon codes { mycolor start a end } entre le {$R *.dfm} et le End.

ensuite,
click sur le boutton de ta fiche
click sur l'onglet "evenements" de la fenetre "inspecteur d'objet"
trouve l'evenement "OnClick" et double click dans la zone de saisie a coté.
la si tu a tout bien fait, une nouvelle procedure apparait dans ton unité,
cette procedure se presentera comme suis :

procedure TForm1.Button1Click(Sender: TObject);
begin

end;

insere ce code entre le begin et le end;
self.color := MyColorsNext;

self.color permet d'acceder a la classe TForm1 (regarder l'aide delphi pour self)

appuis sur F9 pour compiler et lancer le programme, hop, click sur le bouton et le fond de la fiche vas alors changer de couleur a chaque click.
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
3 mai 2008 à 03:34
Salut,

il y avait plus simple pour faire une bascule entre deux couleurs
que d'écrire un plâtrée qu'il aura du mal à comprendre
surtout pour un débutant :

Var
  {booléen pour
la bascule entre 2 couleurs}
  BoolColor: Boolean;
  {Tableau de deux couleurs}
Const ColorArray: Array[Boolean] Of
TColor = (clBlue, clWhite);

Procedure
TForm1.Button1Click(Sender: TObject);
Begin
  {on inverse la
valeur du booléen}
  BoolColor := Not
BoolColor;
  {et on affecte la
couleur}
  Color := ColorArray[BoolColor];
End ;

ps: l'appel à Self n'était pas utile
 
@+
Cirec

<hr siz ="" />
3
f0xi Messages postés 4204 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 34
2 mai 2008 à 20:50
{ MyColors start ---- }
const
  __MyColorsMax = 3; // nombres de couleurs maxi
  __MyColors : array[0..__MyColorsMax-1] of TColor = (
    { colors start > } // couleurs
    clWhite,
    clBlack,
    clBlue
    { < colors end }
  );

var
  __CurrentColor : integer = 0;

function MyColorsFirst: TColor; // renvois la premiere couleur
begin
  __CurrentColor := 0;
  result := __MyColors[__CurrentColor];
end;

function MyColorsLast: TColor; // renvois la derniere couleur
begin
  __CurrentColor := __MyColorsMax;
  result := __MyColors[__CurrentColor];
end;

function MyColorsNext: TColor; // renvois la couleur suivante
begin
  __CurrentColor := (__CurrentColor+1) mod __MyColorsMax;
  result := __MyColors[__CurrentColor];
end;


function MyColorsPrec: TColor; // renvois la couleur precedente
begin
  __CurrentColor := (__CurrentColor+__MyColorsMax-1) mod __MyColorsMax;
  result := __MyColors[__CurrentColor];
end;

{ MyColors end ---- }

{ buttons }

procedure TForm1.ButtonFirstClick(Sender: TObject);

begin

  Self.Color := MyColorsFirst;

end;


procedure TForm1.ButtonPrecClick(Sender: TObject);

begin

  Self.Color := MyColorsPrec;

end;


procedure TForm1.ButtonNextClick(Sender: TObject);

begin

  Self.Color := MyColorsNext;

end;


procedure TForm1.ButtonLastClick(Sender: TObject);

begin

  Self.Color := MyColorsLast;

end;












0
f0xi Messages postés 4204 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 34
2 mai 2008 à 21:02
créer un index rotatif :

exemple a deux elements :

MAX = 2
CUR = 0

CUR := (CUR + 1) mod MAX;

generera les indexs suivants en permanence:
1, 0, 1, 0 ...

utilisable avec par exemple :
const TAB : array[0..1] of {type data} = ({data 0}, {data 1});

exemple a 42 elements :

MAX = 42
CUR = 0

CUR = (CUR + 1) mod MAX

generera les indexs suivants en permanence :
1, 2, 3,..., 39, 41, 0, 1, 2, ..., 39, 41, 0, ...

utilisable avec par exemple :
const TAB : array[0..41] of {type data} = ({data 0}, {data 1}, {...}, {data 41});

en gros cela fonctionne avec tout type de tableau ayant pour index de depart [0..n] ==> CUR := (CUR+1) mod MAX;
cela est moins aisé avec des tableaux a index negatif/positif [-n..n] ==> CUR := -n+((CUR+1) mod MAX);
il faut penser a decaler avec les tableaux qui commence a 0+ [5..n] ==> CUR := 5+((CUR+1) mod MAX);

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
watrem Messages postés 51 Date d'inscription samedi 15 octobre 2005 Statut Membre Dernière intervention 17 août 2008
2 mai 2008 à 21:31
Bon deja merci pour votre reponse, mais comme je l'ai dis je debute carrement.Quand j'ouvre delphi , j'ai ma FORM sur celle ci j'y ajoute un TButton et j'obtiens ceci et je ne sais pas encore integre les elements a leurs bonne place;
unit Unit1;




interface




uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;




type
  TForm1 = class(TForm)
    Button1: TButton;
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;




var
  Form1: TForm1;




implementation




{$R *.dfm}




end.

comment dois je integre vos codes dans ma page d'acceuil ? merci
0
watrem Messages postés 51 Date d'inscription samedi 15 octobre 2005 Statut Membre Dernière intervention 17 août 2008
3 mai 2008 à 00:48
J'ai fait exactement ce que vous m'avez dit , j'ai compris quelques processus mais j'ai des erreurs ici :
{ buttons }
procedure TForm1.ButtonFirstClick(Sender: TObject);
begin
  Self.Color := MyColorsFirst;
end;


procedure TForm1.ButtonPrecClick(Sender: TObject);
begin
  Self.Color := MyColorsPrec;
end;


procedure TForm1.ButtonNextClick(Sender: TObject);
begin
  Self.Color := MyColorsNext;
end;


procedure TForm1.ButtonLastClick(Sender: TObject);
begin
  Self.Color := MyColorsLast;
end;
0
f0xi Messages postés 4204 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 34
3 mai 2008 à 02:36
Attention :

quand tu depose un bouton sur une fiche, celui ci prend automatiquement le nom "buttonX"
ou X vaux 1 puis 2 puis 3 etc

pour qu'un boutton s'appel ButtonFirst ou ButtonPrec il faut definir ce nom dans la propriété Name (dans l'inspecteur d'objet).
toutes procedures faisant reference a son ancien nom sera automatiquement renomée.

de plus, tu ne dois pas ecrire toi même ces procedure, double click sur le boutton (dans la fiche) ou double click sur l'evenement dans l'inspecteur d'objet.

0
watrem Messages postés 51 Date d'inscription samedi 15 octobre 2005 Statut Membre Dernière intervention 17 août 2008
3 mai 2008 à 03:34
desole j'arrive tres bien a effectue la premiere procedure de la bonne maniere ( celle que vous m'avez decrite) le hic c'est quand je cherche a renommer le meme bouton , il me remet sur ma 1ere procedure !!


je vais bien modifier "name" ds proprietes pourtant mais il reecrit par dessus et ne me cree pas une deuxieme procedure
0
watrem Messages postés 51 Date d'inscription samedi 15 octobre 2005 Statut Membre Dernière intervention 17 août 2008
3 mai 2008 à 03:52
AH merci Cirec l'alternance entre les deux couleurs fonctionne tres bien.

J'essaie quand meme de faire la formule de Foxi pour les trois couleurs mais je bloque au renommage du bouton .


comment renomme t'on ce satane bouton pusieur fois ???


 


merci a vous deux
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
3 mai 2008 à 04:03
tu t'y prends mal

il faut en premier:
- déposer un TButton sur la Form
- le nommer (propriété Name)
- double-cliquer sur lui pour génerer le code
- et enfin complèter avec le code de F0xi

Dans son code F0xi utilise 4 boutons
il te faudra donc répeter 4 fois les étapes ci-dessus

 
@+
Cirec

<hr siz="" />
0
watrem Messages postés 51 Date d'inscription samedi 15 octobre 2005 Statut Membre Dernière intervention 17 août 2008
3 mai 2008 à 04:10
Bon 4 heures pour comprendre comment faire une alternance de couleur , c'est pas gagne lol

Const ColorArray: Array[Boolean] Of TColor = (clBlue, clWhite);

Procedure TForm1.Button1Click(Sender: TObject);
Begin
   {on inverse la valeur du booléen}
  BoolColor : = Not BoolColor;
  {et on affecte la couleur}
  Color := ColorArray[BoolColor];
End ;

J'aurai 2 questions au sujet de ce code
1)J'ai essayer de rajouter une 3 ieme couleur Const ColorArray: Array[boolean]OfTColor =(Clblue, ClWhite,ClRed); evidemment ca ne marche pas et je crois comprendre pourquoi le "NOT" signifie dans le cas suivant cad 2 couleurs si c'est pas l'une c'est donc l'autre!!!!
Comment ajouter une 3 ieme couleur a ce code ???

2)Est-il possible d'automatiser l'alternance des couleurs sans avoir a cliquer sur le bouton ? Toujours avec ce bout de code que je connais desormais par coeur  bg
0
Utilisateur anonyme
3 mai 2008 à 04:16
Ze crois que f0xi il a bouffé du lion




procedure TForm1.ChangerLePetitNomDeMonBouttonClick(Sender: TObject);
Const
  PetitsNomsDeMonBoutton:Array [1..5] of String=('La','Lo','Li','Lu','Le');
Var
  IndexBanane:Cardinal;
Begin
  For IndexBanane:=1 To 5 Do
    Begin
      Button1.Name:=PetitsNomsDeMonBoutton[IndexBanane];
      Button1.Refresh;
      Sleep(500);//

A pas confondre avec slip : ca s'est un rappel pour Cari

      Application.ProcessMessages;


    End;
End;
0
Utilisateur anonyme
3 mai 2008 à 04:21
Version de ta fonction avec 3 couleurs

Const
ColorArray: Array[0..2] Of TColor = (clBlue, clWhite,ClGreen);
Var IndexColor:Cardinal;

Procedure TForm1.Button1Click(Sender: TObject);
Begin
  Color : = ColorArray[IndexColor];  
  Inc(IndexColor);
  If IndexColor>2 Then IndexColor: =0;
End;

Penser à initialiser IndexColor: à zéro dans le OnCreate de ta fiche
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
3 mai 2008 à 04:26
avec ce code il n'est pas possible de mettre plus que deux couleurs dans le tableau:
Const ColorArray: Array[Boolean] Of TColor = (clBlue, clWhite);
est identique à :
Const ColorArray: Array[0..1] Of TColor = (clBlue, clWhite);

Un Boolean n'a que valeurs possible : True où False (0 où 1)

et : BoolColor := Not BoolColor;
ne fait qu'unverser ces deux valeurs (il bascule entre True et False "Vrai ou Faux")

sinon c'est possible bien sûr avec plusieurs couleurs mais il faut
changer de méthode ... celle de F0xi en est une

si il te faut un autre exemple (si tu n'y arrives vraiment pas avec le code de F0xi) je te donnerai ça ... mais plus maintenant ... c'est l'heure d'aller au dodo là

Francky t'es pas encore couché où déjà levé

sur ce bonne nuit les petits

 
@+
Cirec

<hr siz ="" />
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
3 mai 2008 à 04:27
Francky a eu le courage de le faire ... chapeau ..
moi j'ai les yeux qui me brulent ... lol

 
@+
Cirec

<hr siz="" />
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
3 mai 2008 à 04:30
Pour l'initialisation de IndexColor il suffit de faire :
Var IndexColor:Cardinal = 0;

Cette fois j'y vais

 
@+
Cirec

<hr siz="" />
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
3 mai 2008 à 09:37
... Se faire initier à delphi au milieu de la nuit, et par les plus grands, il n'y a que sur CS qu'on voit ça.

Chapeau! 
0
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
3 mai 2008 à 10:17
Foxi y va un peu fort pour renseigner un débutant, FAUT S'ADAPTER FOXI ! ^^
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
3 mai 2008 à 12:09
@Caribensila:
franchement ...
on assure sur CS hein
et tout ça gratos

je n'ai q'une chose à dire :

 
@+
Cirec

<hr siz="" />
0
Utilisateur anonyme
3 mai 2008 à 16:01
Je viens juste de me reveiller : Dis donc cette question elle a du succes
0
Rejoignez-nous