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

Web Perl Discussion :

affichage type shell avec un CGI


Sujet :

Web Perl

  1. #1
    Membre actif Avatar de CKLN00
    Homme Profil pro
    Bioinformaticien Java/Perl
    Inscrit en
    Avril 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bioinformaticien Java/Perl
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 210
    Points : 263
    Points
    263
    Par défaut affichage type shell avec un CGI
    Salut ,
    ma question du jour est la suivante : est-il possible de faire en sorte qu'une page générer par un script CGI soit capable d'afficher un flux de sortie, ou plus simplement d'afficher dans une partie de la page un fichier cibler et de forcer le rafraichissement ?
    Edit :
    Je pense que je ne suis pas assez clair, alors voila mon probleme :
    j'ai un petit CGI qu'on appeleras 'pere' qui pour l'instant ne fait que lancer (par la commande system() car je ne me suis pas pencher sur la question de comment fair autrement) un autre script Perl appelons le 'fils', qui est assez long.
    Je voudrais que pendant que le fils tourne le pere affiche sur la page HTML ce que le fils, émet sur STDOUT.
    Si c'est du domaine du trop compliquer je pensait faire une page pour faire patentiez puis dés que le fils as finit le boulot afficher une page de résultat.

    Mais la interviens un second problème : le fils possède des variables qui sont à intégrer dans la page de résultat. que me conseillez vous de faire ?

    j'avais penser à un truc un peu bancale : le pere appelle le fils, le fils avant de mourir génere un fichier HTML que le pere affiche à la mort du fils.

    mais bon c'est un peu bancale donc si vous avez de meilleurs idée je suis preneur :s !
    CKL
    N°°b forever
    --
    may the be with you

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Fait recharger la page périodiquement. C'est à toi de t'assurer que chaque tentative aura sa propre id afin que ton script CGI "père" (dont le fils doit se détacher pour travailler indépendamment) sache ce qu'il doit faire à chaque rappel, sans se mélanger les pinceaux avec d'éventuels autres requête sur cette page.

    --
    Jedaï

  3. #3
    Membre actif Avatar de CKLN00
    Homme Profil pro
    Bioinformaticien Java/Perl
    Inscrit en
    Avril 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bioinformaticien Java/Perl
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 210
    Points : 263
    Points
    263
    Par défaut
    ok, merci pour cette réponse je vais creuser dans ce sens la ^_^

    mais comment faire pour qu'au rafraichissement je récupère l'ID (en fait un simple système de localtime) de la page qui vien de se rafraichir ? je ne vois pas comment faire , pour le rafraichissement j'avais déjà penser à utiliser la meta-balise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="Refresh" content="10" />
    CKL
    N°°b forever
    --
    may the be with you

  4. #4
    Membre actif Avatar de CKLN00
    Homme Profil pro
    Bioinformaticien Java/Perl
    Inscrit en
    Avril 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bioinformaticien Java/Perl
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 210
    Points : 263
    Points
    263
    Par défaut
    quand tu parle de détacher le fils tu veut dire utiliser un fork ?
    enfin je ne suis pas sur car il me semble que avec un fork le fils et bin ... reste fils ... et je sais pas trop comment en perl faire pour détacher un fils de son père , mais je ne pense pas que ça sois nécessaire ici je pense que si je fait afficher un page d'attente en parallèle de l'execution du fils
    comma ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    defined(my $pid = fork) or die 'perdu !';
    unless($pid)
    {
      exec($ma_Commande_qui_lance_le_fils);
    }
    #ici instruction pour afficher une page d'attente
    waitpid($pid, 0);
    #ici instruction pour afficher une page de résultats
    et donc après la mort du fils j'afficherais une page de résultat
    CKL
    N°°b forever
    --
    may the be with you

  5. #5
    Membre actif Avatar de CKLN00
    Homme Profil pro
    Bioinformaticien Java/Perl
    Inscrit en
    Avril 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bioinformaticien Java/Perl
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 210
    Points : 263
    Points
    263
    Par défaut
    Tien ! je pense avoir donner moi même la solution à mon problème !
    avec la balise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="Refresh" content="0;URL=nouvellePage.html" />
    il me suffirait de mettre en URL le script avec un paramètre de type GET l'Id que j'utilise !

    Je suis en train d'essayer de mettre tout ça en place mais je ne suis pas bien sur que ça marche ^_^ si vous avez des sugggestion je suis tout à fait preneur !
    CKL
    N°°b forever
    --
    may the be with you

  6. #6
    Membre actif Avatar de CKLN00
    Homme Profil pro
    Bioinformaticien Java/Perl
    Inscrit en
    Avril 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bioinformaticien Java/Perl
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 210
    Points : 263
    Points
    263
    Par défaut
    bon après réflexion mon cerveau commence à comprendre ce que Jedai voulais dire par
    dont le fils doit se détacher pour travailler indépendamment
    je ne doit pas faire comme je l'ai suggérer plus haut, mais je doit bien comme le dit Jedai détacher mon fils
    une fois ceci effectuer je serais en mesure de faire ce qui m'intéresse (et essayerais de l'expliquer clairement en dans un dernier post xD !)
    CKL
    N°°b forever
    --
    may the be with you

  7. #7
    Membre actif Avatar de CKLN00
    Homme Profil pro
    Bioinformaticien Java/Perl
    Inscrit en
    Avril 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bioinformaticien Java/Perl
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 210
    Points : 263
    Points
    263
    Par défaut
    bon comme je n'ai pas trouver de solution en perl je vais utiliser la solution Unix
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    defined(my $pid = fork) or die 'perdu !';
    unless($pid)
    {
      exec('nohup '.$ma_Commande_qui_lance_le_fils);
    }
    CKL
    N°°b forever
    --
    may the be with you

  8. #8
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Pour faire ça en Perl, regarde le module Posix et plus particulièrement la fonction setsid().

    --
    Jedaï

  9. #9
    Membre actif Avatar de CKLN00
    Homme Profil pro
    Bioinformaticien Java/Perl
    Inscrit en
    Avril 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bioinformaticien Java/Perl
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 210
    Points : 263
    Points
    263
    Par défaut
    d'accord donc d'après tout ce que j'ai appris pour que mon CGI lance un processus indépendant il faut que je fasse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if (defined(my $pid = fork)) ;
      {
        if(!$pid)
          {
            POSIX::setsid() ;
            exec($ma_Commande);
          }
      }
      else
      {
        print('<b>impossible de crée lancer le programme',
              '</b><br />Fin du programme</body></html>');
        exit 0;
      }
    haha la tion de mon problème s'approche
    CKL
    N°°b forever
    --
    may the be with you

  10. #10
    Membre actif Avatar de CKLN00
    Homme Profil pro
    Bioinformaticien Java/Perl
    Inscrit en
    Avril 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bioinformaticien Java/Perl
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 210
    Points : 263
    Points
    263
    Par défaut
    bon alors je ne comprend pas :
    ma commande ne se lance pas ni avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      if ( defined(my $pid = fork ) )
      {
        if(!$pid)
          {
            exec('nohup '.$ma_Commande) ;
          }
      }
      else
      {
        print('<b>impossible de crée lancer le programme',
              '</b><br />Fin du programme</body></html>');
        exit 0;
      }
    ni avec celui de mon précédent méssage et je suis incapable de comprendre pourquoi
    pourtant j'ai vérifier avec des print et je vais au moins jusqu'à l'exec

    donc j'implore votre aide !
    CKL
    N°°b forever
    --
    may the be with you

  11. #11
    Membre actif Avatar de CKLN00
    Homme Profil pro
    Bioinformaticien Java/Perl
    Inscrit en
    Avril 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bioinformaticien Java/Perl
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 210
    Points : 263
    Points
    263
    Par défaut Resumer
    bon alors finalement le probleme ne venais pas de mon code mais d'une histoire (toujours pas résolue) de droit, de path etc sur le serveur.

    Donc je ré-explique mon probleme clairement et donne la solution que j'ai trouver ^_^ :

    j'ai deux scripts, un cgi qui sert à interfacer, on le nommeras scrpit interface, et un script perl, on le nommera script travailleur, qui effectues différentes taches, affiches l'état d'avancement sur sa sortie standard et à la fin de son exécution crée un fichier qui contiens quelques résultats.
    Mon cgi avais plusieurs rôles à remplir :
    tout d'abord il récupérais des information d'un formulaire et crée des fichiers nécessaire au fonctionnement du script travailleur,
    puis il devait afficher à l'utilisateur l'état d'avancement du script travailleur pour le faire patienter, et finalement afficher une page de résultat construite avec les données récupérées dans le dernier fichier générer par le script travailleur

    (heu j'espère avoir été clair, si vous avez des question n'hésitez pas :p)

    voila donc quel était mon problème

    voyons maintenant la solution que j'ai utiliser pour le résoudre :

    tout d'abord j'ai scinder mon Cgi en 3 partie :
    1) pour la création de fichier lorsque l'utilisateur vien du formulaire
    2) pour l'affichage de la page d'attente
    3) pour les résultats

    pour vérifier si l'utilisateur venais bien du formulaire (qui est en methode POST) j'ai rajouter dans le action le paramètre FromForm et mis = à 1, soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form action="path/de/interface.cgi?FromForm=1" method="post" enctype="multipart/form-data">


    1)
    dans mon script CGI pour savoir si l'appel venait du formulaire il me suffisait de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my @url_para = $cgi->url_param();
    if ($url_para[0] eq 'FromForm')
    si c'était effectivement le cas je générais alors les fichier et une page de transition qui contenait principalement un balise de redirection automatique de page (au bout de 1seconde)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="Refresh" content="1;interface.cgi?date=$date" />
    pour générer cette balise avec les méthode cgi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      print($cgi->start_html(-head=>meta({-http_equiv => 'Refresh',
                                          -content    => "1;interface.cgi?date=$date"
                                        }),
                             -lang=>'fr-Fr',
                             -title=>'Page transitoire',
                             -style=>{'src'=>'../html/fds.css'},
                             -author=>'xxxx'
                             )  ) ;
    comme on peut le remarquer dans mon code je ne faisait en fait que recharger le cgi en y ajoutant un paramètre : une date générer avec la fonction localtime et qui donc est un identifiant unique pour chaque appelle au CGI.

    ensuite le cgi lance le script travailleur en redirigeant sa sortie standard et ses erreurs dans un fichier nommer $date.log, je crée donc un fichier qui à dans son nom l'identifiant unique qui as été crée lors de cette appel du cgi via le formulaire, il faut savoir que le script travailleur demande en entrée le nom du dernier fichier (avec les résultat donc) qu'il créera. Et donc logiquement je fait comme avec le fichier .log je crée un fichier $date.resultats.
    Dans tout les cas pour lancer mon script travailleur je doit le lancer et le rendre complètement indépendant du cgi qui l'as lancer
    donc ma commande ressemble et le code pour la lancer sont :
    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
      my ($ma_Commande) = 'perl /path/de/script/travailleur.pl '.
                          " $date.resultats 1>>$date.log 2>&1" ;
      if ( defined(my $pid = fork ) )
      {
        if(!$pid)
          {
            POSIX::setsid() ;
            exec($ma_Commande) ;
          }
      }
      else
      {
        print('<b>Impossible de crée lancer le programme',
              '</b><br />Fin du programme</body></html>') ;
        exit 0;
      }
    la structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      if ( defined(my $pid = fork ) )
      {
        if(!$pid)
          {
            exec($ma_Commande) ;
          }
      }
    me sert à lancer le script travailleur.
    la ligne POSIX::setsid() ; sert quand à elle à rendre le script travailleur completement indépendant de son pére c'est à dire le script interface
    la partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    " $date.resultats 1>>$date.log 2>&1"
    de ma ligne de commande me sert tout d'abord à donner le nom du fichier résultat et aussi à rediriger les sorties (STDOUT et STDERR) dans le fichier .log

    2&3)
    Si le CGI n'est pas appeler du script je vérifit que le premier paramètre est bien date et je récupéré alors son contenu dans $date_recue

    je teste l'existence du fichier $date_recue.resultats si il existe alors je le lis, récupérè les infos qui me sont nécessaire dedans et génére la page de résulat

    si ce fichier n'existe pas je teste alors l'existence du fichier $date_recue.log si il existe je construit une page d'attente qui contiendras le contenu du fichier et surtout qui contient la balise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="Refresh" content="5;interface.cgi?date=$date_recue" />
    dans tout les autre cas je redirige sur une page d'erreure


    Voila je n'ai pas encore tester ma solution pour différents probleme mais je pense que ça peut marcher (corrigez moi si je me trompe ^_^)
    CKL
    N°°b forever
    --
    may the be with you

  12. #12
    Membre actif Avatar de CKLN00
    Homme Profil pro
    Bioinformaticien Java/Perl
    Inscrit en
    Avril 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bioinformaticien Java/Perl
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 210
    Points : 263
    Points
    263
    Par défaut Echec
    bon bha ...
    c'est un Echec : tout fonctionne presque comme je l'ai décrit mais il reste un problème : lors de l'arrivé sur le CGI par l'intermédiaire du formulaire au lieu de voir ma page se recharger au bout de 2 secondes, la page reste jusqu'à la fin de l'exécution du script travailleur plus 2 secondes.

    Je pense que c'est dû au fait que le fils (script travailleur) ne deviens pas indépendant du script CGI, donc une mauvais utilisisation de ma part de POSIX::setsid() ;
    or je ne sais pas comment l'utiliser a part en l'appelant sans paramètre juste après le fork.
    donc si quelqu'un peu m'aider je suis preneur
    CKL
    N°°b forever
    --
    may the be with you

  13. #13
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Tu es sous quel OS ?

    Une solution alternative pourrait être d'utiliser un daemon pour effectuer le travail du fils.

    --
    Jedaï

  14. #14
    Membre actif Avatar de CKLN00
    Homme Profil pro
    Bioinformaticien Java/Perl
    Inscrit en
    Avril 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bioinformaticien Java/Perl
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 210
    Points : 263
    Points
    263
    Par défaut
    tout ceci se trouve sur un serveur Unix

    mais je doit avouer mon ignorance sur le fonctionnement des deamons tout OS confondus !

    Merci de ta réponse
    CKL
    N°°b forever
    --
    may the be with you

  15. #15
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Un daemon (appelé plutôt "service" dans le monde windows) est un processus qui tourne en permanence en tâche de fond et par exemple écoute sur un socket pour répondre à des ordres envoyé par des clients (par exemple un serveur internet comme Apache est un daemon). Tu peux faire un truc comme ça.

    Par ailleurs setsid devrait marcher sous Unix, tu fais bien un double fork en tuant le premier fils ?

    --
    Jedaï

  16. #16
    Membre actif Avatar de CKLN00
    Homme Profil pro
    Bioinformaticien Java/Perl
    Inscrit en
    Avril 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bioinformaticien Java/Perl
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 210
    Points : 263
    Points
    263
    Par défaut
    Citation Envoyé par Jedai Voir le message
    Par ailleurs setsid devrait marcher sous Unix, tu fais bien un double fork en tuant le premier fils ?
    ha bha non ...
    effectivement mon problème doit venir d'ici : je ne fait qu'un seul fork suivit du setsid et puis un exec.
    enfait je ne fait que ce que j'ai écrit dans le message plus haut à savoir :
    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
     
    #ici le papa CGI
      my ($ma_Commande) = 'perl /path/de/script/travailleur.pl '.
                          " $date.resultats 1>>$date.log 2>&1" ;
      if ( defined(my $pid = fork ) )
      {
        if(!$pid)
          {
            # ici le fistion (clone du père donc)
            POSIX::setsid() ;
            exec($ma_Commande) ; # ici transformation du clone du père en fiston travailleur
          }
      }
      else
      {
        # ici retour au papa CGI qui affiche une erreur en cas de problème de fork
        print('<b>Impossible de crée lancer le programme',
              '</b><br />Fin du programme</body></html>') ;
        exit 0;
      }
    CKL
    N°°b forever
    --
    may the be with you

  17. #17
    Membre actif Avatar de CKLN00
    Homme Profil pro
    Bioinformaticien Java/Perl
    Inscrit en
    Avril 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bioinformaticien Java/Perl
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 210
    Points : 263
    Points
    263
    Par défaut
    YEAH !

    j'ai enfin trouver la solution :
    j'avais quasiment tout bon il fallait juste rajouter un petiot .' &'
    à la commande soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec($ma_Commande.' &') ;
    ce qui fait passer la commande en arrière plan et libère la page web, d'attendre que la commande soit finit pour être complètement charger
    problème
    CKL
    N°°b forever
    --
    may the be with you

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Affichage de type table avec des listes
    Par Loceka dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 05/08/2014, 15h05
  2. PB affichage d'image avec IE
    Par arturo dans le forum Modules
    Réponses: 6
    Dernier message: 25/09/2003, 17h28
  3. PB : affichage de données avec accent sous delphi 6
    Par kinda dans le forum Débuter
    Réponses: 3
    Dernier message: 03/07/2003, 13h19
  4. [VB6] Affichage d'image avec qlq contraintes
    Par youri dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 21/11/2002, 14h44

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