Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

DÉPLACER LE FOCUS D'UN TEDIT À L'AUTRE EN IGNORANT LES AUTRES COMPOSANTS


Information sur la source

Catégorie :Control Classé sous : edit, focus, déplacer, enter, saisie Niveau : Débutant Date de création : 06/11/2004 Date de mise à jour : 06/11/2004 13:46:54 Vu : 6 872

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (20)
Ajouter un commentaire et/ou une note


Description

Permet de mettre le focus sur l'Edit suivant ou l'Edit précédent en fonction de la touche pressée, en ignorant les autres composants (TButton, etc...).

- VK_DOWN, VK_NEXT, VK_RETURN : focus sur l'Edit suivant dans l'ordre de tabulation;
- VK_UP, VK_PRIOR : focus sur l'Edit précédent dans l'ordre de tabulation.

J'ai préféré placer l'appel à la procedure dans l'évènement OnKeyDown des TEdit, afin de pouvoir utiliser les flèches d'avancement.

Mais si l'on se contente de la touche entrée, on peut le placer dans OnKeyPress, ainsi :

  if Key = #13 then SetFocusNextEdit;

Un code très court, très simple, mais très utile, répondant à une question récente posée sur ce forum.

Je le mets ici à la disposition du plus grand nombre.


Précisions :

Les TEdits doivent être reliés à l'évènement OnKeyDown du TEdit sur lequel est placé l'évènement (ici Edit1). Le plus simple est d'utiliser l'inspecteur d'objets. Pour les débutants : sélection des Edits à l'aide de la touche majuscule, et clic sur l'évènement OnKeyDown.

Bien sûr, bien que les composants autres que les TEdit soient ignorés, il est préférable de mettre la propriété TabOrder des TEdits dans une progression cohérente, afin que le déplacement du focus semble logique.

Le mieux étant, pour se simplifier la vie, de les créer à la suite, même si l'on peut à tout moment, sans problème, intercaler la création d'un autre composant.

Mes procedures utilisent l'unité "Message.pas".

On peut bien sûr adapter ce code à d'autre composants que les TEdit, vous l'aurez noté...
 

Source

  • // déclaration
  • procedure SetFocusPreviousEdit;
  • procedure SetFocusNextEdit;
  • implementation
  • procedure TForm1.SetFocusPreviousEdit;
  • begin
  • repeat
  • Perform(WM_NEXTDLGCTL, -1, 0);
  • until ActiveControl is TEdit;
  • end;
  • procedure TForm1.SetFocusNextEdit;
  • begin
  • repeat
  • Perform(WM_NEXTDLGCTL, 0, 0);
  • until ActiveControl is TEdit;
  • end;
  • procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  • Shift: TShiftState);
  • begin
  • case Key of
  • VK_DOWN, VK_NEXT, VK_RETURN: SetFocusNextEdit;
  • VK_UP, VK_PRIOR: SetFocusPreviousEdit;
  • end;
  • end;
// déclaration

procedure SetFocusPreviousEdit;
procedure SetFocusNextEdit;

implementation

procedure TForm1.SetFocusPreviousEdit;
begin
  repeat
    Perform(WM_NEXTDLGCTL, -1, 0);
  until ActiveControl is TEdit;
end;

procedure TForm1.SetFocusNextEdit;
begin
  repeat
    Perform(WM_NEXTDLGCTL, 0, 0);
  until ActiveControl is TEdit;
end;

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
    VK_DOWN, VK_NEXT, VK_RETURN: SetFocusNextEdit;
    VK_UP, VK_PRIOR: SetFocusPreviousEdit;
  end;
end;

Conclusion

Même s'il n'y a qu'un Edit (!), pas de problème.
Et il y a forcément au moins un Edit, lol...
 

Historique

06 novembre 2004 13:06:20 :
06 novembre 2004 13:46:54 :

Commentaires et avis

signaler à un administrateur
Commentaire de Delphiprog le 06/11/2004 14:19:09 administrateur CS

