Créer interface graphique pour mon application

overmacovermac 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?

Réponses

  • BruBru Membre
    09:14 modifié #2
    Premère question :

    As tu Xcode et Interface Builder ?
  • overmacovermac Membre
    09:14 modifié #3
    Oui pardon?je possède Xcode 1.1 et Interface builder 2.4. J'ai aussi Java 1.4.1 si ça peut aider?
  • BruBru Membre
    juillet 2004 modifié #4
    Bon, c'est un début.

    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]
  • overmacovermac Membre
    09:14 modifié #5
    Merci beaucoup, j'attends avec impatience la suite?? ;D
  • BruBru Membre
    09:14 modifié #6
    Seconde étape :

    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]
  • overmacovermac Membre
    09:14 modifié #7
    D'accord pour l'instant je suis?
  • BruBru Membre
    juillet 2004 modifié #8
    Bon, tu as construit ton interface, puis tu as créé la classe "controleur" qui accueillera ton programme.
    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...

    .
  • overmacovermac Membre
    septembre 2004 modifié #9
    Pour l'instant, je comprends (désolé pour le retard, non pas que je ne m'y intéressé plus mais avec les examens et le boulot d'été, je ne pouvais pas avoir beaucoup de temps pour ça). En espérant avoir une suite.
  • BruBru Membre
    09:14 modifié #10
    Bon.

    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 :

    <br />#import &quot;controleur.h&quot;<br />#include &lt;math.h&gt;<br /><br />float calcul_racine (float x);<br /><br />@implementation controleur<br /><br />- (IBAction)calculer_action:(id)sender<br />{<br />        float racx;<br />        NSString *resultat;<br /><br />        racx=calcul_racine([champ_texte floatValue]);<br />        if (racx&lt;0) resultat=@&quot;Impossible de calculer la racine carrée.&quot;;<br />        else resultat=[NSString stringWithFormat:@&quot;La racine carrée est %f&quot;, racx];<br /><br />        [[NSAlert alertWithMessageText:@&quot;Résultat.&quot;<br />                defaultButton:@&quot;Fermer&quot;<br />                alternateButton:nil<br />                otherButton:nil<br />                informativeTextWithFormat:resultat] runModal];<br /><br />}<br /><br />@end<br /><br />float calcul_racine (float x)<br />{<br />        float racx;<br /><br />        if (x &lt;= 0.0) racx = -1;<br />        else racx = sqrt (x);<br /><br />        return racx;<br />}<br />
    


    Maintenant, il ne reste plus qu'à  compiler (POMME + B) puis a exécuter le projet (POMME + OPTION + R).

    Inch Allah.

    .
  • overmacovermac Membre
    09:14 modifié #11
    Ok merci j'essaye ça ce week-end et je vous tiens au courant.
  • overmacovermac Membre
    09:14 modifié #12
    Bon j'ai suivi à  la lettre et j'ai fais un copier coller du code que tu me donne dans le fichier controlleur.m

    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...
  • muqaddarmuqaddar Administrateur
    09:14 modifié #13
    Oui, ce sont les espaces invisibles avant le code, vaut mieux retaper le code.
  • BruBru Membre
    09:14 modifié #14
    dans 1096217380:

    Error : stray"\312' in program pour les erreurs et
    method definition for '-calculer_racine:' not found pour les warnings.


    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.

    .
  • ClicCoolClicCool Membre
    09:14 modifié #15
    ah ben tiens, c'est bon à  apprendre ça !

    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 :D

    Merci Bru  :D
  • overmacovermac Membre
    09:14 modifié #16
    Bon ok je viens de réécrire tous le code et ça y est, le programme s'exécute. Cependant, lorsque j'obtiens la fenêtre et que je rentre une valeur (exemple : 20), je clique sur "calculer la racine carrée" mais rien ne se passe. je n'obtiens pas de texte qui m'affiche le résultat.

    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?
  • cbrandtcbrandt Membre
    09:14 modifié #17
    remplace

    - (IBAction)calculer_action:(id)sender

    par

    - (IBAction)calculer_racine:(id)sender

    dans ton .m et ton .h et ça devrait marcher
  • overmacovermac Membre
    09:14 modifié #18
    Ok ça fonctionne super bien !

    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?
Connectez-vous ou Inscrivez-vous pour répondre.