Revenir à Développement

gadtools je craque…

Forums AmigaOS, MorphOS et AROS Développement gadtools je craque…

7 sujets de 1 à 7 (sur un total de 7)
  • Auteur
    Messages
  • #210992
    thellier
    Participant
    • Messages : 614

    Bonjour
    J’essaye désespérément de faire un prog avec des bouttons gadtools (je cherche pas à faire qque chose de beau mais fonctionnel)

    Ca ouvre une fenetre
    Ca crée et y attache n boutons (une glist)
    (Ca marche jusque là)
    Je gére les evenements de la fenetre
    (Ca marche jusque là)
    Et si on clique sur un boutons alors j’enléve tout les boutons, je crée et y attache m boutons (une autre glist) avec la fenetre qui reste ouverte

    Et là ca marche pas !!! les anciens n boutons restent quoi que je fasse avec les m nouveaux en plus

    QQun a t’il une exemple qui marche qui fasse ça ?

    MERCI

    Alain

    #210998
    elwood
    Participant
    • Messages : 1576
    #210999
    tito
    Participant
    • Messages : 208
    tu as fait un refresh pour demander à intuition de redessiner ta liste de gadgets ?
    void GT_RefreshWindow( struct Window *win, struct Requester *req );
    
    cf ici : 
    http://amigang.fr/rkm/Libraries_Manual_guide/node026F.html
    
    doc complete gadtools : 
    http://amigang.fr/rkm/Libraries_Manual_guide/node024B.html
    
    (amiga os 3)

    Partage de photos entre amis : les réseaux sociaux trop risqués ? les envois par email aléatoires ? le Cloud compliqué ? ---
    Essayez album.zaclys.com ! ---
    Association loi 1901, 100% made & hosted in France.

    #211017
    thellier
    Participant
    • Messages : 614

    Oui je suis parti du wiki pour faire mon prog
    J’ai ajouté un GT_RefreshWindow() et ça change rien

    Pourtant c’est un problème simple une fenetre avec n boutons puis avec m boutons differents
    Normalement gadtools devrait pouvoir le faire
    Je comprends pas … comment on fais pour enlever les boutons à une fenetre

    J’enléve avec
    RemoveGList(window,glist,-1);
    window->FirstGadget=NULL; /* pour etre sur */
    GT_RefreshWindow(window,NULL); /* pour etre sur */

    puis je cree les nouveaux gadgets avec
    glist=NULL;
    gad=CreateContext(&glist);

    large=80; high=20;
    x=2; y=2;
    SetButton(4,x,y,large,high, »Offset »); x=x+large;
    SetButton(3,x,y,large,high, »Name « ); x=x+large;
    SetButton(2,x,y,large,high, »Size « ); x=x+large;
    SetButton(1,x,y,large,high, »Call « ); x=x+large;
    SetButton(0,x,y,large,high, »Called »); x=x+large;

    AddGList(window,glist,0,-1,NULL);
    RefreshGList(glist,window,NULL,-1);
    GT_RefreshWindow(window,NULL);

    avec SetButton definit ainsi

    void SetButton(ULONG n,ULONG x,ULONG y,ULONG large,ULONG high,UBYTE *name)
    {
    ng[n].ng_TextAttr = &Topaz80;
    ng[n].ng_VisualInfo = vi;
    ng[n].ng_LeftEdge = x;
    ng[n].ng_TopEdge = y;
    ng[n].ng_Width = large;
    ng[n].ng_Height = high;
    ng[n].ng_GadgetText = name;
    ng[n].ng_GadgetID = n+1;
    ng[n].ng_Flags = 0;
    gad = CreateGadget(BUTTON_KIND, gad, &ng[n], TAG_END);
    }

    A noter que la création des boutons est ok c’est leur enlevement/remplacement qui marche pas

    Alain

    #211059
    Gilloo
    Participant
    • Messages : 831

    Je dirais que c’est normal.
    Si on enlève un gadget d’une fenêtre avec RemoveGList, il est enlevé de la liste des gadgets, mais en aucun cas il n’est effacé de la fenêtre.
    Il faut faire un RecfFill() avec la couleur du fond, généralement couleur 0, à l’emplacement exact du gadget à enlever avant d’appeler RefreshGList() qui redessine la liste à partir du gadget indiqué en paramètre. L’ideal serait d’effacer avant RemoveGList.

    SetRast(window->RPort, 0) marche aussi mais efface toute la zone cliente de la fenêtre, cela peut provoquer un flash pas zoli zoli…

    #211421
    thellier
    Participant
    • Messages : 614

    Merci Gilloo cette fois ça marche 🙂

    Par contre j’ai tout mes boutons avec le texte centré
    Mais je voudrais les boutons avec le texte aligné à gauche: On fais comment ?

    Pour info sur mon prog (ObjDumpFuncs):
    Je désassemble avec ObjDump sous OS4 puis mon prog ObjDumpFuncs analyse le source ASM
    Il trouve les noms des fonctions, leur tailles, leurs appels (called/calls =entrant/sortant) et en fais une liste en mémoire
    On peut afficher cette liste par offset/name/size/called/calls la faire défiler,etc..
    Après je peut cliquer sur une des fonctions et cela me donne quelles fonctions l’appellent (called) et quelles fonctions elle appelle (calls)
    Bref c’est un explorateur de fonctions d’un exécutable (interactive function-tree)

    Alain

    #211569
    Gilloo
    Participant
    • Messages : 831

    fichier gadgets/button.h, dans la liste des tags, on trouve

    BUTTON_Justification

    suivi des valeurs au choix
    /* Justification modes for BUTTON_Justification. */
    #define BCJ_LEFT   0
    #define BCJ_CENTER 1  /* Default – center text */
    #define BCJ_RIGHT  2

    donc ajouter BUTTON_Justification, BCJ_LEFT, TAG_END à la place de TAG_END dans CreateGadget et ça devrait rouler.

7 sujets de 1 à 7 (sur un total de 7)
  • Vous devez être connecté pour répondre à ce sujet.

Forums AmigaOS, MorphOS et AROS Développement gadtools je craque…

Do NOT follow this link or you will be banned from the site!