Pas mal. Mais si on veut alléger ton code on peut aussi écrire et prendre en compte la touche Shift :

procedure TForm1.SetFocusNextEdit(GoForward: boolean = True);
begin
  repeat
    Perform(WM_NEXTDLGCTL, Ord(GoForward) - 1, 0);
  until ActiveControl is TCustomEdit;
end;

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
    VK_DOWN, VK_NEXT : SetFocusNextEdit;
    VK_RETURN:
      {Par défaut, la touche Shift inverse le parcours
      des contrôles pour les touches Enter et TAB}
      if ssShift in Shift then
        SetFocusNextEdit(False)
      else
        SetFocusNextEdit;

    VK_UP, VK_PRIOR: SetFocusNextEdit(False);
  end;
end;

Je propose une autre alternative basée sur les principes suivants :
- mettre la propriété KeyPreview de la fiche à True
- mettre le code qui suit dans le gestionnaire d'évènement OnKeyPress de la fiche :
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
var
  WinControl: TWinControl;
begin
  if Key = #13 then
    repeat
      WinControl := FindNextControl(ActiveControl, True, True, False);
      if WinControl is TCustomEdit then
      begin
        WinControl.SetFocus;
        Key := #0;
        Break;
      end
      else
        ActiveControl := WinControl;
    until WinControl = nil;
end;
Et c'est tout !
Donc pas besoin d'assigner d'évènement OnKeyPress à chaque TEdit. Ben voui, s'il y en a beaucoup sur une fiche, ça devient vite fastidieux et le risque d'oubli augmente en proportion.

Je pense que vous ferez sans difficultés l'adaptation si vous souhaitez adapter ce code à l'évènement OnKeyDown de la fiche.

Encore Bravo Japee.

signaler à un administrateur
Commentaire de japee le 06/11/2004 15:10:05 administrateur CS

En voilà, un commentaire constructif et enrichissant, Delphiprog !

Ton deuxième code, en particulier, m'a inspiré.

Donc, pour les paresseux ;) ou ceux qui peineraient à l'adapter à l'énènement OnKeyDown:

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  WinControl: TWinControl;
  GoForward: Boolean;
begin
  case Key of
    VK_DOWN, VK_NEXT, VK_RETURN: GoForward := True;
    VK_UP, VK_PRIOR: GoForward := False;
    else Exit;
  end;
  repeat
  WinControl := FindNextControl(ActiveControl, GoForward, True, False);
  if WinControl is TCustomEdit then
  begin
    WinControl.SetFocus;
    Key := 0;
    Break;
  end
  else
    ActiveControl := WinControl;
  until WinControl = nil;
end;

Pour le premier, serait-il intéressant de remplacer ce morceau de code:

VK_RETURN: SetFocusNextEdit(not (ssShift in Shift));
  if ssShift in Shift then
    SetFocusNextEdit(False)
  else
    SetFocusNextEdit;

par

VK_RETURN: SetFocusNextEdit(not (ssShift in Shift));

?

Merci à toi.

signaler à un administrateur
Commentaire de JulioDelphi le 06/11/2004 17:46:49 administrateur CS

wow je vois de bons codes là depuis qqs jours :)

celui ci me plait aussi :D mais euh ... en fait, la finalité de ce code est de passer Edit en Edit en evitant les autres compo .. ok ...

N'est-il pas plus simple de mettre le TabStop à False sur les autres compos et de bien regler l'odre de tabulation des autres edit ?
ou alors j'ai pas tout capicce ...

signaler à un administrateur
Commentaire de japee le 06/11/2004 18:15:14 administrateur CS

Pourquoi pas, JulioDelphi ? Ton idée est intéressante.
Mais on peut avoir besoin de garder la possibilité d'utiliser TabStop pour les autres composants...
Et puis, s'il y a beaucoup de composants pouvant recevoir le focus, autres que des TEdit, il est facile d'en oublier un...
Il est plus facile de regrouper les Edits qu'on veut voir réagir au code.
Et si l'on utilise la 2eme méthode décrite par DelphiProg, alors là, y'a même plus à hésiter.
Et puis s'il n'y a pas moyen de trouver un prétexte à faire un source, alors...  :(
Capicce ?  ;)

