IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

Liste ordonnée (je recommence)


Sujet :

Delphi

  1. #1
    Membre averti
    Homme Profil pro
    aux études mais 40 ans
    Inscrit en
    Juin 2004
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aux études mais 40 ans

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 023
    Points : 308
    Points
    308
    Par défaut Liste ordonnée (je recommence)
    Bon voila je recommence parceque ce que j'ai fais ne me plait pas !

    J'ai fais un stringgrid dont le but est de classer par ordre des fichiers (audio).

    L'idée c'était de mettre dans le collone 1 du stringgrid les noms des fichiers audio et de laisser la collone 0 éditable.
    L'user aurait alors placé des numéros dans la collone 0.
    Puis le stringgrid aurait trié les fichiers en fonction des numéros.

    Mais voila que ce matin un pote m'envoit un gadget Vista (très nul d'ailleurs) que j'intalle et il se place tout en haut de mes gadgets, je le descend et la que vois je ? Les autres gadgets remontent et se reprositionnent.

    Je trouve ça génial, beau, simple, efficace !
    Je me demandais s'il était possible de faire pareil dans mon Stringgrid (ou un autre composant).
    C'est à dire au lieu de donner des numéros aux fichiers audio, les rangers "à la souris", ensuite quand j'enregistre mon travail le programme assignerait des numéros (invisibles pour l'user) en fonction de l'emplacement dans le stringgrid.

    Cela vous semble t'il possible ? Y a t'il des composants qui font ça ?

    Merci.

    A+

  2. #2
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    Hi,

    y'a quelques pointures ici (style PaulToth ou shailLeTroll) qui te feraient ça en trois coups de cuillère à pot... attendons de voir s'ils passent dans le secteur...

  3. #3
    Membre averti
    Homme Profil pro
    aux études mais 40 ans
    Inscrit en
    Juin 2004
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aux études mais 40 ans

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 023
    Points : 308
    Points
    308
    Par défaut
    Bon ça part mal alors, ca veut dire qu'il faut être une pointure ?
    Moi je suis franchement un navet, aucune chance alors ?

  4. #4
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    Citation Envoyé par puce_84 Voir le message
    Bon ça part mal alors, ca veut dire qu'il faut être une pointure ?
    Moi je suis franchement un navet, aucune chance alors ?
    Ça, c'est aux pointures de te le dire...

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 662
    Points : 25 447
    Points
    25 447
    Par défaut
    Sinon, un Drag&Drop dans une TListView, ça fonctionne sans soucis !

  6. #6
    Membre averti
    Homme Profil pro
    aux études mais 40 ans
    Inscrit en
    Juin 2004
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aux études mais 40 ans

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 023
    Points : 308
    Points
    308
    Par défaut
    Hello Shailetroll,

    Il est cool ce composant par contre je ne pige pas bien ce que tu veux dire par Drag et Drop.
    Il y aurait moyen de simplement déplacer des trucs dans la liste en les faisant glisser avec la souris ?
    Si oui comment active ton cette fonction ?

    Merci.

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 662
    Points : 25 447
    Points
    25 447
    Par défaut
    Tiens, j'ai bidouillé ça pour une TStringGrid, bon, le stockage des cellules d'origine m'a toujours posé des problèmes, en DragMode Automatique, parce BeginDrap c'est pénible ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    var
      OverCol, OverRow: Integer; // variable à mettre comme membre privé de la Form
     
    procedure TFrmTestDivers.StringGridDestImgDragOver(Sender, Source: TObject;
      X, Y: Integer; State: TDragState; var Accept: Boolean);
    begin
      Accept := (Sender is TStringGrid) and (Source is TStringGrid);
      if Accept then
      begin
        if (OverCol = -1) or (OverRow = -1) then
        begin
          TStringGrid(Source).MouseToCell(X, Y, OverCol, OverRow);
          MemoLogDrawCell.Lines.Add(Format('Over %d x %d', [OverCol, OverRow] ));
        end;
      end
      else
      begin
        OverCol := -1;
        OverRow := -1;
      end;
    end;
     
    procedure TFrmTestDivers.StringGridDestImgDragDrop(Sender, Source: TObject;
      X, Y: Integer);
    var
      NewCol, NewRow: Integer; 
      TmpCell: string;
    begin
      if (Sender is TStringGrid) and (Source is TStringGrid) then
      begin
        TStringGrid(Sender).MouseToCell(X, Y, NewCol, NewRow);
     
        MemoLogDrawCell.Lines.Add(Format('Drop Over %d x %d', [OverCol, OverRow] ));
        MemoLogDrawCell.Lines.Add(Format('Drop New %d x %d', [NewCol, NewRow] ));
     
        if (OverCol <> NewCol) or (OverRow <> NewRow) then // ça serait bien de controller les bornes avec FixedRow\Col et Col\RowCount
        begin
          TStringGrid(Source).EndDrag(True);
     
          TmpCell := TStringGrid(Sender).Cells[NewCol, NewRow];
          TStringGrid(Sender).Cells[NewCol, NewRow] := TStringGrid(Source).Cells[OverCol, OverRow];
          TStringGrid(Source).Cells[OverCol, OverRow] := TmpCell;
          // Pour l'Id tu peux faire le même Swap avec la propriété Objects
     
          OverCol := -1;
          OverRow := -1;
        end;
      end;
    end;

    EDIT : Euh, Drap & Drop, c'est justement le nom de la fonctionnalité, connu en français sous les termes de Glisser & Déposer

    EDIT 2 : Je ne fais que rarement du D&D, pas du Dongeon et Dragon, bande de geek, donc mon code est assez vilain, si un habitué pouvait nous montrer la méthode élégante pour gérer Over et Drop !

    EDIT 3 : Bien mettre DragMode à dmAutomatic sur le TStringGrid concerné !

  8. #8
    Membre averti
    Homme Profil pro
    aux études mais 40 ans
    Inscrit en
    Juin 2004
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aux études mais 40 ans

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 023
    Points : 308
    Points
    308
    Par défaut
    Bon j'ai essayé d'appliquer ton système dans mon application mais j'obtiens toujours ce message d'erreur :
    [DCC Erreur] Unit3.pas(152): E2003 Identificateur non déclaré : 'MemoLogDrawCell'

    D'autre part si je comprends bien ça ne fait pas ce que je veux.
    --> Je ne veux pas faire glisser un fichier de l'extérieur de mon application dans le tableau, c'est dans le tableau lui même que je veux déplacer différentes lignes pour les monter ou les descendre dans le tableau.

    J'ai bien compris ?

  9. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 662
    Points : 25 447
    Points
    25 447
    Par défaut
    'MemoLogDrawCell', normal, c'est un Memo sur ma fenêtre pour débugger les events, tu peux en retirer l'utilisation, tu peux retirer ces 3 lignes... j'ai écrit ce code dans mon application à bordel ... en D6 (pas D2006 mais bien D6)

    sinon, j'ai bien compris, cela fait bouger une cellule A vers une Cellule B, en fait cela inverse leur contenu ... dans le même TStringGrid, pourquoi tu me parles de fichier extérieur ?

  10. #10
    Membre averti
    Homme Profil pro
    aux études mais 40 ans
    Inscrit en
    Juin 2004
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aux études mais 40 ans

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 023
    Points : 308
    Points
    308
    Par défaut
    Ok cool ca m'arange bien vu que maintenant ça marche et que je pigeais pas ce que c'était ces lignes.

    Merci c'est génial c'est exactement ce que je voulais faire.

    A+

  11. #11
    Membre averti
    Homme Profil pro
    aux études mais 40 ans
    Inscrit en
    Juin 2004
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aux études mais 40 ans

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 023
    Points : 308
    Points
    308
    Par défaut
    Encore un détail :

    J'ai mis en oeuvre ton code et je constate que ça déplace une cellule vers une autre cellule.

    Je voudrais déplacer une ligne vers une autre ligne.
    J'y arrive mais si je vais de travers ça bloque le programme.

    Exemple si je clique dans la ligne 3 collone 1 et que je glisse vers collone 1 cellule 1 ça marche mais si je glisse vers collone 1 cellule 2 ça bloque.

    Peux tu encore m'aider pour ça ?

    Merci

  12. #12
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 662
    Points : 25 447
    Points
    25 447
    Par défaut
    Après, as-tu activé RowSelect par Exemple ?
    Sinon, tu dois faire une boucle sur ColCount pour déplacer à chaque cellule

    tiens en fonction si la touche ALT Gauche est maintenu cela déplace la cellule ou la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    procedure TFrmTestDivers.StringGridDestImgDragDrop(Sender, Source: TObject;
      X, Y: Integer);
     
      function IsKeyDown(VKey: Integer):Boolean;
      begin
        Result := GetAsyncKeyState(VKey) < 0;
      end;
     
    var
      NewCol, NewRow: Integer; 
      TmpCell: string;
      I: Integer;
    begin
      if (Sender is TStringGrid) and (Source is TStringGrid) then
      begin
        TStringGrid(Sender).MouseToCell(X, Y, NewCol, NewRow);
     
        MemoLogDrawCell.Lines.Add(Format('Drop Over %d x %d', [OverCol, OverRow] ));
        MemoLogDrawCell.Lines.Add(Format('Drop New %d x %d', [NewCol, NewRow] ));
     
        if (OverCol <> NewCol) or (OverRow <> NewRow) then
        begin
          TStringGrid(Source).EndDrag(True);
     
          if IsKeyDown(VK_LMENU) then // Alt Gauche
          begin
            for I := 0 (*TStringGrid(Source).FixedCols*) to TStringGrid(Source).ColCount - 1 do
            begin
              TmpCell := TStringGrid(Sender).Cells[I, NewRow];
              TStringGrid(Sender).Cells[I , NewRow] := TStringGrid(Source).Cells[I, OverRow];
              TStringGrid(Source).Cells[I , OverRow] := TmpCell;
              // Pour l'Id tu peux faire le même Swap avec la propriété Objects
            end;
          end
          else
          begin
            TmpCell := TStringGrid(Sender).Cells[NewCol, NewRow];
            TStringGrid(Sender).Cells[NewCol, NewRow] := TStringGrid(Source).Cells[OverCol, OverRow];
            TStringGrid(Source).Cells[OverCol, OverRow] := TmpCell;
          end;
     
          OverCol := -1;
          OverRow := -1;
        end;
      end;
    end;

  13. #13
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 443
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 443
    Points : 5 863
    Points
    5 863
    Par défaut
    salut

    le dragdrop dans un treeview
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
     
     
    procedure DeleteTreeNode(SourceNode: TTreeNode);
    begin
      if Assigned(SourceNode.data) Then
        FreeMemory(SourceNode.data);
      SourceNode.Delete;
    end;
     
    procedure MoveTreeNode(tv: TTreeView; SourceNode, DestNode: TTreeNode);
     
      procedure MoveTreeNode_internal(DontMoveSiblings, SourceNode, DestNode: TTreeNode);
      var
        NewNode: TTreeNode;
      begin
        if (DestNode = nil) then
          Exit;
        if (SourceNode = nil) then
          Exit;
     
        {Create new child}
        NewNode := tv.Items.AddChild(DestNode, SourceNode.Text);
        {Use same images}
        NewNode.ImageIndex    := SourceNode.ImageIndex;
        NewNode.SelectedIndex := SourceNode.SelectedIndex;
        NewNode.Data          := SourceNode.Data;
     
        {If this node has children move them first}
        if (SourceNode.HasChildren) then
          MoveTreeNode_internal(DontMoveSiblings, SourceNode.GetFirstChild,
            NewNode);
     
        {Move all siblings, unless at original level}
        if (DontMoveSiblings <> SourceNode) then
          MoveTreeNode_internal(DontMoveSiblings, SourceNode.GetNextSibling,
            DestNode);
      end;
    begin
      {Copy node + children}
      MoveTreeNode_internal(SourceNode, SourceNode, DestNode);
      {Delete original}
      DeleteTreeNode(SourceNode);
    end;
     
     
    procedure TForm.TreeVIewImgDragDrop(Sender, Source:TObject; X, Y: Integer);
    var
      TargetNode : TTreeNode;
      SourceNode : TTreeNode;
      st : String;
    begin
      with ( Sender as TTreeView ) do // on regade l'appelant
      begin
     
        TargetNode := GetNodeAt(  X,  Y  );
        SourceNode := Selected;
     
        if(  TargetNode = nil  ) then
        begin
          EndDrag(  false  );
          Exit;
        end;
     
        if ((TargetNode = Selected) or
            (TargetNode = Selected.Parent) ) then // si la destination 
                                                                //est la meme que la source
        begin
          EndDrag(  false  );
          Exit;
        end;
     
        {No drag-drop of the root allowed}
        if(  SourceNode.Level = 0  ) then
        begin
          MessageBeep(  MB_ICONEXCLAMATION  );
          ShowMessage(  'Cant drag/drop the root'  );
          EndDrag(  false  );
          Exit;
        end;
     
        {Can't drop a parent onto a child}
        if(   IsAParentNode(  Selected,  TargetNode  )   ) then
        begin
          MessageBeep(  MB_ICONEXCLAMATION  );
          ShowMessage(  'Cant drop parent onto child'  );
          EndDrag(  false  );
          Exit;
        end;
     
        {Does a node with this name exists as a child of TargetNde}
        if( IsDuplicateName(  TargetNode.GetFirstChild,  SourceNode.Text,  true  )   ) then
        begin
          MessageBeep(  MB_ICONEXCLAMATION  );
          ShowMessage(  'A node with this name already exists'  );
          EndDrag(  false  );
          Exit;
        end;
     
        //////////////////////////////////////////////////////////////
        // Nothing differant up to here.  Just the normal drag and
        //   drop checking.  Now the code to make sure that enforce
        //   "the rules".  Eg books may contain no sub-nodes
        //////////////////////////////////////////////////////////////
        {Use the IsNodeAllowed function to test if the node may be dropped here}
        if (not IsNodeAllowed(TargetNode, GetNodeType(SourceNode))) then
        begin
          MessageBeep($ffffff );
          ShowMessage(  'You cant drop this type of node here!'  );
          EndDrag(  false  );
          Exit;
        end;
     
        if GetNodeType(TargetNode) <> OwnNodeType Then
        begin
          MessageBeep($ffffff );
          ShowMessage(  'You cant drop this type of node here!'  );
          EndDrag(  false  );
          Exit;
        end;
     
        {Drag drop was valid so move the nodes}
        MoveTreeNode(( Sender as TTreeView ),  SourceNode,  TargetNode  );
        enregistrenouvellePos;
     
        {Delete the old node}
        SourceNode.Delete;
        {Show the nodes that were just moved}
        TargetNode.Expand(  true  );
      end;
    end;
     
     
    procedure TForm.TreeVIewImgDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
    var
      nd  : TTreeNode;
    begin
      Accept := false;
      {Only accept drag and drop from a TTreeView}
     
      if(  Sender is TTreeView  ) then
         {Only accept from self}
      if(  TTreeView(Sender) = TrVImg  ) then
      begin
        Nd     := (Sender as TTreeView).Selected;
        if assigned(nd.Data) Then
        begin
          if TObjdata(nd.Data).NodeType = owntypeimg Then
            Accept := true;
        end;
      end;
    end;
     
    procedure TForm.TreeVIewImgMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      inherited;
      (Sender as TTreeView).BeginDrag(False);
    end;
     
    // pour gerer des hint diferent a chaque ligne du treeview
    procedure TForm.TreeVIewImgMouseMove(Sender: TObject; Shift: TShiftState;
      X, Y: Integer);
    var
      tree: TTreeView;
      hoverNode : TTreeNode;
      hitTest   : THitTests;
    begin
      if (Sender is TTreeView) then
        tree := TTreeView(Sender)
      else
        Exit;
     
      hoverNode := tree.GetNodeAt(X, Y) ;
      hitTest   := tree.GetHitTestInfoAt(X, Y) ;
     
      if (lastHintNode <> hoverNode) then
      begin
        Application.CancelHint;
        if (hitTest <= [htOnItem, htOnIcon, htOnLabel, htOnStateIcon]) then
        begin
          lastHintNode := hoverNode;
          tree.Hint := NodeHint(hoverNode) ;
        end;
      end;
    end;
     
    function TForm.NodeHint(tn: TTreeNode): string;
    begin
      result :=  '';
      if assigned(tn.Data) Then
        result := TObjdata(tn.Data).Comment;
    end;

    @+Phil

  14. #14
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    si tu veux faire simple et vite, met 2 bouton un pour déplacer vers le haut et l'autre en bas,, la ligne sélectionné .

Discussions similaires

  1. Recherche dans une liste ordonnée
    Par greenzephyr dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 29/05/2008, 16h40
  2. Listes ordonnées : problème avec le tréma
    Par miltonis dans le forum Requêtes
    Réponses: 21
    Dernier message: 12/10/2007, 17h16
  3. les listes ordonnées <ol>
    Par Grizzzly dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 05/09/2007, 18h44
  4. [XHTML] Valeur d'un élément d'une liste ordonnée
    Par Yogui dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 16/01/2007, 01h12
  5. Liste ordonnée et transformation en INPUT
    Par pmithrandir dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 08/07/2005, 11h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo