Chaine de caractere et espace

cs_deubal
Messages postés
198
Date d'inscription
mercredi 26 novembre 2003
Statut
Membre
Dernière intervention
26 août 2009
- 14 oct. 2005 à 09:56
f0xi
Messages postés
4205
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
12 mars 2022
- 24 oct. 2005 à 20:37
Bonjour,
Voila j'ai un probleme avec une chaine de caracteres fixe :
je voudrais mettre dans une chaine de caracteres de longueur fixe (5 caracteres) 1 caractere par case cochées.
par exemple : si la 1ere et la 3eme cases sont cochées alors ma chaine est 'A A ' ou ls espaces sont bien des espaces (!!) pour remplacer les caracteres. Le seul petit probleme c'est que Delphi ne prend pas en compte le fait de mettre 2 espaces sucessifs. Comment faire ?? voici un petit bout de mon code :
*******
function TformFourn.traitementUtil() : string;
begin
for i:= 0 to 9 do
begin
gutil[i] := ' ';
end;


if ckboxA.Checked =true then
begin
gutil[1] := 'A';
end
else
begin
gutil[1] := ' ';
end;


if ckboxM.Checked =true then
begin
gutil[2] := 'M';
end
else
begin
gutil[2] := ' ';
end;


if ckboxC.Checked =true then
begin
gutil[3] := 'C';
end
else
begin
gutil[3] := ' ';
end;
**************
Merci pour votre aide
Bonnne journee
Deubal

7 réponses

exyacc
Messages postés
163
Date d'inscription
dimanche 20 octobre 2002
Statut
Membre
Dernière intervention
31 juillet 2008

14 oct. 2005 à 14:18
tu l'as declaré comment gutil ? chez moi ca marche, ne connaissant pas ta declaration j'ai mis:



function TformFourn.traitementUtil() : string;



VAR GUTIL:STRING[5];

I:INTERGER;

begin

GUTILl := ' ';

if ckboxA.Checked =true then
begin
gutil[1] := 'A';
end
else
begin
gutil[1] := ' ';
end;



if ckboxM.Checked =true then
begin
gutil[2] := 'M';
end
else
begin
gutil[2] := ' ';
end;


if ckboxC.Checked =true then

begin

gutil[3] := 'C';

end

else

begin

gutil[3] := ' ';

end;
RESULT:=GUTIL;

end;


exyacc
0
exyacc
Messages postés
163
Date d'inscription
dimanche 20 octobre 2002
Statut
Membre
Dernière intervention
31 juillet 2008

14 oct. 2005 à 14:23
sinon en plus court tu peux faire:





function TformFourn.traitementUtil() : string;



VAR gtuil:STRING[5];

i:INTERGER;

begin

gutil := ' ';

if ckboxA.Checked then gutil[1] := 'A';


if ckboxM.Checked then gutil[2] := 'M';


if ckboxC.Checked then gutil[3] := 'C';

result:=gutil;

end;




exyacc
0
cs_deubal
Messages postés
198
Date d'inscription
mercredi 26 novembre 2003
Statut
Membre
Dernière intervention
26 août 2009

14 oct. 2005 à 14:24
il est declaré comme le tien en string[5].
Mais sur ton poste ca fait aussi 2 espace consecutifs si tu ne coche pas 2 cases consecutives. Parce que moi ca n'en fait qu'un seul !?
Merci
0
exyacc
Messages postés
163
Date d'inscription
dimanche 20 octobre 2002
Statut
Membre
Dernière intervention
31 juillet 2008

14 oct. 2005 à 14:29
ben oui....

comment tu vois qu'il n'en fait qu'un ?

en faisant un showmessage('#'+traitementUtil+'#'); on voit
bien qu'il en met pls a la fin; a la rigueur remplace
gutil:=' ' par gutil:=':::::' pour mieux
voir.... tu utiliserais pas un TRIM avant de l'afficher ?


exyacc
0

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

Posez votre question
exyacc
Messages postés
163
Date d'inscription
dimanche 20 octobre 2002
Statut
Membre
Dernière intervention
31 juillet 2008

14 oct. 2005 à 14:31
tu l'avais declaré en String[5] ?

ton code


for i:= 0 to 9 do

begin

gutil[i] := ' ';

end;


devait tout casser...

non ?



exyacc
0
f0xi
Messages postés
4205
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
12 mars 2022
38
24 oct. 2005 à 20:29
alternative et exemple :



var

Form1 : TForm1;

checked : string; // notre chaine de control pas de taille limite



const

checkedmax : integer = 5; // taille maximale de la chaine checked

checkednot : char = '-'; // caractere definissant l'etat non-coché



implementation



{$R *.dfm}



// initialisation de la chaine

procedure InitChecked;

var x : integer;

begin

for x := 1 to checkedmax do

checked := checked + checkednot;

end;



// procedure a appeler pour changer les etats

procedure SetChecked(var cbox : TCheckBox; value : char);

begin

if cbox.Checked = true then

// on utilise les TAG des checkbox pour savoir a quelle position il correspond

checked[cbox.Tag] := value

else

checked[cbox.Tag] := checkednot;



// permet de controler l'etat en temps réel sur un simple TLabel

form1.Label1.Caption := checked;

end;



// on initialise a la creation

procedure TForm1.FormCreate(Sender: TObject);

begin

initchecked;

end;



// les click sur les checkbox, intervient egalement avec les raccourcis clavier



procedure TForm1.CheckBox1Click(Sender: TObject);

begin

// on peu placer n'importe qu'elle valeur pour chaque checkbox ici '1'

SetChecked(CheckBox1,'1');

end;



// encore une autre checkbox

procedure TForm1.CheckBox2Click(Sender: TObject);

begin

SetChecked(CheckBox2,'2');

end;



// etc... etc...
0
f0xi
Messages postés
4205
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
12 mars 2022
38
24 oct. 2005 à 20:37
je transforme la procedure SetChecked en fonction :











function SetChecked (var cbox : TCheckBox; value : char) : string;

begin

if cbox.Checked = true then
checked[cbox.Tag] := value
else
checked[cbox.Tag] := checkednot;


result := checked;

end;



il ne suffirat plus que d'appeler SetChecked sur chaque OnClick des checkbox.

et il suffit de lire la chaine "Checked" ou le retour de la fonction SetChecked.
0