signaler à un administrateur
Commentaire de japee le 06/11/2004 18:27:45 administrateur CS

Au fait, à mon avis :

- mon code et le premier de Delphiprog sont plus adaptés si l'on ne désire appliquer l'effet qu'à certains Edits de la fiche, mais pas à tous;

- le 2ème code de Delphiprog est plus adapté dans le cas où l'on veut l'appliquer à tous les Edits de la fiche.

- la solution de JulioDelphi n'est pas dépourvue d'intérêt non plus.

Je vais ajouter une version allégée tenant compte des remarques de Delphiprog, tout en restant dans l'esprit de mon code d'origine.

signaler à un administrateur
Commentaire de Delphiprog le 06/11/2004 19:33:53 administrateur CS

JulioDelphi: effectivement, un solution consisterait à mettre la propriété TabStop à False des autres composants. Mais alors, comment l'utilisateur ayant l'habitude de se déplacer avec la touche tabulation fera-t-il ?
D'ailleurs mon code possède une grosse lacune : il ne distingue pas un TEdit d'un autre composant.
Il faut donc ajouter au début de FormKeyDown ou FormKeyPress :

if (ActiveControl is TCustomEdit) and (Key = #13) then...
ou son équivalent
if (ActiveControl is TCustomEdit) and (Key = VK_RETURN) then...

Voilà Japee, la balle est dans ton camp maintenant.
Mais, sincèrement, ne penses-tu pas qu'il est intéressant et enrichissant pour les personnes qui liront nos commentaires plus tard de mieux comprendre les différentes possibilités ?
Donc tu peux laisser ton code originel. Il ne souffre d'aucun défaut. Tu as eu une approche différente, tout comme JulioDelphi. Ma méthode n'est pas meilleure. Elle est juste différente.
Après tout, un problème peut comporter plusieurs solutions ou avoir plusieurs manières d'être traité.

signaler à un administrateur
Commentaire de grandvizir le 07/11/2004 12:41:26

Je confirme que le KeyPreview de Delphiprog est bien meilleur. En effet, la centralisation des OnKey[Event] sur un composant TEdit est un énorme surgénérateur d'octets. C'est pareil avec d'autres composants...

DelphiProg a encore raison cette fois. On n'a pas le droit de modifier TabStop sans scrupules. Cette propriété est très importante. Déjà, c'est l'un des 4 critères de focusabilité. Le truc caché: JulioDelphi tend à parasiter le fonctionnement des tabulations. Jouons: mettons 3 composants fenêtrés (donc focusables) dont le N°2 pris en sandwich avec sa propriété TabStop=false. Si on est sur le CompoN°1 et qu'on fait Tab, on passe sur CompoN°3. Le second a été oublié. Alors, on met true, on met false... on ne touche à rien plutôt.

En fait, pour bien voir l'utilité de TabStop, il suffit de se référer au développement des TRadioCheckBox. J'ai bossé dessus: ouhlala ! Faut pas oublier une ligne de code parce que pour remettre à jour l'ordre dans les TabStop... ... (je met doubles suspensions). A ne pas confondre avec TabOrder ! A la base, l'idée est bonne, mais techniquement... plouf! Il peut toujours essayer de démontrer le contraire: ça sera intéressant pour tout le monde.

signaler à un administrateur
Commentaire de japee le 07/11/2004 16:15:23 administrateur CS

Le "KeyPreview" de Delphi prog est "bien meilleur" dans le cas où l'on veut impliquer tous les TEdits de la fiche.

C'est clair, et je l'ai déjà dit, et je suis d'accord, et personne ne dit le contraire, et ça ne fait aucun doute, et c'est ok,  et ça le fait, et aucun argument contradictoire n'ayant été avancé..., et qui a dit le contraire? Donc adjugé, vendu...

Sinon, selon ses besoins, chacun choisira la technique qui lui convient le mieux... et je ne vois pas qui pourra l'en empêcher, puisque ce sera son choix, pris en connaissance de cause, tout ayant été dit dans les commentaires.

Au fait, pas une ligne de code dans mon post... On pourrait penser que mon avis est subjectif et sujet à caution, et comme tout argument non démontré est facile à contredire... lol :)

