PropertyManagerSeite

Hallo ihr alle

Ein paar Fragen zu PropertyManagerPage in VBA :

  1. Normalerweise werden Steuerelemente auf der PropertyManagerPage in der Reihenfolge angezeigt, in der sie deklariert wurden. Abgesehen davon, dass Gruppen anscheinend Vorrang vor Steuerelementen ohne Gruppe haben. Dies ist eine persönliche Schlussfolgerung, ich habe in der Dokumentation keinen Hinweis gefunden. Kann das jemand bestätigen?

  2. Ermöglicht Ihnen die PropertyManagerPage-API, alle PropertyManager zu reproduzieren, die Sie in SolidWorks sehen:

    2.1. Im Constraint PropertyManager werden Symbole auf den Registerkarten angezeigt. Ich habe nicht herausgefunden, wie ich das Gleiche in einer PropertyManagerPage tun kann.

    2.2. Im PropertyManager Beschränkung befindet sich nach den Schaltflächen Text zur Auswahl der Beschränkung. Ich weiß, wie ich diese Schaltflächen erstelle, aber ich weiß nicht, wie ich Text dahinter einfügen kann.

Le PropertyManager Contraintes

  1. Wo finde ich Beispiele für die Verwaltung von .Net-Steuerelementen oder ActiveX-Steuerelementen in einem
    PropertyManagerPage? Dies könnte die Lösung für meine Punkte 2.1 sein. und 2.2.

Grundsätzlich funktioniert meine PropertyManagerPage, es geht mehr um die Benutzerfreundlichkeit als um alles andere.

Vielen Dank

Benedikt

Hallo @binoyte ,

PropertyManagerPage, ein riesiges Thema...
Es ermöglicht die Integration einer Benutzer-/SW-Schnittstelle in die SW-Umgebung, mit Standard- und Spezialkomponenten, die alle im Solidworks-Look gehalten sind.

Mit drei Ebenen von Containern: der Seite selbst, Registerkarten (PropertyManagerPageTab) und Gruppen (PropertyManagerPageGroup).
Jeder Container kann verschiedene und unterschiedliche Steuerelemente empfangen, ähnlich denen eines UserForm (z. B. Label, TextBox, Button usw.) und andere spezialisierte Steuerelemente (Auswahl von SW-Objekten).

Die Verwaltung der Position der Steuerelemente auf der Seite ist jedoch recht einfach.
Das Problem besteht darin, dass Solidworks selbst die Position der Steuerelemente auf der PropertyManager-Seite definiert, zumindest teilweise.
Lassen Sie mich das erklären: Zu Beginn wird eine Tab-Karte auf der Seite erstellt. Auf dieser Karte werden eine Schaltfläche (PropertyManagerPageButton) und eine Gruppe (PropertyManagerPageGroup) in dieser Reihenfolge erstellt. Wir würden logischerweise erwarten, dass die Schaltfläche über der Gruppe platziert wird. Tatsächlich befindet es sich darunter, dank SW.
Da SW der Gruppe(n) Vorrang bei der Position gibt, kommen die Tasten nach...

Es ist auch unmöglich, die Position von Steuerelementen innerhalb desselben Containers fein abzustimmen.
Da ein Label und ein TextBox-Objekt in derselben Gruppe definiert sind, werden sie standardmäßig untereinander mit nur einem Einzug (einfach oder doppelt) platziert.

Diese Einschränkung kann umgangen werden, indem Label (vom Typ PropertyManagerPageLabel) in den OLE-Variantentyp und das TextBox-Objekt (vom Typ PropertyManagerPageTextBox) in den OLE-Variantentyp umgewandelt wird. Die Steuerelemente nutzen daher die Top - und Left-Eigenschaften ihrer " Vorgänger " (z. B. PropertyManagerPageControl), wodurch sie ihre Positionen im Container erzwingen können.
image

Aber auch hier gibt es Grenzen, da SW all dies unter Beobachtung hält: Die Left-Eigenschaft scheint auf das Intervall [0... 100], was es unmöglich macht, mehrere Schaltflächen über die gesamte Breite der Seite zu platzieren.
Es ist unmöglich, die Zeile mit 4 oder 5 Tasten zu vervollständigen.

image

Die Symbole vor den Seitenkomponenten werden von der SetPictureLabelByName-Methode angezeigt, die für die Steuerelemente definiert ist. Auch hier müssen Sie die Komponenten in den PropertyManagerPageControl-Typ oder in einen neutralen OLE-Variantentyp umwandeln.
image

