PERL Textbox multiligne et Tableau
Résolu/Fermé
charlesbouillault
Messages postés
138
Date d'inscription
mardi 13 décembre 2005
Statut
Membre
Dernière intervention
6 juillet 2009
-
5 févr. 2008 à 19:50
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 6 févr. 2008 à 07:17
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 6 févr. 2008 à 07:17
A voir également:
- PERL Textbox multiligne et Tableau
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Tableau word - Guide
- Trier tableau excel - Guide
- Comment imprimer un tableau excel sur une seule page - Guide
9 réponses
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
5 févr. 2008 à 20:26
5 févr. 2008 à 20:26
Salut,
essaie
essaie
@tab = $txtAffichage->get("1.0",'end');
charlesbouillault
Messages postés
138
Date d'inscription
mardi 13 décembre 2005
Statut
Membre
Dernière intervention
6 juillet 2009
6
5 févr. 2008 à 21:35
5 févr. 2008 à 21:35
Merci pour ton aide, mais me reste un petit souçi, je ne vois pas comment recupérer ce contenu lors de la femeture de la fenetre!!!:
voia le code modifié :
sub AfficherFichier
{
$Bool = 0;
$fenetreAffichage = new MainWindow () ;
$fenetreAffichage -> title ('Affichage Document') ;
$fenetreAffichage ->maxsize (1024, 768) ;
$fenetreAffichage ->minsize (1024, 768) ;
$fenetreAffichage -> bind ( "<Destroy>", \&Enregistrer) ;
$txtAffichage = $fenetreAffichage -> Scrolled ('Text',
-scrollbars => 'se',
-width => 1024,
-height => 768) ;
$txtAffichage -> pack () ;
$fichier = $txtFichier -> get ( ) ;
open (LIRE, $fichier) ;
while (<LIRE>)
{
$txtAffichage -> insert ( 'end', $_ ) ;
}
close (LIRE);
$tabAvant = $txtAffichage->get("1.0",'end');
}
sub Enregistrer
{
if ($Bool==0)
{
$tabApres = $txtAffichage->get("1.0",'end');
$Bool = 1;
$modif = 0;
if ($tabAvant ne $tabApres)
{
$modif = 1;
};
};
}
au niveau de l'evenement Destroy qui utilise la fonction "Enregistrer", il me reste un probléme, étant doné que j'utilise l'événement destroy, lorsque je veus recupérer le contenu de ma $txtAffichage il me dis qu'elle est détruite, je m'en doute, mais je ne vois pas trop comment faire ce control autrement !!!
Y aurait un autre evenement conçernant le fermeture de la fenetre ?
voia le code modifié :
sub AfficherFichier
{
$Bool = 0;
$fenetreAffichage = new MainWindow () ;
$fenetreAffichage -> title ('Affichage Document') ;
$fenetreAffichage ->maxsize (1024, 768) ;
$fenetreAffichage ->minsize (1024, 768) ;
$fenetreAffichage -> bind ( "<Destroy>", \&Enregistrer) ;
$txtAffichage = $fenetreAffichage -> Scrolled ('Text',
-scrollbars => 'se',
-width => 1024,
-height => 768) ;
$txtAffichage -> pack () ;
$fichier = $txtFichier -> get ( ) ;
open (LIRE, $fichier) ;
while (<LIRE>)
{
$txtAffichage -> insert ( 'end', $_ ) ;
}
close (LIRE);
$tabAvant = $txtAffichage->get("1.0",'end');
}
sub Enregistrer
{
if ($Bool==0)
{
$tabApres = $txtAffichage->get("1.0",'end');
$Bool = 1;
$modif = 0;
if ($tabAvant ne $tabApres)
{
$modif = 1;
};
};
}
au niveau de l'evenement Destroy qui utilise la fonction "Enregistrer", il me reste un probléme, étant doné que j'utilise l'événement destroy, lorsque je veus recupérer le contenu de ma $txtAffichage il me dis qu'elle est détruite, je m'en doute, mais je ne vois pas trop comment faire ce control autrement !!!
Y aurait un autre evenement conçernant le fermeture de la fenetre ?
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
5 févr. 2008 à 22:24
5 févr. 2008 à 22:24
essaie
$fenetreAffichage->OnDestroy(\&Enregistrer);
charlesbouillault
Messages postés
138
Date d'inscription
mardi 13 décembre 2005
Statut
Membre
Dernière intervention
6 juillet 2009
6
5 févr. 2008 à 22:37
5 févr. 2008 à 22:37
apperement ça appel la même procédure!!!
Voici le msg d'erreur :
<Destroy>
(command bound to event)
Tk::Error: Failed to AUTOLOAD 'Tk::Widget::get' at C:/Perl/lib/Tk/Derived.pm line 469
l'événement interviens apres le destruction de la feuille $fenetreAffichage ce qui fait que l'objet txtAffichage dessus est detruit aussi, donc je ne peut plus recuperer les données!!!
Je sais que en VB par exemple, il y l'evenement une fois la feuille fermé, mais aussi durant la fermeture "Closed" ou "Closing"
un peu chiant mon truc la, sinon je peus mettre un bouton "Quitter", mais comme surprimmer la croix en haut de la $fenetreAffichage!!!
Voici le msg d'erreur :
<Destroy>
(command bound to event)
Tk::Error: Failed to AUTOLOAD 'Tk::Widget::get' at C:/Perl/lib/Tk/Derived.pm line 469
l'événement interviens apres le destruction de la feuille $fenetreAffichage ce qui fait que l'objet txtAffichage dessus est detruit aussi, donc je ne peut plus recuperer les données!!!
Je sais que en VB par exemple, il y l'evenement une fois la feuille fermé, mais aussi durant la fermeture "Closed" ou "Closing"
un peu chiant mon truc la, sinon je peus mettre un bouton "Quitter", mais comme surprimmer la croix en haut de la $fenetreAffichage!!!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
5 févr. 2008 à 22:49
5 févr. 2008 à 22:49
et si tu fait ça
$fenetreAffichage->destroy() if Tk::Exists($fenetreAffichage); $fenetreAffichage->OnDestroy(\&Enregistrer);
charlesbouillault
Messages postés
138
Date d'inscription
mardi 13 décembre 2005
Statut
Membre
Dernière intervention
6 juillet 2009
6
5 févr. 2008 à 22:53
5 févr. 2008 à 22:53
voial l'erreur qu'il me retourne :
c'est vraiment casse tête j'y suis depuis ce matin 8heure, impossible de trouver !!!
Tk::Error: MainWindow=HASH(0x2ec314c) is not a widget at Client_FTP.pl line 161 Tk callback for .button1 Tk::__ANON__ at C:/Perl/lib/Tk.pm line 252 Tk::Button::butUp at C:/Perl/lib/Tk/Button.pm line 111 <ButtonRelease-1> (command bound to event)
c'est vraiment casse tête j'y suis depuis ce matin 8heure, impossible de trouver !!!
charlesbouillault
Messages postés
138
Date d'inscription
mardi 13 décembre 2005
Statut
Membre
Dernière intervention
6 juillet 2009
6
5 févr. 2008 à 23:13
5 févr. 2008 à 23:13
Tiens, je te poste le script complet pour que tu puisse voire a quoi ça ressemble!!! :
j'ai mis en gras les partie conçernées!!
Merci beaucoups pour ton aide car la je bloque :)
use Net::FTP ; use Tk ; use Tk::Dialog ; use Tk::Event; # Programme principal MiseEnForme () ; MainLoop () ; #Fonction de Mise en Forme sub MiseEnForme { $fenetrePrincipale = new MainWindow () ; $fenetrePrincipale -> title ('Client FTP') ; $fenetrePrincipale ->maxsize ( 390, 215 ) ; $fenetrePrincipale ->minsize ( 390, 215 ) ; $labServeur = $fenetrePrincipale -> Label ( -text =>'Adresse du serveur FTP :', -foreground => 'blue', ); $labServeur ->place ( -x => 10, -y => 30, ) ; $txtServeur = $fenetrePrincipale -> Entry ( -text => 'ftp.cpan.org', -width => 20 ); $txtServeur->place ( -x => 200, -y => 30, ) ; $labLogin = $fenetrePrincipale -> Label ( -text =>'Login :', -foreground => 'blue' ); $labLogin ->place ( -x => 10, -y => 60, ) ; $txtLogin = $fenetrePrincipale -> Entry ( -text => 'anonymous', -width => 20, ) ; $txtLogin ->place ( -x => 200, -y => 60, ) ; $labMDP = $fenetrePrincipale -> Label ( -text =>'Mot de passe :', -foreground => 'blue' ); $labMDP ->place ( -x => 10, -y => 90, ) ; $txtMDP = $fenetrePrincipale -> Entry ( -text => 'anonymous', -width => 20 ) ; $txtMDP -> place ( -x => 200, -y => 90, ) ; $labChemin = $fenetrePrincipale -> Label ( -text =>'Chemin complet du fihchier :', -foreground => 'blue' ); $labChemin ->place ( -x => 10, -y => 120, ) ; $txtChemin = $fenetrePrincipale -> Entry ( -text => '/pub/CPAN', -width => 20 ) ; $txtChemin -> place ( -x => 200, -y => 120, ) ; $labFichier = $fenetrePrincipale -> Label ( -text =>'Nom complet du fichier :', -foreground => 'blue' ); $labFichier ->place ( -x => 10, -y => 150, ) ; $txtFichier = $fenetrePrincipale -> Entry ( -text => 'README', -width => 20 ) ; $txtFichier -> place ( -x => 200, -y => 150, ) ; $cmdDownload = $fenetrePrincipale -> Button ( -text => 'Téléchargement' , -command => \&OuvrireConnection , -width =>20 ) ; $cmdDownload -> place ( -x => 0, -y => 192, ) ; $cmdAfficher = $fenetrePrincipale -> Button ( -text => 'AfficherFichier' , -command => \&AfficherFichier , -width =>20, ) ; $cmdAfficher -> place ( -x => 130, -y => 192, ) ; $cmdQuitter = $fenetrePrincipale -> Button ( -text => 'Quitter' , -command => \&Quitter , -width =>20 ) ; $cmdQuitter -> place ( -x => 260, -y => 192) ; } #Fonction Pour ouvrire la connection sur le serveur FTP sub OuvrireConnection { my $serveur = $txtServeur -> get () ; my $login = $txtLogin -> get () ; my $mdp = $txtMDP -> get () ; my $chemin = $txtChemin -> get () ; my $fichier = $txtFichier -> get () ; my $ftp = Net::FTP ->new ($serveur) ; $ftp->login ($login, $mdp) ; $ftp->cwd ($chemin) ; $ftp->get ($fichier) ; $ftp->quit ; my $boite_dialogue_Download = $fenetrePrincipale-> Dialog ( -title => 'Information' , -text => "Le fichier $fichier est bien telechargé, il se situe dans le repertoire du programme Client FTP !" , -bitmap => 'info' , -default_button => 'OK' , -buttons => [ 'OK' ] ) ; $boite_dialogue_Download -> Show ( ) ; } #Fonction pour Afficher le fichier sub AfficherFichier { $Bool = 0; $fenetreAffichage = new MainWindow () ; $fenetreAffichage -> title ('Affichage Document') ; $fenetreAffichage ->maxsize (1024, 768) ; $fenetreAffichage ->minsize (1024, 768) ; #$fenetreAffichage -> bind ( "<Destroy>", \&Enregistrer) ; #$fenetreAffichage->OnDestroy(\&Enregistrer); #$fenetreAffichage->destroy() if Tk::Exists($fenetreAffichage); #$fenetreAffichage->OnDestroy(\&Enregistrer); $txtAffichage = $fenetreAffichage -> Scrolled ('Text', -scrollbars => 'se', -width => 1024, -height => 768) ; $txtAffichage -> pack () ; $fichier = $txtFichier -> get ( ) ; open (LIRE, $fichier) ; while (<LIRE>) { $txtAffichage -> insert ( 'end', $_ ) ; }; close (LIRE); $tabAvant = $txtAffichage->get("1.0",'end'); } #Fonction Enregister sub Enregistrer { if ($Bool==0) { $Bool = 1; $tabApres = $txtAffichage->get("1.0",'end'); if ($tabAvant ne $tabApres) { my $boite_dialogue_Enregistrer = $fenetrePrincipale -> Dialog ( -title => 'Enregistrer' , -text => 'Voulez vous enregistrer vos modifications ?' , -bitmap => 'question' , -default_button => 'Oui' , -buttons => [ 'Oui' , 'Non' ] ) ; my $reponse = $boite_dialogue_Enregistrer -> Show ( ) ; if ( $reponse eq 'Oui' ) { open (ECRIRE, ">$fichier"); print ECRIRE $tabApres; close (ECRIRE); }; }; }; } #Fonction pour Quitter l'Applixcation sub Quitter { my $boite_dialogue_Quitter = $fenetrePrincipale -> Dialog ( -title => 'Quitter' , -text => 'Etes vous certain de vouloir quitter ?' , -bitmap => 'question' , -default_button => 'Oui' , -buttons => [ 'Oui' , 'Non' ] ) ; my $reponse = $boite_dialogue_Quitter -> Show ( ) ; if ( $reponse eq 'Oui' ) { exit(); }; }
j'ai mis en gras les partie conçernées!!
Merci beaucoups pour ton aide car la je bloque :)
charlesbouillault
Messages postés
138
Date d'inscription
mardi 13 décembre 2005
Statut
Membre
Dernière intervention
6 juillet 2009
6
6 févr. 2008 à 00:10
6 févr. 2008 à 00:10
c'est bon j'ai trouvé :)
Prise de tête mais ça y est !!!! Je te montre le script avec en gras le truc !!!
Prise de tête mais ça y est !!!! Je te montre le script avec en gras le truc !!!
use Net::FTP ; use Tk ; use Tk::Dialog ; use Tk::Event; # Programme principal MiseEnForme () ; MainLoop () ; #Fonction de Mise en Forme sub MiseEnForme { $fenetrePrincipale = new MainWindow () ; $fenetrePrincipale -> title ('Client FTP') ; $fenetrePrincipale ->maxsize ( 390, 215 ) ; $fenetrePrincipale ->minsize ( 390, 215 ) ; $labServeur = $fenetrePrincipale -> Label ( -text =>'Adresse du serveur FTP :', -foreground => 'blue', ); $labServeur ->place ( -x => 10, -y => 30, ) ; $txtServeur = $fenetrePrincipale -> Entry ( -text => 'ftp.cpan.org', -width => 20 ); $txtServeur->place ( -x => 200, -y => 30, ) ; $labLogin = $fenetrePrincipale -> Label ( -text =>'Login :', -foreground => 'blue' ); $labLogin ->place ( -x => 10, -y => 60, ) ; $txtLogin = $fenetrePrincipale -> Entry ( -text => 'anonymous', -width => 20, ) ; $txtLogin ->place ( -x => 200, -y => 60, ) ; $labMDP = $fenetrePrincipale -> Label ( -text =>'Mot de passe :', -foreground => 'blue' ); $labMDP ->place ( -x => 10, -y => 90, ) ; $txtMDP = $fenetrePrincipale -> Entry ( -text => 'anonymous', -width => 20 ) ; $txtMDP -> place ( -x => 200, -y => 90, ) ; $labChemin = $fenetrePrincipale -> Label ( -text =>'Chemin complet du fihchier :', -foreground => 'blue' ); $labChemin ->place ( -x => 10, -y => 120, ) ; $txtChemin = $fenetrePrincipale -> Entry ( -text => '/pub/CPAN', -width => 20 ) ; $txtChemin -> place ( -x => 200, -y => 120, ) ; $labFichier = $fenetrePrincipale -> Label ( -text =>'Nom complet du fichier :', -foreground => 'blue' ); $labFichier ->place ( -x => 10, -y => 150, ) ; $txtFichier = $fenetrePrincipale -> Entry ( -text => 'README', -width => 20 ) ; $txtFichier -> place ( -x => 200, -y => 150, ) ; $cmdDownload = $fenetrePrincipale -> Button ( -text => 'Téléchargement' , -command => \&OuvrireConnection , -width =>20 ) ; $cmdDownload -> place ( -x => 0, -y => 192, ) ; $cmdAfficher = $fenetrePrincipale -> Button ( -text => 'AfficherFichier' , -command => \&AfficherFichier , -width =>20, ) ; $cmdAfficher -> place ( -x => 130, -y => 192, ) ; $cmdQuitter = $fenetrePrincipale -> Button ( -text => 'Quitter' , -command => \&Quitter , -width =>20 ) ; $cmdQuitter -> place ( -x => 260, -y => 192) ; } #Fonction Pour ouvrire la connection sur le serveur FTP sub OuvrireConnection { my $serveur = $txtServeur -> get () ; my $login = $txtLogin -> get () ; my $mdp = $txtMDP -> get () ; my $chemin = $txtChemin -> get () ; my $fichier = $txtFichier -> get () ; my $ftp = Net::FTP ->new ($serveur) ; $ftp->login ($login, $mdp) ; $ftp->cwd ($chemin) ; $ftp->get ($fichier) ; $ftp->quit ; my $boite_dialogue_Download = $fenetrePrincipale-> Dialog ( -title => 'Information' , -text => "Le fichier $fichier est bien telechargé, il se situe dans le repertoire du programme Client FTP !" , -bitmap => 'info' , -default_button => 'OK' , -buttons => [ 'OK' ] ) ; $boite_dialogue_Download -> Show ( ) ; } #Fonction pour Afficher le fichier sub AfficherFichier { $Bool = 0; $fenetreAffichage = new MainWindow () ; $fenetreAffichage -> title ('Affichage Document') ; $fenetreAffichage ->maxsize (1024, 768) ; $fenetreAffichage ->minsize (1024, 768) ; $fenetreAffichage->protocol('WM_DELETE_WINDOW' => \&Enregistrer); $txtAffichage = $fenetreAffichage -> Scrolled ('Text', -scrollbars => 'se', -width => 1024, -height => 768) ; $txtAffichage -> pack () ; $fichier = $txtFichier -> get ( ) ; open (LIRE, $fichier) ; while (<LIRE>) { $txtAffichage -> insert ( 'end', $_ ) ; }; close (LIRE); $tabAvant = $txtAffichage->get("1.0",'end'); } #Fonction Enregister sub Enregistrer { if ($Bool==0) { $Bool = 1; $tabApres = $txtAffichage->get("1.0",'end'); if ($tabAvant ne $tabApres) { my $boite_dialogue_Enregistrer = $fenetrePrincipale -> Dialog ( -title => 'Enregistrer' , -text => 'Voulez vous enregistrer vos modifications ?' , -bitmap => 'question' , -default_button => 'Oui' , -buttons => [ 'Oui' , 'Non' ] ) ; my $reponse = $boite_dialogue_Enregistrer -> Show ( ) ; if ( $reponse eq 'Oui' ) { open (ECRIRE, ">$fichier"); print ECRIRE $tabApres; close (ECRIRE); }; }; $fenetreAffichage->destroy; }; } #Fonction pour Quitter l'Applixcation sub Quitter { my $boite_dialogue_Quitter = $fenetrePrincipale -> Dialog ( -title => 'Quitter' , -text => 'Etes vous certain de vouloir quitter ?' , -bitmap => 'question' , -default_button => 'Oui' , -buttons => [ 'Oui' , 'Non' ] ) ; my $reponse = $boite_dialogue_Quitter -> Show ( ) ; if ( $reponse eq 'Oui' ) { exit(); }; }
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
6 févr. 2008 à 07:17
6 févr. 2008 à 07:17
Salut,
c'est bon j'ai trouvé :)
tant mieux pour toi ;-)
merci d'avoir partager la solution
bonne continuation ;-)
c'est bon j'ai trouvé :)
tant mieux pour toi ;-)
merci d'avoir partager la solution
bonne continuation ;-)