Bonjour @binoyte ,
PropertyManagerPage, vaste sujet…
Il permet d’intégrer une interface utilisateur/SW dans l’environnement de SW, avec des composants standard et spécialisés, le tout au look de Solidworks.
Avec trois niveaux de conteneurs : la page elle-même, les fiches à onglets (PropertyManagerPageTab) et les groupes (PropertyManagerPageGroup).
Chaque conteneur peut recevoir des contrôles divers et variés, similaires à ceux d’un UserForm (type Label, TextBox, Button…), et d’autres spécialisés (sélection d’objets SW).
Mais la gestion de la position des contrôles au sein de la page est assez sommaire.
Le problème, c’est que Solidworks définit lui-même la position des contrôles dans la page du PropertyManager, au moins partiellement.
Je m’explique : au départ, une fiche à onglet est créée dans la page. Dans cette fiche sont créés, dans cet ordre, un bouton (PropertyManagerPageButton) et un groupe (PropertyManagerPageGroup). On s’attendrait logiquement à voir le bouton placé au dessus du groupe. En fait, il est placé en dessous, merci SW.
Parce que SW donne la priorité de la position au(x) groupe(s), les boutons viendront après…
Impossible également de gérer finement la position des contrôles au sein d’un même conteneur.
Un Label et un TextBox étant définis dans un même groupe, ils sont par défaut placés l’un sous l’autre avec seulement une indentation, simple ou double.
Il est possible de contourner cette limitation en castant le Label (de type PropertyManagerPageLabel) au type Variant OLE, et le TextBox (de type PropertyManagerPageTextBox) au type Variant OLE. Les contrôles profitent ainsi des propriétés Top et Left de leurs « ancètres » (type PropertyManagerPageControl), ce qui pemet de forcer leurs positions dans le conteneur.

Mais là aussi avec des limites puisque SW garde tout cela sous surveillance : la propriété Left semble limitée à l’intervalle [0…100], ce qui rend impossible le placement de plusieurs boutons sur la totalité de la largeur de la page.
Impossible de compléter la ligne avec 4 ou 5 boutons.

Quant aux icônes devant les composants de la page, il sont affichés par la méthode SetPictureLabelByName définis pour les contrôles. Là aussi, il faut caster les composants vers le type PropertyManagerPageControl, ou un type neutre Variant OLE.

Sans parler de quelques autres misères…