Racourcir un bout de code [Résolu]

Signaler
Messages postés
110
Date d'inscription
dimanche 2 mars 2003
Statut
Membre
Dernière intervention
19 juin 2012
-
Messages postés
4199
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
-
bonjour

voila je voudrais savoir si on peut reduire le code si dessous ?

procedure TForm2.Timer1Timer(Sender: TObject);
begin

if label4.Caption=inttostr(0) then label4.Font.Color:=clred;
if label4.Caption=inttostr(1) then label4.Font.Color:=clred;
if label4.Caption=inttostr(2) then label4.Font.Color:=clred;
if label4.Caption=inttostr(3) then label4.Font.Color:=clred;

if label4.Caption=inttostr(4) then label4.Font.Color:=clgreen;
if label4.Caption=inttostr(5) then label4.Font.Color:=clgreen;

Je voudrais juste qu'entre 0 et 3 le label deviens rouge et si il affiche 4 et 5 qu'il devient vert

merci par avance

6 réponses

Messages postés
110
Date d'inscription
dimanche 2 mars 2003
Statut
Membre
Dernière intervention
19 juin 2012

oula oui j'etais parti très loin

merci ça marche impeccable Korgis
Messages postés
110
Date d'inscription
dimanche 2 mars 2003
Statut
Membre
Dernière intervention
19 juin 2012

j'ai essayer comme ceci :

procedure TForm2.Timer1Timer(Sender: TObject);
var
i:set of 0..15;
begin
i:= [0..15];

if label4.Caption=i then label4.Font.Color:=clred;


mais forcement ça marche pas il me manque un truc
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
15
C'est très basique.

par exemple :

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  with Label4 do
  begin
    if StrToInt(Caption) in [0..3] then
      Font.Color := clRed else
    if StrToInt(Caption) in [4, 5] then
      Font.Color := clGreen;
  end
end;


ou encore :

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  with Label4 do
  case StrToInt(Caption) of
    0..3: Font.Color := clRed;
    4, 5: Font.Color := clGreen;
  end;
end;


etc...

N'oublie pas de protéger le code si risque de valeur imprévue retournée par Label.Caption (utilisation de "StrToIntDef", rajout de "else" dans "case of"...).
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
15
Et pourquoi pas, d'ailleurs :

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  with Label4 do
  begin
    if Caption[1] in ['0'..'3'] then
      Font.Color := clRed else
    if Caption[1] in ['4', '5'] then
      Font.Color := clGreen;
  end
end;
Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
10
Salut
Tu peux aussi essayer cela :
if pos(label4.caption,'0123') > 0
then label4.Font.Color:=clred
else if pos(label4.caption,'45') > 0 then label4.Font.Color:=clgreen;

Dubois77
Messages postés
4199
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
28
const
  CapMax  = 5;
  Cap2Col : array[0..CapMax-1] integer = (
    clRed, clRed, clRed, clGreen, clGreen
  );

procedure TForm2.Timer1Timer(Sender: TObject);
begin
  with Label4 do
  begin
    Font.Color := Cap2Col[Tag];
    Tag        := (Tag + 1) mod CapMax;
    Caption    := IntToStr(Tag);
  end;
end;


________________________________________________________
besoin de câbles audio, vidèo, informatique pas cher ?