Transformer une appli console en appli graphique.

madshell Messages postés 59 Date d'inscription dimanche 29 avril 2007 Statut Membre Dernière intervention 21 août 2007 - 14 juin 2007 à 17:03
madshell Messages postés 59 Date d'inscription dimanche 29 avril 2007 Statut Membre Dernière intervention 21 août 2007 - 14 juin 2007 à 23:12
Bonjour à tous,
Pour commencer, je vous préviens que je suis un débutant, un vrai de vrai.
J'ai créer un bot msn sur un modèle qu'un ami avait fait il y a quelques temps.
L'application est rédigé pour qu'en fonction des mots de l'utilisateur, on lui renvoie une réponse.
Tout au long de l'application, on écrit des lignes dans la console avec par exemple :




Console.Out.WriteLine(session.getUser().getID()+" arrive...");
// ou
Console.Out.WriteLine(session.getUser().getID()+" :" + message.getString());
// pour voir dans la console ce qu'il écrit.

J'aimerais maintenant que cette application soit graphique, avec l'affichage de ses messages dans un cadre de texte par exemple avec un bouton pour réduire l'appli dans le system tray. Rassurrez moi, je ne vais pas tout réecrire ?
Comment puis-je procéder ?

2 réponses

cs_niky Messages postés 168 Date d'inscription jeudi 28 juin 2001 Statut Membre Dernière intervention 18 octobre 2008 7
14 juin 2007 à 21:14
Salut,
Il y a un truc super fun (on s'amuse comme on peut) pour faire ça.
1) Tu créés une fenêtre avec une TextBox (commée textBoxConsole pour l'ocassion)
2) Tu créés une classe MonWriter qui hérite de System.IO.TextWriter (en gros, tu n'auras qu'à implémenter Write et WriteLine et laisser le corps des autres méthodes vides)
3) A la construction, MonWriter prend en argument textBoxConsole.
4) Dans la méthode Write, MonWriter va faire un textBoxConsole.AppendText(...)
5) Tu n'as plus qu'à rediriger la sortie standard vers l'objet MonWriter :
Console.SetOut(new MonWriter(textBoxConsole));

Bien sûr, tu peux aussi remplacer tous les Console.Out.WriteLine par des textBoxConsole.AppendText mais c'est nettement moins jolie

Pour mettre une icône dans le systray, il y a plein d'exemples sur csharpfr :
http://www.csharpfr.com/codes/ICONE-DANS-SYSTRAY-INFOBULLE-API_28466.aspx
0
madshell Messages postés 59 Date d'inscription dimanche 29 avril 2007 Statut Membre Dernière intervention 21 août 2007 7
14 juin 2007 à 23:12
Excusez moi mais je débute, alors je ne comprends pas tout bien les histoires d'implentations...
Voici le code de base de la form ainsi que du TextBoxConsole. (Jusqu'a là ça me parle)

-------------------


using System;
using System.Drawing;
using System.Windows.Forms;

using Incesoft.BotPlatform.SDK; // Ca j'en ai besoin dans mon app (DLL)

using Incesoft.BotPlatform.SDK.Interface;
// Ca j'en ai besoin dans mon app (DLL)




namespace TEST
{
    /// <summary>
    /// Description of MainForm.
    /// </summary>
    public class MainForm : System.Windows.Forms.Form
    {
        private System.Windows.Forms.TextBox textBoxConsole;
        public MainForm()
        {
            //
            // The InitializeComponent() call is required for Windows Forms designer support.
            //
            InitializeComponent();
            
            //
            // TODO: Add constructor code after the InitializeComponent() call.
            //
        }
        
        [STAThread]
        public static void Main(string[] args)
        {
            Application.Run(new MainForm());
        }
        
        
        #region Windows Forms Designer generated code
        /// <summary>
        /// This method is required for Windows Forms designer support.
        /// Do not change the method contents inside the source code editor. The Forms designer might
        /// not be able to load this method if it was changed manually.
        /// </summary>
        private void InitializeComponent() {
            this.textBoxConsole = new System.Windows.Forms.TextBox();
            this.SuspendLayout();
            //
            // textBoxConsole
            //
            this.textBoxConsole.Location = new System.Drawing.Point(8, 8);
            this.textBoxConsole.Name = "textBoxConsole";
            this.textBoxConsole.Size = new System.Drawing.Size(272, 20);
            this.textBoxConsole.TabIndex = 0;
            this.textBoxConsole.Text = "";
            //
            // MainForm
            //
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(292, 266);
            this.Controls.Add(this.textBoxConsole);
            this.Name = "MainForm";
            this.Text = "MainForm";
            this.ResumeLayout(false);
        }
        #endregion
    }
}

---------------------------------------------

Et je cherche à y implanter ceci :

public class RobotMSN
{
static void Main(string[] args)
{
IRobotServer server = RobotServerFactory.Instance.createRobotServer("msnbot.incesoft.com", 6602);server.addRobotHandler(new MyHandler());
try
{
server.login("LOGIN", "PASS");
System.Console.WriteLine("Robot connecté avec succès sur MSN");
}
catch (RobotException e)
{
System.Console.Out.WriteLine("Failed to connect :" + e.Message);
}
}
}

Ainsi qu'une class MyHandler : IRobotHandler. Quelqu'un aurait il l'extreme gentillesse de m'aider à glisser ceci dans le premier code ?
0
Rejoignez-nous