Placer des objets à des coordonnées explicites dans une fenetre

5 sujets de 1 à 5 (sur un total de 5)

  • megapoulpe

      #382288

      Bonjour!

      Je cherche à gérer les coordonnées des objets dans ma fenêtre IIntuition IWindow.
      En effet avec le code que j’utilise, C’est le layout qui manage le tout et c’est ce que je ne veux pas.
      y a t’il des paramètres au layout pour régler ça, ou peut-on/doit-on se passer de layout ?

      voici un extrait du code :

      if((gb_WindowObj = (Object *) IIntuition->NewObject(IWindow->WINDOW_GetClass(),NULL,
      WA_IDCMP, IDCMP_GADGETUP | IDCMP_CLOSEWINDOW | IDCMP_MENUPICK,
      WA_SizeGadget, TRUE,
      WA_DepthGadget, TRUE,
      WA_DragBar, TRUE,
      WA_CloseGadget, TRUE,
      WA_Activate, TRUE,
      WA_Title, « Example with ReAction gadgets and window class »,
      WINDOW_Position, WPOS_CENTERSCREEN,
      WINDOW_NewMenu, gb_MenuDescribe,

      WINDOW_GadgetHelp, FALSE,

      WINDOW_ParentGroup, gb_MainLayout = (struct Gadget *)
      IIntuition->NewObject(ILayout->LAYOUT_GetClass(),NULL,
      LAYOUT_Orientation, LAYOUT_ORIENT_VERT,
      LAYOUT_SpaceOuter, TRUE,
      LAYOUT_SpaceInner, TRUE,
      LAYOUT_AddChild, gb_ButtonGad,
      LAYOUT_AddChild, gb_Button2Gad,
      LAYOUT_AddImage, image1,

      TAG_DONE),
      TAG_DONE)))

      voili-voilou…

      Bien à vous.

      Sethghost

        #382292

        Il y a différentes manières de répondre à cette question mais malheureusement chacun garde ses trucs pour soi, pour de bonnes ou de mauvaises raisons.
        Par exemple, ton code est un extrait sans précision, sans commentaires, (c’est du réaction ?) difficile à lire. Il faut de la documentation.
        Du coup comme tu donnes peu d’informations, tu n’auras pas forcément d’aide.

        Tu as essayé gadtoolsbox ? qui même s’il produit un source incomplet et n’est pas du réaction va te donner des indications sur ce que tu veux faire avec les interfaces d’amigaOS.

        Sans layout :

        gb_ButtonGad = (struct Gadget *) NewObject(UIButton->BUTTON_GetClass(), NULL,
            GA_Text, "Bouton 1",
            GA_Left, 10, // Position X
            GA_Top, 10,  // Position Y
            TAG_DONE);
        // code sans commentaires ou presque
        gb_Button2Gad = (struct Gadget *) NewObject(UIButton->BUTTON_GetClass(), NULL,
            GA_Text, "Bouton 2",
            GA_Left, 10, // Position X
            GA_Top, 50,  // Position Y
            TAG_DONE);

        Pour un contrôle total, sans layout.
        Avec quoi tu compiles ?

        Vite, un panneau solaire.

        megapoulpe

          #382305

          Merci pour ton aide.

          Ce n’est pas la céation des boutons qui me pose problème,
          j’emploie déjà un code très similaire au tien ;
          c’est leur ajout dans une fenetre sans layout…
          y a t-il une fonction dans la création d’une fenetre sans layout qui permet d’y insérer des objets ?

          donc qui remplacerait :
          WINDOW_ParentGroup, gb_MainLayout = (struct Gadget *)
          IIntuition->NewObject(ILayout->LAYOUT_GetClass(),NULL,
          LAYOUT_Orientation, LAYOUT_ORIENT_VERT,
          LAYOUT_SpaceOuter, TRUE,
          LAYOUT_SpaceInner, TRUE,
          LAYOUT_AddChild, gb_ButtonGad,
          LAYOUT_AddChild, gb_Button2Gad,
          LAYOUT_AddImage, image1,

          pour info je compile avec la commande :
          gcc -o monexecutable monsource.c -lauto
          mon code est presque du copier-coller depuis les exemples GUI du SDK os4…

          Sethghost

            #382310

            Okay, tu fais du amigaOS4 ? Connais pas bien, et j’aime pas parce que j’ai pas de PPC 🙂
            Je ne compile quasiment qu’avec gcc 2.95 sur 68K (C89, C90).
            Très peu d’expérience de reaction.
            La syntaxe C est presque similaire mais il y a des différences 68k/PPC, d’ou la difficulté à trouver des sources d’exemples valides.

            amigaOS 68K, Sans layout :
            OpenWindow(), AddGadget() pour une fenetre intuition.
            amigaOS4 :
            En reaction, c’est NewObject(), semble-til y compris pour un champ de texte ou même un texte simple.

            /* champ de texte reaction */
                Object *myTextGadget = NewObject(ReactionStringClass, NULL,
                    STRINGA_TextVal, "AmigaOS4 que, quoi?",
                    STRINGA_Width, 380,
                    STRINGA_Height, 20,
                    TAG_DONE);
            
                if (!myTextGadget) {
                    DisposeObject(myWindow);
                    CloseLibrary(ReactionBase);
                    CloseLibrary((struct Library *)IntuitionBase);
                    return 1; /* champ de texte erreur */
                }

            Pas sur qu’il y ait encore des gens qui s’intéressent aux deux types d’amigaOS.
            Si quelqu’un peut expliquer en détails la « position des objets à des coordonnées explicites dans une fenêtre en reaction » !

            Vite, un panneau solaire.

            Souldream

              #382312

              ( Merci Gemini ).

              Comprendre le contexte : Reaction et AmigaOS 4.0

              Reaction est une bibliothèque graphique pour AmigaOS, offrant un moyen de créer des interfaces utilisateur riches et personnalisées. Elle simplifie grandement la tâche de développement en proposant un ensemble d’outils et d’objets graphiques pré-définis.

              AmigaOS 4.0 est la dernière version majeure du système d’exploitation Amiga, connue pour sa stabilité et ses capacités multitâches. Elle offre un environnement de développement robuste pour les applications graphiques.
              Positionnement des objets : les fondamentaux

              Le positionnement d’un objet dans une fenêtre Reaction se fait généralement en spécifiant ses coordonnées (X, Y) par rapport au coin supérieur gauche de la fenêtre parente. Ces coordonnées déterminent l’emplacement de l’objet à l’écran.

              Les principales propriétés à considérer sont :

              Left: Détermine la position horizontale de l’objet par rapport au bord gauche de son conteneur parent.
              Top: Détermine la position verticale de l’objet par rapport au bord supérieur de son conteneur parent.
              Width: Détermine la largeur de l’objet.
              Height: Détermine la hauteur de l’objet.

              Méthodes de positionnement en Reaction

              1. Positionnement statique:

              Au moment de la création: Les coordonnées sont définies directement lors de la création de l’objet.
              Utilisation: Idéal pour des éléments dont la position ne change pas pendant l’exécution de l’application.

              2. Positionnement dynamique:

              Modification des propriétés: Les coordonnées peuvent être modifiées à tout moment pendant l’exécution de l’application, en utilisant les méthodes de l’objet ou en répondant à des événements.
              Utilisation: Permet de créer des interfaces interactives où les éléments peuvent se déplacer ou changer de taille en fonction des actions de l’utilisateur.

              3. Utilisation de conteneurs:

              Organisation des objets: Reaction permet de regrouper des objets dans des conteneurs (comme des fenêtres, des groupes ou des panneaux).
              Positionnement relatif: Les coordonnées d’un objet peuvent être définies par rapport à son conteneur parent, ce qui facilite la création de mises en page complexes.

              Exemple en Reaction
              C++

              // Création d’un bouton
              Reaction::Button *button = new Reaction::Button(window);
              button->SetText(« Cliquez ici »);
              button->SetLeft(100); // Position horizontale à 100 pixels du bord gauche
              button->SetTop(50); // Position verticale à 50 pixels du bord supérieur
              button->SetWidth(100);
              button->SetHeight(30);
              window->AddChild(button);

              Use code with caution.
              Points importants à retenir

              Unités: Les coordonnées sont généralement exprimées en pixels.
              Système de coordonnées: Le système de coordonnées est généralement orthonormé, avec l’origine en haut à gauche.
              Conteneurs imbriqués: Les conteneurs peuvent être imbriqués pour créer des hiérarchies d’objets et faciliter la gestion des positions.
              Gestion des événements: Reaction permet de gérer les événements utilisateur (clics, survols, etc.) pour modifier dynamiquement la position des objets.
              Layout managers: Reaction propose des gestionnaires de mise en page (layout managers) qui automatisent le positionnement des objets dans un conteneur, en fonction de critères comme la taille disponible ou l’alignement.

              ...::: Mist - Mister FPGA - FPGA Arcade 060 - ZxUno :::...
              ...::: A500- A600/Gothek - Amiga 1230 Gotek CF 16GB - A3000 - A4000/30/64Mb/Vlab1.3/Oktagon :::...
              ...::: Vampire V4 SA :::...
              ...::: Zx 48/128+2/128+3/QL - Dragon32 - Atari 520STF/1040 :::...
              ...::: C64 + 1541 / C64 :::...

            5 sujets de 1 à 5 (sur un total de 5)

            • Vous devez être connecté pour répondre à ce sujet.

            Forums AmigaOS, MorphOS et AROS Développement Placer des objets à des coordonnées explicites dans une fenetre

            Amiga Impact