Interdire Chiffres ou certains caractère dans listbox

Résolu
Signaler
Messages postés
7
Date d'inscription
dimanche 22 avril 2007
Statut
Membre
Dernière intervention
25 novembre 2007
-
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
-
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

Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
38
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','-','+','=']);

Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
38
et contraitement avec ton exemple :

with ListBox1.Items do
try
  BeginUpdate;
  Clear;
  Text := ExcludeChars(StringList.Text, ['4'..'8','@']);
finally
  EndUpdate;
end;
   
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
38
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;







Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
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.
Messages postés
7
Date d'inscription
dimanche 22 avril 2007
Statut
Membre
Dernière intervention
25 novembre 2007

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.
Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
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.
Messages postés
7
Date d'inscription
dimanche 22 avril 2007
Statut
Membre
Dernière intervention
25 novembre 2007

Re,

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

Merci encore
Messages postés
7
Date d'inscription
dimanche 22 avril 2007
Statut
Membre
Dernière intervention
25 novembre 2007

Re,

Ta fonction est fonctionnelle dans mon projet.
Combien de temps as-tu mis pour l'écrire ?
Merci encore
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
38
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.