Mais regardez, mon code est plus haut, dans mon source.

Bonne prog' à tous

P-S: je confirme, Delphiprog est bien le meilleur, s'il était moins présent sur ce site, ce dernier perdrait beaucoup en intérêt (opinion certes subjective et difficilement démontrable, c'est juste la mienne).  ;)

signaler à un administrateur
Commentaire de MAURICIO le 08/11/2004 11:28:29

Voici un probleme archi connu pour delphi:
remplacer la touche Tab par la touhe Enter dans les forms:

Il suffit d' utiliser la fonction suivante dans votre OnKeyPress de votre form (Form.keypreview doit être à true):

procedure NavegarComEnter(Na_Form: TForm; Var Tecla: Char);
var TWC  : TWinControl;
    Cont : Boolean;
begin
  If Tecla = #13    // *** Tecla Enter *** //
  Then Begin
    Try
      TWC := Nil;
      TWC := Na_Form.ActiveControl As TWinControl;
    Except

    End;

    If TWC <> Nil
    Then Begin
      If TWC Is TDBLookupComboBox
      Then Cont := Not ((TWC As TDBLookupCombobox).ListVisible)
      Else Cont := True;
    End
    Else
      Cont := False;

    If Cont
    Then
      If Not (TWC Is TDBMemo) And Not (TWC Is TMemo) And Not (TWC Is TDBRichEdit) And Not (TWC Is TDBGrid)
      Then Begin
        Na_Form.Perform( WM_NEXTDLGCTL, 0, 0 );
        Tecla := #0;
      End;
  End;
end;

Ok, on va me dire que le code peut etre optimisé, mais il a au moins 6 ans et depuis, je ne l' ai pas changé ...

signaler à un administrateur
Commentaire de MAURICIO le 08/11/2004 11:32:04

Pour ceux qui n' aurait pas compris:
il faut appeler la fonction de maniere suivante:
(ouai, mais n' oubliez pas de la mettre dans votre unit quand meme ...)

procedure Tform1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  NavegarComEnter(form1, Key);
end;

signaler à un administrateur
Commentaire de grandvizir le 10/11/2004 18:24:19

[Japee] Je ne demande pas de foudre de untel sur l'autretel. On a compris qu'il y a la méthode de X, de Y et de Z. C'est tout. Je raisonnais juste en terme d'octet pour un gain SIGNIFICATIF de place. Il n'y a pas que des "pros" sur ce site, et il convient donc de montrer les subtilités qui ne sont a priori pas connues de tous. C'est tout... Sinon, faut pas trop jouer sur les mots.

Je ne suis pas faché :)) La preuve !

signaler à un administrateur
Commentaire de grandvizir le 10/11/2004 19:31:30

[MAURICIO] Pour convertir les Enter en Tabs, il suffit juste dans l'évènement onKeyDown de mettre:
if key=#13 then key:=#9;
Le composant se charge du reste après.

Sinon, je ne voit pas le rapport avec les TDBMachin. On vit dans les TEdit ici (pas exclusivement non plus).

signaler à un administrateur
Commentaire de Delphiprog le 10/11/2004 20:19:13 administrateur CS

GrandVizir et Mauricio : regardez mon code et vous verrez que j'ai utilisé le test :

if WinControl is TCustomEdit then...

parce que TdBEdit, TEdit, TMaskEdit, TMemo, TDbMemo, TDbLookupCombo, etc descendent tous de TCustomEdit et qu'il devient de ce fait inutile de tester chaque composant.
Il faut aussi savoir utiliser les relations dhéritage.

