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

AWT/Swing Java Discussion :

[Débutant] Création, appels et dispose() de Frames : conséquences mémoire ?


Sujet :

AWT/Swing Java

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 157
    Points : 69
    Points
    69
    Par défaut [Débutant] Création, appels et dispose() de Frames : conséquences mémoire ?
    Bien le bonjour à tous !

    Je travaille actuellement sur un projet en Java.
    J'ai besoin d'afficher des messages d'erreurs en cas de levée d'exception, et j'ai donc utiliser le Visual Editor d'Eclipse pour me générer une petite classe de fenêtre. La voici :

    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
    import javax.swing.JPanel;
    import javax.swing.JFrame;
    import javax.swing.BoxLayout;
    import javax.swing.JTextPane;
    import javax.swing.JSeparator;
    import java.awt.Color;
    import java.awt.Toolkit;
    import java.awt.Font;
    import javax.swing.WindowConstants;
     
    public class Erreur extends JFrame {
     
    	private static final long serialVersionUID = 1L;
     
    	private JPanel jContentPane = null;
     
    	private JTextPane zone_excuse = null;
     
    	private JTextPane zone_detail = null;
     
    	private JTextPane zone_exception = null;
     
    	private JSeparator jSeparator = null;
     
    	private JSeparator jSeparator1 = null;
     
    	private JTextPane detail = null;
     
    	private JTextPane exception = null;
     
    	/**
             * This is the default constructor
             */
    	public Erreur() {
    		super();
    		initialize();
    	}
     
    	/**
             * This method initializes this
             * 
             * @return void
             */
     
    	private void initialize() {
    		this.setSize(525, 220);
    		this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    		this.setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/Icones/Bayonne.png")));
    		this.setBackground(Color.white);
    		this.setContentPane(getJContentPane());
    		this.setTitle("ERREUR : Veilleur de messagerie");
    	}
     
     
    	/**
             * This method initializes jContentPane
             * 
             * @return javax.swing.JPanel
             */
    	private JPanel getJContentPane() {
    		if (jContentPane == null) {
    			jContentPane = new JPanel();
    			jContentPane.setLayout(new BoxLayout(getJContentPane(), BoxLayout.Y_AXIS));
    			jContentPane.add(getZone_excuse(), null);
    			jContentPane.add(getJSeparator(), null);
    			jContentPane.add(getDetail(), null);
    			jContentPane.add(getZone_detail(), null);
    			jContentPane.add(getJSeparator1(), null);
    			jContentPane.add(getException(), null);
    			jContentPane.add(getZone_exception(), null);
    		}
    		return jContentPane;
    	}
     
    	/**
             * This method initializes zone_excuse  
             *      
             * @return javax.swing.JTextPane        
             */
    	private JTextPane getZone_excuse() {
    		if (zone_excuse == null) {
    			zone_excuse = new JTextPane();
    			zone_excuse.setEditable(false);
    			zone_excuse.setText("Le veilleur de messagerie a rencontré une erreur critique. Veuillez nous excuser pour le dérangement occasionné par cette erreur.");
    			zone_excuse.setFont(new Font("Dialog", Font.BOLD, 12));
    			zone_excuse.setBackground(new Color(255, 255, 204));
    		}
    		return zone_excuse;
    	}
     
    	public void set_Zone_excuse_text(String new_value) {
    		zone_excuse.setText(new_value);
    	}
     
    	/**
             * This method initializes zone_detail  
             *      
             * @return javax.swing.JTextPane        
             */
    	private JTextPane getZone_detail() {
    		if (zone_detail == null) {
    			zone_detail = new JTextPane();
    			zone_detail.setEditable(false);
    			zone_detail.setFont(new Font("Dialog", Font.PLAIN, 10));
    		}
    		return zone_detail;
    	}
     
    	public void set_Zone_detail_text(String new_value) {
    		zone_detail.setText(new_value);
    	}
     
    	/**
             * This method initializes zone_exception       
             *      
             * @return javax.swing.JTextPane        
             */
    	private JTextPane getZone_exception() {
    		if (zone_exception == null) {
    			zone_exception = new JTextPane();
    			zone_exception.setEditable(false);
    			zone_exception.setFont(new Font("Dialog", Font.PLAIN, 10));
    		}
    		return zone_exception;
    	}
     
    	public void set_Zone_exception_text(String new_value) {
    		zone_exception.setText(new_value);
    	}
     
    	/**
             * This method initializes jSeparator   
             *      
             * @return javax.swing.JSeparator       
             */
    	private JSeparator getJSeparator() {
    		if (jSeparator == null) {
    			jSeparator = new JSeparator();
    		}
    		return jSeparator;
    	}
     
    	/**
             * This method initializes jSeparator1  
             *      
             * @return javax.swing.JSeparator       
             */
    	private JSeparator getJSeparator1() {
    		if (jSeparator1 == null) {
    			jSeparator1 = new JSeparator();
    		}
    		return jSeparator1;
    	}
     
    	/**
             * This method initializes detail       
             *      
             * @return javax.swing.JTextPane        
             */
    	private JTextPane getDetail() {
    		if (detail == null) {
    			detail = new JTextPane();
    			detail.setEditable(false);
    			detail.setFont(new Font("Dialog", Font.BOLD, 12));
    			detail.setText("Détails et solutions :");
    		}
    		return detail;
    	}
     
    	/**
             * This method initializes exception    
             *      
             * @return javax.swing.JTextPane        
             */
    	private JTextPane getException() {
    		if (exception == null) {
    			exception = new JTextPane();
    			exception.setEditable(false);
    			exception.setFont(new Font("Dialog", Font.BOLD, 12));
    			exception.setText("Message système à communiquer au service informatique :");
    		}
    		return exception;
    	}
     
    }  //  @jve:decl-index=0:visual-constraint="10,10"
    Dans mon main(), je crée donc la fenêtre et je la masque via un dispose() pour libérer les ressources associées :

    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
    public class Main
    {
    	/*
    	 * Lancement de l'application.
    	 */
    	public static void main(String[] args) 
    	{	
    		Erreur fenetre_erreur = new Erreur();
    		fenetre_erreur.setVisible(true);
    		//fenetre_erreur.dispose();
     
    		// Lancement de l'applicatif par la mise en place :
    		// - de l'icone en barre des tâches
    		// - de son menu, qui permet d'effectuer des tâches utilisateur
    		new Icone_et_Menu();	
    	}
    }
    Jusque là tout donctionne. C'est via mon "Icone_et_Menu()" que je ferai appel à des fonctions, grâce à des écouteurs sur mon menu. Pour ne pas embrouiller mon code, j'ai mes foncions dans un autre fichier.

    Dans ces fonctions là, et plus précisément dans des "catch", je dois faire appel à ma fenetre d'erreur pour l'afficher et changer le texte des champs.
    Mon soucis, evidemment, c'est que ma "fenetre_erreur" n'y est pas visible...

    Comment faire ?

    Dois-je forcément la passer en paramètre à mon applicatif, puis à mes fonctions ? Bien que le passage de paramètre se fasse par référence, ca me parait un peu lourd.

    Une autre possibilité semblerait être de créer/disposer d'une nouvelle fenêtre à chaque fois qu'une exception est levée... Mais puisque cette application va rester en barre des tâches très longtemps (plusieurs jours eventuellement), est-ce que cette solution est viable sans alourdir la mémoire ? Est-ce que le dispose() est l'équivalant de la destruction de l'objet sur ce plan là ?

    Merci pour vos conseils et vos remarques :-).

  2. #2
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par Nyphel
    Bien le bonjour à tous !

    Je travaille actuellement sur un projet en Java.
    J'ai besoin d'afficher des messages d'erreurs en cas de levée d'exception, et j'ai donc utiliser le Visual Editor d'Eclipse pour me générer une petite classe de fenêtre. La voici :

    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
    import javax.swing.JPanel;
    import javax.swing.JFrame;
    import javax.swing.BoxLayout;
    import javax.swing.JTextPane;
    import javax.swing.JSeparator;
    import java.awt.Color;
    import java.awt.Toolkit;
    import java.awt.Font;
    import javax.swing.WindowConstants;
     
    public class Erreur extends JFrame {
     
    	private static final long serialVersionUID = 1L;
     
    	private JPanel jContentPane = null;
     
    	private JTextPane zone_excuse = null;
     
    	private JTextPane zone_detail = null;
     
    	private JTextPane zone_exception = null;
     
    	private JSeparator jSeparator = null;
     
    	private JSeparator jSeparator1 = null;
     
    	private JTextPane detail = null;
     
    	private JTextPane exception = null;
     
    	/**
             * This is the default constructor
             */
    	public Erreur() {
    		super();
    		initialize();
    	}
     
    	/**
             * This method initializes this
             * 
             * @return void
             */
     
    	private void initialize() {
    		this.setSize(525, 220);
    		this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    		this.setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/Icones/Bayonne.png")));
    		this.setBackground(Color.white);
    		this.setContentPane(getJContentPane());
    		this.setTitle("ERREUR : Veilleur de messagerie");
    	}
     
     
    	/**
             * This method initializes jContentPane
             * 
             * @return javax.swing.JPanel
             */
    	private JPanel getJContentPane() {
    		if (jContentPane == null) {
    			jContentPane = new JPanel();
    			jContentPane.setLayout(new BoxLayout(getJContentPane(), BoxLayout.Y_AXIS));
    			jContentPane.add(getZone_excuse(), null);
    			jContentPane.add(getJSeparator(), null);
    			jContentPane.add(getDetail(), null);
    			jContentPane.add(getZone_detail(), null);
    			jContentPane.add(getJSeparator1(), null);
    			jContentPane.add(getException(), null);
    			jContentPane.add(getZone_exception(), null);
    		}
    		return jContentPane;
    	}
     
    	/**
             * This method initializes zone_excuse  
             *      
             * @return javax.swing.JTextPane        
             */
    	private JTextPane getZone_excuse() {
    		if (zone_excuse == null) {
    			zone_excuse = new JTextPane();
    			zone_excuse.setEditable(false);
    			zone_excuse.setText("Le veilleur de messagerie a rencontré une erreur critique. Veuillez nous excuser pour le dérangement occasionné par cette erreur.");
    			zone_excuse.setFont(new Font("Dialog", Font.BOLD, 12));
    			zone_excuse.setBackground(new Color(255, 255, 204));
    		}
    		return zone_excuse;
    	}
     
    	public void set_Zone_excuse_text(String new_value) {
    		zone_excuse.setText(new_value);
    	}
     
    	/**
             * This method initializes zone_detail  
             *      
             * @return javax.swing.JTextPane        
             */
    	private JTextPane getZone_detail() {
    		if (zone_detail == null) {
    			zone_detail = new JTextPane();
    			zone_detail.setEditable(false);
    			zone_detail.setFont(new Font("Dialog", Font.PLAIN, 10));
    		}
    		return zone_detail;
    	}
     
    	public void set_Zone_detail_text(String new_value) {
    		zone_detail.setText(new_value);
    	}
     
    	/**
             * This method initializes zone_exception       
             *      
             * @return javax.swing.JTextPane        
             */
    	private JTextPane getZone_exception() {
    		if (zone_exception == null) {
    			zone_exception = new JTextPane();
    			zone_exception.setEditable(false);
    			zone_exception.setFont(new Font("Dialog", Font.PLAIN, 10));
    		}
    		return zone_exception;
    	}
     
    	public void set_Zone_exception_text(String new_value) {
    		zone_exception.setText(new_value);
    	}
     
    	/**
             * This method initializes jSeparator   
             *      
             * @return javax.swing.JSeparator       
             */
    	private JSeparator getJSeparator() {
    		if (jSeparator == null) {
    			jSeparator = new JSeparator();
    		}
    		return jSeparator;
    	}
     
    	/**
             * This method initializes jSeparator1  
             *      
             * @return javax.swing.JSeparator       
             */
    	private JSeparator getJSeparator1() {
    		if (jSeparator1 == null) {
    			jSeparator1 = new JSeparator();
    		}
    		return jSeparator1;
    	}
     
    	/**
             * This method initializes detail       
             *      
             * @return javax.swing.JTextPane        
             */
    	private JTextPane getDetail() {
    		if (detail == null) {
    			detail = new JTextPane();
    			detail.setEditable(false);
    			detail.setFont(new Font("Dialog", Font.BOLD, 12));
    			detail.setText("Détails et solutions :");
    		}
    		return detail;
    	}
     
    	/**
             * This method initializes exception    
             *      
             * @return javax.swing.JTextPane        
             */
    	private JTextPane getException() {
    		if (exception == null) {
    			exception = new JTextPane();
    			exception.setEditable(false);
    			exception.setFont(new Font("Dialog", Font.BOLD, 12));
    			exception.setText("Message système à communiquer au service informatique :");
    		}
    		return exception;
    	}
     
    }  //  @jve:decl-index=0:visual-constraint="10,10"
    Dans mon main(), je crée donc la fenêtre et je la masque via un dispose() pour libérer les ressources associées :

    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
    public class Main
    {
    	/*
    	 * Lancement de l'application.
    	 */
    	public static void main(String[] args) 
    	{	
    		Erreur fenetre_erreur = new Erreur();
    		fenetre_erreur.setVisible(true);
    		//fenetre_erreur.dispose();
     
    		// Lancement de l'applicatif par la mise en place :
    		// - de l'icone en barre des tâches
    		// - de son menu, qui permet d'effectuer des tâches utilisateur
    		new Icone_et_Menu();	
    	}
    }
    Jusque là tout donctionne. C'est via mon "Icone_et_Menu()" que je ferai appel à des fonctions, grâce à des écouteurs sur mon menu. Pour ne pas embrouiller mon code, j'ai mes foncions dans un autre fichier.

    Dans ces fonctions là, et plus précisément dans des "catch", je dois faire appel à ma fenetre d'erreur pour l'afficher et changer le texte des champs.
    Mon soucis, evidemment, c'est que ma "fenetre_erreur" n'y est pas visible...

    Comment faire ?

    Dois-je forcément la passer en paramètre à mon applicatif, puis à mes fonctions ? Bien que le passage de paramètre se fasse par référence, ca me parait un peu lourd.

    Une autre possibilité semblerait être de créer/disposer d'une nouvelle fenêtre à chaque fois qu'une exception est levée... Mais puisque cette application va rester en barre des tâches très longtemps (plusieurs jours eventuellement), est-ce que cette solution est viable sans alourdir la mémoire ? Est-ce que le dispose() est l'équivalant de la destruction de l'objet sur ce plan là ?

    Merci pour vos conseils et vos remarques :-).
    En ouvrir une nouvelle à chaque fois ce serait un peu bête, et devoir à chaque fois passer la référence de la première, c'est pas extra non plus.

    Ce que tu peux faire, c'est faire une méthode statique dans Erreur qui permet d'afficher une erreur. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class Erreur extends JFrame{
       private static Erreur fenetre = null;
     
       public static void afficheErreur(String message){
          if(fenetre == null){
             fenetre = new Erreur();
          }
     
          //Modification de l'erreur pour afficher le nouveau texte
          fenetre.setVisible(true);
       }
    }
    Ainsi, tu n'auras qu'une seule instance de ta fenêtre en même temps.

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 157
    Points : 69
    Points
    69
    Par défaut
    Merci pour ton attention wichtounet, mais cela revient au même que d'utiliser mes métthodes set_Zone_excuse_text, set_Zone_detail_text et set_Zone_exception_text .

    Mon problème c'est que :
    - Dans mon main je crée une fenêtre : Erreur fenetre_erreur = new Erreur();
    - Dans le reste de l'application je n'arrive pas à y accéder

    Mon application se compose :
    - De ma classe de fenêtres d'erreurs
    - D'une classe main qui lance juste le main()
    - D'une classe qui gère une icone en barredes tâches et son menu
    - D'un fichier (classe ) de fonctions appelées sur les clics de menu

    C'est dans le fichier de fonctions que j'aimerais pouvoir appeler mes fonctions set_Zone_excuse_text, set_Zone_detail_text et set_Zone_exception_text qui appartiennent à la fenêtre d'erreur créée dans le main().

    N'y parvenant pas, je me demandais s'il valait mieux recréer une fenêtre à chaque fois que je veuxafficher un message d'erreur, ou bien s'il fallait que je passe ma fenetre d'erreur en paramètre de toutes mes fonctions .

    Merci encore

  4. #4
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Mon impression générale est que c'est du code qui devrait marcher sans consommer beaucoup de mémoire, et que si tu le fais bien, tu peux faire n'importe quoi

    Si tu décides la combine avec une seule fenêtre re-créée à chaque fois, il faut penser au dispose et à ne pas conserver de référence, si tu décides d'utiliser la même pour tout le temps c'est pas ça qui va te bouffer beaucoup de mémoire, etc.

    La seule réserve, hors sujet, est que la forme générale du main ne correspond pas à celle conseillée pour swing ; vois à ce sujet le main de Your First Swing Program, et les explications associées. Mais enfin peut être le sais-tu déjà.

  5. #5
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 157
    Points : 69
    Points
    69
    Par défaut
    D'accord !

    Ca y'est j'ai compris, merci beaucoup pour la solution

  6. #6
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par Nyphel
    Mon problème c'est que :
    - Dans mon main je crée une fenêtre : Erreur fenetre_erreur = new Erreur();
    - Dans le reste de l'application je n'arrive pas à y accéder
    Ben justement, avec mon code, tu n'as plus ce problème, vu que la méthode est statique...

    Il ne faut plus l'instancier dans le main. Il suffit de l'appeller à chaque fois que tu veux l'afficher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur.afficheErreur("Merde, ca plante !");
    Et ca va afficher la fenêtre.

  7. #7
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 157
    Points : 69
    Points
    69
    Par défaut
    Oui, c'est ce que j'ai finit par réaliser, mais suite à des NullPointerException j'ai préférer me contenter de recréer une nouvelle fenêtre d'erreur à chaque fois (en définissant le defaultCloseOperation à dispose()).

    Merci tout de même .

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

Discussions similaires

  1. [Débutant] Création d'une application Java qui appelle des scripts Perl
    Par dark_angel91 dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 31/05/2011, 19h31
  2. [Débutante] Création d'une image avec un composant
    Par gwendo dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 09/07/2004, 09h58
  3. [Débutant] Création de procédure stockée
    Par david71 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/06/2004, 18h19
  4. [Débutant] Héritage & appel de méthodes
    Par KooX dans le forum Langage
    Réponses: 4
    Dernier message: 11/05/2004, 23h37
  5. [débutant]Faire appel à une action d'une ActionList
    Par petitours dans le forum C++Builder
    Réponses: 6
    Dernier message: 12/03/2004, 22h53

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