PropertyManagerPage (Strona PropertyManager)

Cze wszystkim

Kilka pytań na temat PropertyManagerPage w języku VBA:

  1. Zazwyczaj formanty pojawiają się na stronie PropertyManagerPage w kolejności, w jakiej zostały zadeklarowane. Tyle tylko, że najwyraźniej grupy mają pierwszeństwo przed kontrolami bez grupy. Jest to osobisty wniosek, nie znalazłem żadnej wskazówki w dokumentacji. Czy ktoś może potwierdzić?

  2. Czy interfejs API PropertyManagerPage pozwala na odtworzenie wszystkich menedżerów właściwości PropertyManager, które są widoczne w solidworks:

    2.1. W menedżerze właściwości PropertyManager Wiązanie, ikony są widoczne na zakładkach. Nie wymyśliłem, jak zrobić to samo w PropertyManagerPage.

    2.2. W menedżerze właściwości PropertyManager Ograniczenie znajduje się tekst po przyciskach do wyboru wiązania. Wiem, jak tworzyć te przyciski, ale nie wiem, jak dodać tekst za nimi.

Le PropertyManager Contraintes

  1. Gdzie można znaleźć przykłady zarządzania formantem .Net lub formantem ActiveX w pliku
    Strona PropertyManager? To może być rozwiązanie moich punktów 2.1. oraz 2.2.

Zasadniczo, mój PropertyManagerPage działa, chodzi bardziej o użyteczność niż o cokolwiek innego.

Dziękuję

Benedykt

Witaj @binoyte ,

PropertyManagerPage, obszerny temat...
Pozwala to na zintegrowanie interfejsu użytkownika/oprogramowania ze środowiskiem programowym, ze standardowymi i specjalistycznymi komponentami, a wszystko to o wyglądzie Solidworks.

Z trzema poziomami kontenerów: samą stroną, kartami z zakładkami (PropertyManagerPageTab) i grupami (PropertyManagerPageGroup).
Każdy kontener może otrzymywać różne i zróżnicowane kontrolki, podobne do tych z UserForm (takich jak Label, TextBox, Button itp.) oraz inne wyspecjalizowane kontrolki (wybór obiektów SW).

Ale zarządzanie pozycją kontrolek na stronie jest dość proste.
Problem polega na tym, że Solidworks sam definiuje położenie elementów sterujących na stronie PropertyManager, przynajmniej częściowo.
Pozwól, że wyjaśnię: na początku tworzona jest karta zakładki na stronie. Na tej karcie tworzony jest przycisk (PropertyManagerPageButton) i grupa (PropertyManagerPageGroup) w tej kolejności. Logicznie rzecz biorąc, spodziewalibyśmy się, że przycisk zostanie umieszczony nad grupą. W rzeczywistości jest umieszczony pod spodem, dzięki SW.
Ponieważ SW nadaje priorytet pozycji grupie (grupom), przyciski pojawią się po...

Niemożliwe jest również precyzyjne dostrojenie położenia kontrolek w tym samym kontenerze.
Ponieważ Label i TextBox są zdefiniowane w tej samej grupie, są one domyślnie umieszczane jeden pod drugim z tylko jednym wcięciem, pojedynczym lub podwójnym.

To ograniczenie można obejść, rzutując Label (typu PropertyManagerPageLabel) na typ wariantu OLE, a element TextBox (typu PropertyManagerPageTextBox) na typ wariantu OLE. W ten sposób formanty korzystają z właściwości Top i Left swoich " przodków " (takich jak PropertyManagerPageControl), co pozwala im wymusić swoje pozycje w kontenerze.
image

Ale są też ograniczenia, ponieważ SW trzyma to wszystko pod nadzorem: właściwość Left wydaje się być ograniczona do przedziału [0... 100], co uniemożliwia umieszczenie wielu przycisków na całej szerokości strony.
Niemożliwe jest uzupełnienie linii za pomocą 4 lub 5 przycisków.

image

Jeśli chodzi o ikony znajdujące się przed składnikami strony, są one wyświetlane przez metodę SetPictureLabelByName zdefiniowaną dla kontrolek. Ponownie należy rzutować komponenty na typ PropertyManagerPageControl lub typ neutralny wariantu OLE.
image

Nie wspominając już o kilku innych nieszczęściach...

1 polubienie