Mauricio : ActiveControl est du type TWinControl. D'ailleurs, tous les contrôles visuels déposés sur une fiche descendent de TWinControl (attention : sous Delphi mais pas sous Kylix).
Tu peux donc "alléger" ton code de la manière suivante :
procedure NavegarComEnter(Form: TForm; var Key: Char);
var
  TWC: TWinControl;
  Cont: Boolean;
begin
  if Key = #13 then
  begin
    Cont := True;
    TWC := Form.ActiveControl;

    if TWC is TDBLookupComboBox then
      Cont := not ((TWC as TDBLookupCombobox).ListVisible);

    if Cont and not ((TWC is TDBMemo)
        or (TWC is TMemo)
        or(TWC is TDBRichEdit)
        or (TWC is TDBGrid)) then
      begin
        Form.Perform(WM_NEXTDLGCTL, 0, 0);
        Key := #0;
      end;
  end;
end;

signaler à un administrateur
Commentaire de japee le 10/11/2004 21:20:52 administrateur CS

grandvizir >  moi aussi j'aime tout le monde, et tous les intervenants sur cette page sont de grande qualité, et je respecte leur avis.

Je maintiens que mon code est une approche intéressante du problème.

Je ne suis pas fâché non plus (no problem), et ne perdons pas l'enthousiasme qui nous fera avancer toujours plus loin ;)

Faut pas mollir !

Bonne prog' à tous :))))))))

signaler à un administrateur
Commentaire de MAURICIO le 11/11/2004 14:58:00

Ha grandvizir, si tu fais seulement:
if key=#13 then key:=#9
tu vas avoir quelques problemes avec certains composants (le memos par exemple).
Bem ouai, si tu veux aller à la ligne dans un Memo, bem tu peux pas, c pour ça que je regarde quel est le control qui a le focus.
De plus, il faut mettre:
if TWC is TDBLookupComboBox then
      Cont := not ((TWC as TDBLookupCombobox).ListVisible);

Enfin, merci à Delphiprog pour l' optimisation de mon code ... C' est vraiment un grand Monsieur ce DelphiProg. Pour peu, je l' appelerai DelphiPro, ça lui va mieux!!!

signaler à un administrateur
Commentaire de MAURICIO le 11/11/2004 15:30:34

Voici la nouvelle fonction ameliorée grâce à DelphiPRO:
(il faut l' appeler dans le onkeypress de vos forms qui, celles-ci doivent avoir keypreview à True)

je garde cette ligne DelphiProg : Cont := TWC <> Nil;
Tu vois pourquoi ...

procedure NavegarComEnter(Na_Form: TForm; var Tecla: Char);
var TWC  : TWinControl;
    Cont : Boolean;
begin
  if Tecla = #13
  then begin
    TWC  := Na_Form.ActiveControl;
    Cont := TWC <> Nil;

    if Cont
    then begin
      if TWC is TDBLookupComboBox
      then Cont := not ((TWC as TDBLookupCombobox).ListVisible);

      if Cont and not ((TWC is TDBMemo)
          or (TWC is TMemo)
          or(TWC is TDBRichEdit)
          or (TWC is TDBGrid)) then
        begin
          Na_Form.Perform(WM_NEXTDLGCTL, 0, 0);
          Tecla := #0;
        end;
    end;
  end;
end;

signaler à un administrateur
Commentaire de grandvizir le 12/11/2004 19:15:55

Je cite: «Bem ouai, si tu veux aller à la ligne dans un Memo, bem tu peux pas». Sauf si tu paramètres WantsTabs et WantsReturn correctement.

signaler à un administrateur
Commentaire de MAURICIO le 15/11/2004 18:53:22

Je cite:
<<[MAURICIO] Pour convertir les Enter en Tabs, il suffit juste dans l'évènement onKeyDown de mettre:
if key=#13 then key:=#9;
Le composant se charge du reste après.>>

Dans le OnKeyDown tu peux pas mettre ça!!! Impossible!!!
Donc ton dernier commentaire, ne tiens pas debout...

Je cite:
<<Sinon, je ne voit pas le rapport avec les TDBMachin. On vit dans les TEdit ici (pas exclusivement non plus).>>
Si t' as pas compris, je t' explique:
Aller, je me cite:
<<Voici un probleme archi connu pour delphi:
remplacer la touche Tab par la touhe Enter dans les forms:>>
Donc, c' est une fonction utilisable de maniere GENERALE pour n' importe quelle form.
Tu as compris maintenant pourquoi je parle de DB truc machin???????????????????????????

signaler à un administrateur
Commentaire de grandvizir le 20/11/2004 19:22:58

En tout cas, dans OnKeyPressed, ça marche !... euh... Ah ouais, je viens de voir le truc... En fait, tellement l'évènement OnKeyPressed me paraissait évident que j'ai mis OnKeyDown. C'est logique ! ?? Mais qui sait, je me trompe encore.

signaler à un administrateur
Commentaire de grandvizir le 21/11/2004 11:40:13

Nan mais vraiment !!! Bien sûr que si qu'on peut changer le Key sur l'évènement OnKeyDown. C'est pas «impossible», sauf si on ne voit pas la différence entre un key en mode CHAR (onKeyPress) et un key en mode ORDINAL (onKeyUp/Down). C'est sûr qu'on ne peut pas écrire Key:='x'; sur OnKeyDown. On peut par contre mettre Key:=Ord('x'); Inversement avec OnKeyPress. C'est une histoire de conversion, pas de faisabilité. Restons en là avec "is TCustomEdit" de DelphiProg :)

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

