Créer interface graphique pour mon application
overmac
Membre
Bonjour,
J'apprends en ce moment le langage C, je voudrais savoir comment faire pour créer une interface graphique avec Xcode.
Voiçi mon programme :
#include <stdio.h>
#include <math.h>
#define NFOIS 5
int main ()
{ int i;
†float x;
†float racx;
â€
†printf ("Bonjour\n");
†printf("Je vais vous calculer %d racines carrée\n" , NFOIS);
â€
†for (i=0 ; i<NFOIS ; i++)
{††printf ("Donnez un nombre : ");
scanf ("%f", &x);
if (x < 0.0)
printf ("Le nombre %f ne possède pas de racine carrée\n", x);
else
{††racx = sqrt (x);
printf ("Le nombre %f a pour racine carrée : %f\n" , x, racx);
}
}
††printf ("Travail terminée - Au revoir");
}
J'aimerais une simple fenêtre qui me permet de mettre le chiffre voulu est une autre pour le résultat.
Pourriez-vous m'aider ?
D'avance†merci?
J'apprends en ce moment le langage C, je voudrais savoir comment faire pour créer une interface graphique avec Xcode.
Voiçi mon programme :
#include <stdio.h>
#include <math.h>
#define NFOIS 5
int main ()
{ int i;
†float x;
†float racx;
â€
†printf ("Bonjour\n");
†printf("Je vais vous calculer %d racines carrée\n" , NFOIS);
â€
†for (i=0 ; i<NFOIS ; i++)
{††printf ("Donnez un nombre : ");
scanf ("%f", &x);
if (x < 0.0)
printf ("Le nombre %f ne possède pas de racine carrée\n", x);
else
{††racx = sqrt (x);
printf ("Le nombre %f a pour racine carrée : %f\n" , x, racx);
}
}
††printf ("Travail terminée - Au revoir");
}
J'aimerais une simple fenêtre qui me permet de mettre le chiffre voulu est une autre pour le résultat.
Pourriez-vous m'aider ?
D'avance†merci?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
As tu Xcode et Interface Builder ?
Maintenant, je te propose de te guider pour faire une interface "cocoa" à ton projet en utilsant XCode, IB et Objective-C.
Par contre il faut savoir que tu ne vas pas ajouter une interface à ton programme existant, mais tu vas ajouter ton programme existant à une interface...
Commençons.
Lance XCode, puis fais File>New Project. Dans la liste, choisis Application:Cocoa Application.
Lorsque le nouveau projet est créé (après avoir saisi son nom), double-clique sur "nom de tonprojet">Resources>MainMenu.nib dans la colonne gauche "Groups and Files". Ceci va lancer IB dans lequel tu vas créer ton interface (par exemple, un champ texte "System Font Text", un champ de saisie, un bouton "Calculer la racine carrée" et un bouton "Quitter").
La suite au prochain épisode.
.
[Fichier joint supprimé par l'administrateur]
Il faut créer une classe "controleur" dans IB. Cette classe va contenir tout le code Objective-C (et C pour ton programme) qui sera activé via l'interface.
Pour créer cette classe : dans IB aller dans la fenêtre MainMenu.nib, onglet Classes. Cliquer sur la ligne NSObject dans la colonne la plus à gauche, et ensuite aller dans le menu Classes>Subclass NSObject. Une nouvelle ligne va s'insérer dans la colonne à droite de NSObject avec comme nom "MyObject". Renomme cette ligne en "controleur".
Maintenant, la nouvelle ligne "controleur" étant toujours sélectionné, retourne dans le menu Classes>Instantiate controleur. La fenêtre MainMenu.nib va retourner sur l'onglet Instances, et un cube nommé controleur doit apparaà“tre.
Voilà pour le moment.
.
[Fichier joint supprimé par l'administrateur]
Maintenant, il faut relier tout ça.
Dans IB, va dans la fenêtre MainMenu.Nib, onglet Classes. Clique sur la ligne "controleur" puis va dans le menu Classes>Add Outlet to controleur. Dans la fenêtre "controleur Class info" une ligne MyOutlet va apparaitre. Renomme cette ligne par "champ_texte".
Retourne dans le menu Classes>Add Action to controleur. Une ligne "MyAction:" va apparaitre dans la fenêtre "controleur Class info". Renomme cette ligne en "calculer_racine:"
Voilà , il existe un outlet "champ_texte" qui représentera le nombre saisi dans le champ texte dans ton programme. Il existe aussui une action "calculer_racine" qui représente le nom de la méthode qui sera appelée par l'interface pour calculer la racine carrée.
Dernière action dans IB, il faut lier ces outlets et actions aux éléments de l'interface qu'ils représentent. Dispose la fenêtre MainMenu.nib (avec l'onglet Instances ouvert) à côté de ta fenêtre d'interface (celle où tu as déposé les boutons, le champ texte, etc...). Ensuite il faut "tirer" une ligne entre le cube "controleur" de MainMenu.nib et le champ texte : sur le cube, appuie sur la touche CTRL et clique, puis déplace la souris jusqu'au champ texte puis relache le bouton. La fenêtre "controleur (custom) info" va afficher l'outlet "champ_texte" : clique sur le bouton "Connect".
Il faut refaire cette manip en tapant CTRL puis en cliquant sur le bouton "Calculer la racine" et en tirant la ligne jusqu'au cube "controleur" : l'action "calculer_racine:" va apparaitre, alors clique sur le bouton "Connect".
Enfin, CTRL et clic sur le bouton "Quitter", et tirer la ligne jusqu'à l'icône "File's Owner" (à côté du cube), puis choisir "terminate:" dans la fenêtre "NSButton info" (dans l'onglet "Target/Action") et appuyer sur "Connect".
Dernière et ultime étape avant de quitter IB, retourner dans la fenêtre MainMenu.nib, onglet Classes, puis sélectionner la ligne controler. Puis aller dans le menu Classes>Create Files for controleur. Normalement, une fenêtre d'enregistrement de fichier apparait, et affiche le projet créer danx Xcode. Alors il faut taper le bouton "Choose".
La prochaine et dernière fois sera dans Xcode...
.
La dernière fois, avant de quitter IB, les fichiers d'implémentation de la classe "controleur" ont été créés et intégrés dans le projet de XCode. Il s'agit des 2 fichiers : controleur.h et controleur.m.
Le premier fichier, le .h, est le fichier header classique qui permet de déclarer les méthodes qu'offre la classe (ici une seule méthode de nom "calculer_action:"). Grâce à la "ligne" qui a été tirée dans IB entre le bouton et cette action, une liaison a été faite : à chaque fois que le bouton sera actionné, la méthode "calculer_action:" sera appelée. C'est dans donc cette méthode qu'il faudra mettre le code de calcul de la racine carrée. C'est aussi dans ce fichier que sont déclarées les variables d'instance que stocke chaque objet du type "controleur" : dans notre cas, une seule variable de nom "champ_texte" de type "id". Cette variable stocke la référence du champ texte dans lequel les valeurs numériques vont être saisies grâce à la ligne qui a été tirée entre le champ texte et la classe "controleur"
Le second fichier, le .m, contient l'implémentation (le code) de notre classe "controleur".
Ces 2 fichiers dans XCode sont localisés dans la partie gauche de la fenêtre du projet, généralement dans le dossier "other sources".
Seul le fichier .m est à compléter comme ce qui suit :
Maintenant, il ne reste plus qu'à compiler (POMME + puis a exécuter le projet (POMME + OPTION + R).
Inch Allah.
.
J'obtiens 76 erreurs et 2 warnings.
Error : stray"\312' in program pour les erreurs et
method definition for '-calculer_racine:' not found pour les warnings.
Une idée...
Si tu copies/colles le code à partir de la fenêtre de ton navigateur internet vers XCode, alors effectivement tu obtiens ces messages.
Dans la page HTML, à chaque retour de ligne du code, il y a un caractère invisible (le "\312") qui s'insère dans le texte. Or à la compil dans XCode, ce dernier interprête ce caractère comme n'importe quel autre, d'où les erreurs.
La solution est soit, comme oxitan le dit, de re écrire le code à la mimine, soit de "nettoyer" les fins de ligne en retapant le dernier caractère (le ";") et le retour chariot.
.
C'est un pb tellement fréquent ces caractères invisibles
La prochaine fois que j'ai des "\312" j'essaie de néttoyer les fins de lignes avec ta méthode
Merci BruÂ
Dans la fenêtre Run Log qu'Xcode, j'obtiens ce message :
Executable ?racine carree? has exited with status 0.
[Session started at 2004-09-28 20:55:15 +0200.]
2004-09-28 20:55:16.048 racine carree[570] Could not connect the action calculer_racine: to target of class controleur
Que dois-je faire ?
D'avance merci?
- (IBAction)calculer_action:(id)sender
par
- (IBAction)calculer_racine:(id)sender
dans ton .m et ton .h et ça devrait marcher
Bon, peut-on maintenant m'expliquer en détail le code que je viens d'écrire (je vous rappelle que j'apprends le C mais là , j'ai fait de l'objective-C, non ?).
Merci?