Witam;

Przykład jest dostępny w Pomocy Solidworks:
https://help.solidworks.com/2024/english/api/sldworksapi/Create_PropertyManager_Page_Example_VB.htm
lub film przedstawiający SolidXperts:

Dziękujemy za Twoją opinię @m_blt !

Póki co, odlewanie przedmiotów pomimo ich ograniczeń, będzie mnie dobrze satysfakcjonować.

Z drugiej strony, oprócz standardowych typów vba, ponieważ Cstr nie bardzo wiem, jak to zrobić. Set monControl = new Variant OLE ?

@Maclane Znam przykłady pomocy online. Tak się zaczęło. Ale jeśli przyjrzysz się uważnie, pomimo tego, co jest powiedziane na górze strony, nie ma kontrolki ActiveX. Wiersze są komentowane. A moje badania, aby pójść dalej, utknęły w martwym punkcie.

Z drugiej strony nie znam samouczka na youtube; Zamierzam go obejrzeć jak najszybciej.

Rzutowanie jest niejawnie obsługiwane przez VBA: przycisk o nazwie PrMgrButton " wskazuje " na kontrolkę o nazwie PrMgrControl przez proste przypisanie :

dim PrMgrButton as PropertManagerPageButton
dim PrMgrControl as PropertManagerPageControl

set PrMgrControl = PrMgrButton  ' Possible car le bouton est héritier du contrôle

To samo dotyczy wariantu:

dim PrMgrButton as PropertManagerPageButton
dim vrtControl as variant

set vrtControl = PrMgrButton  ' Usage de "set" à valider...

Nie! Nie zdawałem sobie sprawy z tej techniki. Myślę, że będę mógł go jeszcze wykorzystać w innych projektach.

To trochę HS, ale mam też problemy z późnym wiązaniem z obiektem EdmVaultX, nie mogę dostać EdmVault gdzie X będzie na właściwej wartości, 5 zamiast 21 czy na odwrót nie pamiętam. A ja szukałem sposobu na rzutowanie obiektu do żądanej wersji EdmVault. Zobaczę, czy uda mi się dostosować. Tylko w Late binding i jest to jedyny możliwy wybór, podczas kodowania dla dodatku do zadania oprogramowania .

W każdym razie, inaczej nadal mam pytanie: wariant OLE to typ wariantu czy coś innego?

W VBA istnieje tylko jeden typ wariantu, niezależnie od wskazywanego obiektu.

Sądząc po tej linii z VB.NET przykładu, odlewanie EdmVaultX jest możliwe pomiędzy jego kolejnymi wskazówkami...

  Dim CurrentVault As IEdmVault21 = TryCast(New EdmVault5(), IEdmVault21)

Witam
W vb.net jest to możliwe, a także w VBA, o ile jesteś we wczesnym wiązaniu, to znaczy, gdy sprawdzasz referencje w projekcie. Możesz napisać:

Dim eVault As IEdmVault21
Set eVault = New EdmVault5

I dostajesz obiekt IEdmVault21/IEdmVault21 (moim zdaniem jest błąd, powinniśmy mieć IEdmVault5/IEdmVault21):
{A14B1B02-D76A-4F55-B7E7-B78398D569C4}

Z tą różnicą, że podczas kodowania zadania solidworks (dodatek SolidWorks Tasks) nie można sprawdzić odniesień. W związku z tym należy utworzyć obiekt w późnym powiązaniu :

Dim eVault As Object 'Futur objet EdmVault21
Set eVault = CreateObject("ConisioLib.EdmVault.1")

Wbrew temu, co mogłoby się wydawać, liczba na końcu nie jest indeksem obiektu. W ten sposób otrzymuję obiekt typu Object/IEdmVault21.
{6E1FDD15-2E19-415C-B404-D1BB7F4D4330}

A te dwie rzeczy nie są równoważne. Jeśli wtedy napiszę:

Dim eFile As Object  'Futur objet IEdmFile6
Set eFile = eVault.GetFileFromPath(sFichier)

Otrzymuję komunikat o błędzie 13: typ niezgodności. Idzie jednak sam we wczesnym wiązaniu. I to zrozumiałe, metoda GetFileFromPath jest członkiem IEdmVault5.

A tam do odlania, w późnym wiązaniu, no nie wiem jak to zrobić