Bonjour.
Je développe une appli où l'interface va contenir un panneau où sont déposés des objets qui doivent réagir à la souris.
Ces objets vont former une sorte d'organigramme ou de réseau donc avec des nœuds compacts mais pas rectangulaires, mais surtout des liaisons linéaires dans toutes les directions.
Si j'utilise un TControl ou un descendant, la zone de réaction à la souris est un rectangle ce qui n'est pas du tout ce que je veux obtenir (dans le cas d'une liaison, c'est uniquement sa diagonale qui doit réagir).
Précision : ce que je cherche à produire est proche de ce qu'on obtient par exemple avec un diagramme réalisé sous LibreOffice Draw avec des formes reliées par des flèches ; on ne peut les sélectionner qu'en étant précisément dessus et le rectangle englobant un cercle n'a aucun effet au clic sur un cercle adjacent.
Ma solution actuelle est de simplement dessiner sur le panneau une représentation des objets et définir en parallèle une liste de formes géométriques de façon qu'à chaque clic sur le panneau contenant ces objets je passe en revu la liste pour trouver dans quelle forme la souris se trouve.
Je ne trouve pas ça très propre, surtout dans le cadre d'une programmation objet. Par ailleurs d'autres langage ont une propagation du clic du contrôle interne au contrôle conteneur. Je n'ai pas réussi à trouver comment réaliser ce mécanisme sous Lazarus. L'idée serait de laisser Lazarus gérer le clic, trouver le contrôle cliqué, que ce contrôle décide s'il est concerné (dans le rectangle englobant la forme -> dans la forme réellement) et sinon qu'il passe la main aux autres contrôles contenu dans le panneau et sous lui.
Connaissez-vous un moyen de réaliser ça ?
Les TShape ne sont donc pas utiles ici.
Je peux créer un TControl personnalisé qui décidera si un clic est dedans ou dehors la forme qu'il a, mais comment transmettre le clic à d'éventuels contrôles qui se trouveraient dessous, mais toujours dans le panneau ? Faut-il que je passe par le panneau pour transmettre l'événement ou que ce soit lui qui soit personnalisé et qui gère l'événement sur la liste (ordonnée par un z-index) de ses contenus ?
Merci de vos conseils.
Partager