Ce forum est en partie financé par l’affichage de publicités. Merci de désactiver votre bloqueur de publicités pour nous permettre de continuer à fournir ce service.

customiser le save panel d'une application

Discussion dans 'Développement Mac' créé par serty2, 28 Août 2003.

  1. serty2

    serty2 Nouveau membre

    Inscrit:
    28 Août 2003
    Messages:
    9
    J'aime reçus:
    0
    bonjour,
    je decouvre cocoa depuis 3 semaines et je suis confronte a un probleme qui vient de me prendre la journee (newbie oblige ;-) )

    je cherche a fr aparaitre dans le save panel de mon application un textfield editable.
    j ai essaye avec la methode setAccessoryView de la classe NSSavePanel mais je c pas pkoi, ca marche pas....
    le code que j'essaye de fr fonctionner est le suivant :

    <font class="small">Code:</font><hr /><pre> -(IBAction)compress:(id)sender;
    {

    NSSavePanel *savePanel = [NSSavePanel savePanel];
    NSView *testView = [[NSView alloc]init];
    NSTextField *textField = [[NSTextField alloc]init];
    [textField setStringValue:mad:"toto"];
    NSLog(@"valeur : %@",[textField stringValue]);
    [testView addSubview:textField];
    [testView setNeedsDisplay:YES];
    [textField setNeedsDisplay:YES];
    [savePanel setAccessoryView:textField];
    [savePanel setRequiredFileType:mad:"cod"];

    [savePanel beginSheetForDirectory:nil
    file:nil
    modalForWindow:[self window]
    modalDelegate:self
    didEndSelector:mad:selector(didEnd:returnCode:contextInfo:)
    contextInfo:nil];

    }
    </pre><hr />

    si qqun a une piste sur laquelle je pourrais me lancer, pasque je suis un peu bloque la....

    Merci d'avance ;-)
     
  2. molgow

    molgow Vétéran
    Club MacG

    Inscrit:
    4 Janvier 2002
    Messages:
    5 493
    J'aime reçus:
    612
    Essaie comme ceci :

    <font class="small">Code:</font><hr /><pre> -(IBAction)compress:(id)sender;
    {

    NSSavePanel *savePanel = [NSSavePanel savePanel];
    NSView *testView = [[NSView alloc] initWithFrame:NSMakeRect(0.0, 0.0, 228.0, 65.0)]; // &lt;- modif ici
    NSTextField *textField = [[NSTextField alloc] initWithFrame:NSMakeRect(20.0, 23.0, 188.0, 22.0)]; // &lt;- modif ici
    [textField setStringValue:mad:"toto"];
    NSLog(@"valeur : %@",[textField stringValue]);
    [testView addSubview:textField];
    [testView setNeedsDisplay:YES];
    [textField setNeedsDisplay:YES];
    [savePanel setAccessoryView:textField];
    [savePanel setRequiredFileType:mad:"cod"];

    [savePanel beginSheetForDirectory:nil
    file:nil
    modalForWindow:[self window]
    modalDelegate:self
    didEndSelector:mad:selector(didEnd:returnCode:contextInfo:)
    contextInfo:nil];

    }
    </pre><hr />

    Les NSView ont besoin d'être initialisé via la méthode initWithRect:(NSRect *). Je pense qu'avec le code que je t'ai donné, ça devrait à présent fonctionner chez toi. Si ce n'est pas le cas, dis moi, je t'envoie un petit exemple (projet PB).

    Encore une chose, tu ferais bien mieux d'utiliser InterfaceBuilder pour construire ton interface et donc tes NSView. Tu peux créer facilement un NSView en glissant dans InterfaceBuilder l'élément "CustomView" sur ta fenêtre principale. Ensuite, il te suffit juste de créer un Outlet dans ta classe qui reliera cette vue. J'espère que c'est clair, sinon n'hésites pas à nous demander de l'aide.
     
  3. serty2

    serty2 Nouveau membre

    Inscrit:
    28 Août 2003
    Messages:
    9
    J'aime reçus:
    0
    un grand merci pour ce debloquage ;-)))
    ca marche nickel, je v meme en alleger une partie maintenant que j ai mieux compris comment ca marche ;-)

    par contre, si je cree un textField dans IB, et que j en fais un outlet dans mon code, il va s afficher sur ma main window, ou du moins il va gener mon *joli* design non ?

    encore merci d'aider un petit debutant en passe de switch (pc -&gt; MAC ) a decouvrir ce superbe framework malheuresement couple a un language barbare a ses yeux ;-)

    ps : ou a tu trouve les chiffres de Width et Height pour la vue et le textField ?
     
  4. molgow

    molgow Vétéran
    Club MacG

    Inscrit:
    4 Janvier 2002
    Messages:
    5 493
    J'aime reçus:
    612
    C'est rien. N'hésites pas à demander de l'aide si tu as des problèmes.
    Et bienvenue dans la monde merveilleux de la programmation Mac [​IMG] [​IMG]

    Le principe avec Cocoa, c'est que tu crées (presque?) toujours l'interface avec Interface Builder. C'est plus simple et plus rapide. Donc là tu dois créer un NSView qui contiendra un NSTextField. Voici la marche à suivre :

    1) Tu ouvres dans Interface Builder (IB) ton fichier MainMenu.nib. Tu vas dans la palette Cocoa-Containers (cf image). Tu sélectionnes l'élément CustomView, tu le glisses sur la fenêtre principale (celle qui contient les instances de tes classes et tes fenêtres par exemple). Voici une image c'est plus parlant :

    [​IMG]

    2) Tu insères ton NSTextField dans ce nouveau NSView (ou tu y mets tout ce que tu veux comme élément d'interface)

    [​IMG]

    3) Tu as probablement une classe Controller quelque part. Tu dois lui rajouter un outlet (un outlet est simplement un pointeur dans une classe qui pointera sur un élément d'interface), et le relier au NSView que tu viens de créé.

    [​IMG]

    Voilà, donc contrairement à ce que tu avais l'air de me dire, ton NSTextField ne se trouvera absolument pas dans ta fenêtre, mais dans un NSView à part.

    Je t'ai également concocté un petit exemple que tu peux télécharger ici.

    Quant à ce langage barbare.. je suis un petit peu de ton avis, c'est pourquoi je fais actuellement du Cocoa-Java (même chose mais utilisation du Java plutôt qu'Obj-C, et contrairement à certains appriori, c'est tout à fait rapide). Un site sur Cocoa-Java au cas où ça t'intéresse.
    Encore une chose, pour les width et les height, je l'ai simplement trouvé avec Interface Builder (j'ai créé un NSView avec un NSTextField avec IB puis j'ai relevé les NSRect correspondants [​IMG])
     
  5. serty2

    serty2 Nouveau membre

    Inscrit:
    28 Août 2003
    Messages:
    9
    J'aime reçus:
    0
    effectivement, vu comme ca, c bcp plus simple ;-)
    merci encore...
    concernant obj-C , je n'ai pas eu tout a fait le choix :-(
    dc j'ai du m adapter.....
    enfin tout du moins essayer de m adapter....
    maintenant que j'ai un save panel a peu pres fonctionnel, je v essayer d'avancer un peu plus dans mon application...

    merci pour tes reponses bien plus reactives et costructives que la ML cocoa-dev ..... [​IMG]
     
  6. molgow

    molgow Vétéran
    Club MacG

    Inscrit:
    4 Janvier 2002
    Messages:
    5 493
    J'aime reçus:
    612
    Ah j'avais pas vu ton message sur cocoa-dev [​IMG]

    Qqn t'y a répondu en moins de 30 min, que :
    Peut-être un peu succint mais correct [​IMG] [​IMG]
     
  7. serty2

    serty2 Nouveau membre

    Inscrit:
    28 Août 2003
    Messages:
    9
    J'aime reçus:
    0
    vivi effectivement, correct, mais ta reponse est bien plus precise ;-)
    c plus qu'apreciable d'avoir des reponses du type de celle que tu m a donne ;-)
     
Chargement...