Interdire Chiffres ou certains caractère dans listbox

Résolu
cs_petitpouce Messages postés 7 Date d'inscription dimanche 22 avril 2007 Statut Membre Dernière intervention 25 novembre 2007 - 24 avril 2007 à 13:10
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 25 avril 2007 à 16:54
Bonjour à tous,


Comment éviter la prise en compte des chiffres (ex: 45678) ou certains caractères ( ex: @) dans un listbox ?


Merci de votre aide

9 réponses

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 37
24 avril 2007 à 17:03
methode plus rapide que replacestring, peu même supporter de trés gros fichiers  :

function ExcludeChars(const S : string; const CS : set of char) : string;
var pR : PChar;
    L,I,N: integer;
begin
  L := Length(S);
  I := 0;
  for N := 1 to L do
    if S[N] in CS then I := I + 1;
  I := L - I;
  if I = 0 then
  begin
    result := '';
    exit;
  end else
  begin
    SetLength(Result, I);
    pR := PChar(Result);
    for N := 1 to L do
      if not (S[N] in CS) then
      begin
        pR[0] := S[N];
        inc(pR);
      end;
  end;
end;

utilisation :

ListBox1.Text := ExcludeChars( TSL.Text, ['0'..'9','-','+','=']);

3
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 37
24 avril 2007 à 17:08
et contraitement avec ton exemple :

with ListBox1.Items do
try
  BeginUpdate;
  Clear;
  Text := ExcludeChars(StringList.Text, ['4'..'8','@']);
finally
  EndUpdate;
end;
   
3
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 37
24 avril 2007 à 18:09
correction :





function ExcludeChars(const S : string; const CS : TSysCharSet) : string;
var pR : PChar;
    L,I,N: integer;
begin
  L := Length(S);
  I := 0;
  for N := 1 to L do
    if S[N] in CS then I := I + 1;
  I := L - I;
  if I = 0 then
  begin
    result := '';
    exit;
  end else
  begin
    SetLength(Result, I);
    pR := PChar(Result);
    for N := 1 to L do
      if not (S[N] in CS) then
      begin
        pR[0] := S[N];
        inc(pR);
      end;
  end;
end;







3
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
24 avril 2007 à 13:23
salut,

il y a une très grandes quantité de réponse à cette question sur le forum et dans les sources d'exemple. fait des recherche pour les Tedit (ou edit), les même techniques sont applicable.

(a tout hasare, faut chercher du côté de OnKeyDown & friends.)

si tu as un problème lors de l'implementation de ce que tu as trouvé, revient avec une question. on t'aidera.

bonne recherche,

Loda
Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
0

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

Posez votre question
cs_petitpouce Messages postés 7 Date d'inscription dimanche 22 avril 2007 Statut Membre Dernière intervention 25 novembre 2007
24 avril 2007 à 13:56
Merci pour ta réponse.

En fait je ne souhaite pas utiliser Onkeydown.

Je veux faire un transfert  entre un Tstringlist et un listbox.

Les chiffres ou certains caractères se trouvant dans Tstringlist n'étant pas transférés dans le listbox.
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
24 avril 2007 à 14:32
alors, ça tu dois le faire à la main. y a pas de solution magique. (je pensais que tu parlais de la saisie. dsl)

il te faut faire un truc genre
for
  str :=  replacestring ( ListSource[i], CharNonVoulu, '') ;
  
str := replacestring ( str, CharNonVoulu2, '') ;

  listDest.Add(str);

(dsl, c'est brouillon, mais je dois y aller.)

A+
Loda

ps: meilleur avec un tableau Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
0
cs_petitpouce Messages postés 7 Date d'inscription dimanche 22 avril 2007 Statut Membre Dernière intervention 25 novembre 2007
24 avril 2007 à 18:25
Re,

Merci F0xi pour ta proposition.
Je la teste et je te fais un retour.

Merci encore
0
cs_petitpouce Messages postés 7 Date d'inscription dimanche 22 avril 2007 Statut Membre Dernière intervention 25 novembre 2007
24 avril 2007 à 20:06
Re,

Ta fonction est fonctionnelle dans mon projet.
Combien de temps as-tu mis pour l'écrire ?
Merci encore
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 37
25 avril 2007 à 16:54
content de voir qu'elle fonctionne bien chez toi,
j'ai du mettre a peu prés 2 minutes pour y reflechir, 15 pour faire l'ebauche et te la poster, 60 de plus pour l'ameliorer, la corriger, la mettre sur codyx et te poster la correction.

0
Rejoignez-nous