mask edit et exception [ par deubal ] bonjour,je cherchais a mettre un masque sur une zone de saisie pour obliger l'utilisateur a saisir une date (format jj/mm/aaaa). trouv&#233; sur le fo Déplacer le curseur dans un Edit [ par smau ] Je souhaite afficher un x encadré par 2 espaces lorsque l'utilisateur tape au clavier le caractère * .Pour ça, je pensais faire dans OnKeyPress:Key:= contrôle de saisie [ par pseudoOM ] Bonjour tout le monde.Quelqu'un pourrait-il m'aider pour les contr&#244;le de saisie. J'aimerais contr&#244;ler si l'utilisateur entre des chiffre dan controle saisie (edit) [ par zorro4243 ] Je ne trouve pas de solution au problème suivant, simple et fréquent de surcoit ! Dans un evenement 'on KeyPress', je souhaite contrôler et surtout M Bloquer les lettres dans un Edit [ par LaNat88 ] Bonjour,J'ai un Edit accueuillant la saisie d'un num&#233;ro de t&#233;l&#233;phone et j'aimerais bloquer la saisie de lettres; je vois pas trop comme Forcer la saisie en majuscule dans un Edit ? [ par Val08000 ] Bonjour !Je suis d&#233;butant en delphi !Je voudrais savoir comment faire pour forcer la saisie en majuscule dans un Edit afin de rentrer&nbsp;cette Seulement des chiffres dans un edit. [ par Becracker ] Salut &#224; tous, Je voudra savoir si qqn d'entre vous sait comment faire pour qu'un edit n'accepte que des chiffres. Merci &#224; tous et d&#233;s focus sur fiche [ par bouziri ] je veux cr&#233;er une fiche (boite de dialogue) qui recherche un mot dans un Dbgrid d'une autre fiche tel que la fonction de recherche dans Microsoft Récup longueur de la saisie [ par MimiGMT ] Bonjour,Voil&#224; j'ai un petit souci : je souhaite connaitre la longueur du texte que je suis en train de saisir : pas de probl&#232;me pour les dbe comment déplacer (vers le haut et vers le bas) une ligne dans un stringGrid? [ par saravana ] salut a tous je cherche comment d&#233;placer (vers le haut et vers le bas) une ligne dans un stringgrid en cliquant tout simplement sur un bouton (to


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,624 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.