Ganz zu schweigen von ein paar anderen Miseren...

1 „Gefällt mir“

Hallo;

Ein Beispiel finden Sie in der Solidworks Hilfe:
https://help.solidworks.com/2024/english/api/sldworksapi/Create_PropertyManager_Page_Example_VB.htm
oder ein Video von SolidXperts:

Vielen Dank für Ihr Feedback @m_blt !

Vorläufig wird mich das Gießen von Objekten trotz ihrer Einschränkungen gut befriedigen.

Auf der anderen Seite, abgesehen von den Standardtypen von VBA, da Cstr ich nicht wirklich weiß, wie man das macht. Set monControl = new Variant OLE

@Maclane Ich kenne die Beispiele für Online-Hilfen. So habe ich angefangen. Aber wenn man genau hinschaut, gibt es trotz dessen, was oben auf der Seite gesagt wird, kein ActiveX-Steuerelement. Die Zeilen werden kommentiert. Und meine Forschung, um weiter zu gehen, geriet ins Stocken.

Auf der anderen Seite kenne ich das Youtube-Tutorial nicht; Ich werde es mir so schnell wie möglich ansehen.

Die Umwandlung wird implizit von VBA verarbeitet: Eine Schaltfläche mit dem Namen PrMgrButton " zeigt " durch eine einfache Zuweisung " auf ein Steuerelement mit dem Namen PrMgrControl:

dim PrMgrButton as PropertManagerPageButton
dim PrMgrControl as PropertManagerPageControl

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

Das Gleiche gilt für eine Variante:

dim PrMgrButton as PropertManagerPageButton
dim vrtControl as variant

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

IMPEC! Ich wusste nichts von dieser Technik. Ich denke, dass ich es in anderen Projekten wieder verwenden kann.

Es ist ein bisschen HS, aber ich habe auch Probleme mit der späten Bindung mit dem EdmVaultX-Objekt, ich kann kein EdmVault bekommen, bei dem X den richtigen Wert hat, 5 statt 21 oder umgekehrt, ich erinnere mich nicht. Und ich suchte nach einer Möglichkeit, das Objekt in die gewünschte EdmVault-Version umzuwandeln. Ich werde sehen, ob ich mich anpassen kann. Nur in der späten Bindung, und dies ist die einzig mögliche Wahl, wenn Sie für das SW-Aufgaben-Addin  codieren.

Wie auch immer, sonst habe ich noch eine Frage: OLE-Variante ist der Variantentyp oder etwas anderes?

In VBA gibt es nur einen Variantentyp, unabhängig davon, auf welches Objekt verwiesen wird.

Nach dieser Zeile aus einem VB.NET Beispiel zu urteilen, ist das Gießen von EdmVaultX zwischen seinen aufeinanderfolgenden Hinweisen möglich...

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

Hallo
In vb.net ja ist es möglich, und auch in VBA, solange Sie sich in der frühen Bindung befinden, d.h. wenn Sie die Referenzen im Projekt überprüfen. Sie können schreiben:

Dim eVault As IEdmVault21
Set eVault = New EdmVault5

Und Sie erhalten ein Objekt IEdmVault21/IEdmVault21 (meiner Meinung nach gibt es einen Fehler, den wir haben IEdmVault5/IEdmVault21sollten):
{A14B1B02-D76A-4F55-B7E7-B78398D569C4}

Mit der Ausnahme, dass Sie beim Codieren einer SOLIDWORKS Aufgabe (SolidWorks Aufgaben Add-In) die Referenzen nicht überprüfen können. Daher müssen Sie das Objekt in der späten Bindung erstellen:

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

Im Gegensatz zu dem, was man denken könnte, ist die Zahl am Ende nicht der Index des Objekts. Ich erhalte also ein Objekt vom Typ Object/IEdmVault21.
{6E1FDD15-2E19-415C-B404-D1BB7F4D4330}

Und die beiden sind nicht gleichwertig. Wenn ich dann schreibe:

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

Ich erhalte die Fehlermeldung 13: Mismatch-Typ. In der frühen Bindung geht es jedoch von alleine. Und es ist verständlich, dass die Methode GetFileFromPath ein Mitglied von IEdmVault5ist.

Und dort zum Gießen, in der späten Bindung, nun, ich weiß nicht, wie ich das machen soll