| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SolidEdge |
Autor
|
Thema: VB Eine Funktion aus der SE-ComandBar aufrufen (694 mal gelesen)
|
progiAS Mitglied Programmierer
Beiträge: 10 Registriert: 03.09.2004
|
erstellt am: 11. Okt. 2004 14:46 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich möchte in einer Comandbar eine Funktion in meinem laufenden Program aufrufen. In Office-VBA geht das mit Button.OnAction ="Name". In Solid Edge 15 kann man hier nur den Exe-Pfad angeben. Der andere Weg wäre: Private WithEvents moButton As SolidEdgeFramework.CommandBarButtonEvents ... Button = moCommandBar.Controls.Add moButton = Button.CommandBarButtonEvents (<-Fehlermeldung) .. Das gibt leider einen Cast-Fehler (vb.net). Hat einer das schon mal gemacht? Gruß Andreas
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
modeng Ehrenmitglied V.I.P. h.c.
Beiträge: 7061 Registriert: 10.12.2003
|
erstellt am: 11. Okt. 2004 16:41 <-- editieren / zitieren --> Unities abgeben: Nur für progiAS
Moin, [...] Button = moCommandBar.Controls.Add das liefert ein Object vom Typ CommandBarControl zurueck welches keine Methode CommandBarButtonEvents hat da dies ja ein Event ist, der ausgeloest wird wenn der Knopf 'gedrueckt' wird, dann wird Deine Methode moButton() aufgerufen. In einem anderen Zusammenhang gabs mal ein VB-Makro ich hab's mal angehaengt, weiss aber nicht ob's unter V15 vb.net noch so laeuft (VB ist ja mit .NET auch nicht mehr das was es einmal war ;-)) ) Klaus [Diese Nachricht wurde von modeng am 11. Okt. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
progiAS Mitglied Programmierer
Beiträge: 10 Registriert: 03.09.2004
|
erstellt am: 12. Okt. 2004 06:46 <-- editieren / zitieren --> Unities abgeben:
Hallo, besten Dank für die Antwort. Das Beispiel behandelt, wie ich von einer Toolbar eine EXE Datei starte, jedoch nicht wie ich in einem laufenden Program den Button-click mitbekommen. Das Program soll interaktiv laufen, also auf click-Ereignisse meiner Toolbar reagieren. Das erzeugen der Commandbar (oder Toolbar) ist kein Problem, nur die Event-Verarbeitung klappt nicht. Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
modeng Ehrenmitglied V.I.P. h.c.
Beiträge: 7061 Registriert: 10.12.2003
|
erstellt am: 12. Okt. 2004 08:18 <-- editieren / zitieren --> Unities abgeben: Nur für progiAS
|
progiAS Mitglied Programmierer
Beiträge: 10 Registriert: 03.09.2004
|
erstellt am: 12. Okt. 2004 08:40 <-- editieren / zitieren --> Unities abgeben:
Hi, leider wird auch hier "nur" jeweils eine EXE aufgerufen. Man muß nicht unbedingt ein AddIn schreiben um die Ereignisse von SE mitzukriegen. Mit der Deklaration on WithEvents geht das auch mit einer EXE, (ein AddIn habe ich da noch nicht gemacht, sollte sich jedoch auch nicht von der unten dargestellten Methode unterscheiden.) Also Mouse-clicks kann ich so mitbekommen, nur der CommandBarButton.CommandBarButtonEvents scheint nicht zu funktionieren. Die Eigenschaft ist "mal wieder" schlampig programmiert und als Object deklariert. Sollte eigentlich als CommandBarButtonEvents deklariert sein, wie die Programmierhilfe in SE auch anzeigt. Beim Zuweisen kommt dann ein Cast-Fehlermeldung. Casten geht leider auch nicht. Private WithEvents moButtonEvent As SolidEdgeFramework.CommandBarButtonEvents ... dim oNewButton as SolidEdgeFramework.CommandBarButton oNewButton = commandbar.add moButtonEvent =oNewButton.CommandBarButtonEvents (Fehler) Gruß Andreas
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pablo Mitglied Techniker
Beiträge: 453 Registriert: 23.01.2002 Win10 Office 365 SE 2019
|
erstellt am: 12. Okt. 2004 09:03 <-- editieren / zitieren --> Unities abgeben: Nur für progiAS
|
progiAS Mitglied Programmierer
Beiträge: 10 Registriert: 03.09.2004
|
erstellt am: 12. Okt. 2004 09:30 <-- editieren / zitieren --> Unities abgeben:
Hi, hört sich gut an, geht bei mir leider auch nicht, der selbe Fehler. Ich habe folgendes probiert: Private WithEvents moSEEvents As SolidEdgeFramework.ApplicationEvents ... moSEEvents = moSE.ApplicationEvents (Fehler) Hast Du das anders deklariert? Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
modeng Ehrenmitglied V.I.P. h.c.
Beiträge: 7061 Registriert: 10.12.2003
|
erstellt am: 12. Okt. 2004 09:35 <-- editieren / zitieren --> Unities abgeben: Nur für progiAS
Moin, also wenn ich das so schreibe gibt es keinen Fehler: dim oNewButton as SolidEdgeFramework.CommandBarButton oNewButton = commandbar.controls.add ' <------ moButtonEvent =oNewButton.CommandBarButtonEvents das Problem lag IMHO hier: oNewButton = commandbar.add ' neue commandbar oNewButton = commandbar.controls.add ' Button in einer commandbar Klaus [Diese Nachricht wurde von modeng am 12. Okt. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pablo Mitglied Techniker
Beiträge: 453 Registriert: 23.01.2002 Win10 Office 365 SE 2019
|
erstellt am: 12. Okt. 2004 09:42 <-- editieren / zitieren --> Unities abgeben: Nur für progiAS
|
progiAS Mitglied Programmierer
Beiträge: 10 Registriert: 03.09.2004
|
erstellt am: 12. Okt. 2004 10:19 <-- editieren / zitieren --> Unities abgeben:
Hi Klaus, hast Du das mit VB.net gemacht, nach der Syntax schon. Ich habe das jetzt mal in VB 6 gemacht und da klappt es. Ob das an irgendwelchen Einstellungen in vb.net liegt? Beim Kollegen auf Rechner läufts in vb.net auch nicht. Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
modeng Ehrenmitglied V.I.P. h.c.
Beiträge: 7061 Registriert: 10.12.2003
|
erstellt am: 12. Okt. 2004 10:29 <-- editieren / zitieren --> Unities abgeben: Nur für progiAS
Moin, wurde mit VB6/Sp5 gemacht; .NET nicht vorhanden. Es gibt aber offenbar Probleme mit .NET und VB; im Forum gabs mal etwas dazu im Zusammenhang mit Typ Long als Ubergabewert/Rueckgabewert von SE. Wuerde ich mal schauen ob es dzu seitens UGS schon gemeldete Fehler gibt (im Beispiel habe ich nur das SET wegoptimiert ;-) ) Klaus [Diese Nachricht wurde von modeng am 12. Okt. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
progiAS Mitglied Programmierer
Beiträge: 10 Registriert: 03.09.2004
|
erstellt am: 12. Okt. 2004 10:34 <-- editieren / zitieren --> Unities abgeben:
|
pablo Mitglied Techniker
Beiträge: 453 Registriert: 23.01.2002 Win10 Office 365 SE 2019
|
erstellt am: 12. Okt. 2004 11:06 <-- editieren / zitieren --> Unities abgeben: Nur für progiAS
|
progiAS Mitglied Programmierer
Beiträge: 10 Registriert: 03.09.2004
|
erstellt am: 12. Okt. 2004 11:35 <-- editieren / zitieren --> Unities abgeben:
Hi Pablo, besten Dank für den Link, war leider auch nichts zum Thema commandbar dabei. Ich vermute mal das bei vb.net das Objekt vorinitialisiert werden muß (Es gibt halt doch einige Neuerungen in .net -)). Hab jedoch keine Ahnung wie ich das machen soll. In einem anderen Fall habe ich eine Line2D erzeugt, damit ich dieses Objekt dann verwenden konnte um eine Referenz auf eine andere Linie zu bekommen, die erste habe dann wieder gelöscht. Keine tolle Lösung, aber geht wenigstens. Ohne Vorinitialisierung ging das ganze nicht. In VB6 keine Probleme. Habe das aktuelle Problem jetzt an UGS geschickt mit dem VB6 und dem VB.NET Code. Wenn ich eine Anwort erhalten habe stelle ich die hier rein. Also besten Dank für die Antworten Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
progi Mitglied Programmierer
Beiträge: 74 Registriert: 18.08.2004 VB.net SE 16
|
erstellt am: 19. Okt. 2004 08:58 <-- editieren / zitieren --> Unities abgeben: Nur für progiAS
Hallo, habe bei UGS einen Workaround gefunden, bzw. wurde mir von UGS zugesendet. Ist jedoch nicht ganz so schon. Die haben ein Program mit dem man die SE Events abfangen kann. BeforeCommandRun steht dann (Idee von Pablo) zur Verfügung, jedoch eignet sich das nur um eine andere EXE zu starten, da SE nicht mehr freigegeben wird. In meiner Anwendung möchte ich eine Form anzeigen, es kommt dann aber immer auch die Windows-Meldung "Wechseln zu...", sobal man irgendwo in SE hinklickt. Der Link ist oben in den anderen Beiträgen zu finden. Hier kurz die Funktion: Implements SolidEdgeFramework.ISEApplicationEvents (Schnittstelle implementieren) Private moSE As SolidEdgeFramework.Application 'Objekte für die Com-Verbindung Private connectionPoint As UCOMIConnectionPoint Private cookie As Integer Private Sub ConnectCom() Try If moSE Is Nothing Then moSE = GetSE() End If Dim icpc As UCOMIConnectionPointContainer = moSE Dim g As Guid = New Guid("90223887-09CD-11D1-BA07-080036230602") ' Attempt to find a Connection Point for ISEApplicationEvents. icpc.FindConnectionPoint(g, connectionPoint) ' Establish the Event Hook. If Not (Me.connectionPoint Is Nothing) Then Me.connectionPoint.Advise(Me, cookie) End If ' Very important to call ReleaseComObject() on any referenced COM object! Do While (Marshal.ReleaseComObject(icpc) > 0) Loop icpc = Nothing Catch ex As Exception ' Display any errors to user. MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub ... Geht ist aber auch nicht so richtig schön. Gruß Andreas
------------------ Besten Dank Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
modeng Ehrenmitglied V.I.P. h.c.
Beiträge: 7061 Registriert: 10.12.2003
|
erstellt am: 19. Okt. 2004 11:41 <-- editieren / zitieren --> Unities abgeben: Nur für progiAS
soweit so gut aber muss du das denn mit VB.NET machen? wenn's mit VB6 funzt dann mach' s doch mit VB6 -- dem Anwender ist das schlussendlich egal -- selbst wenn im Hintergrund eine Dampfmaschine laeuft ;-)) Klaus [Diese Nachricht wurde von modeng am 19. Okt. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
progi Mitglied Programmierer
Beiträge: 74 Registriert: 18.08.2004 VB.net SE 16
|
erstellt am: 19. Okt. 2004 11:53 <-- editieren / zitieren --> Unities abgeben: Nur für progiAS
Die Neuentwicklungen werden mit VB.Net gemacht. Die alte Dampfmaschine vb hat schon Vorteile: - schneller in der Laufzeit - schneller in der Entwicklung Nachteile: - Vererbung geht nicht, nur die Schnittstellen-Vererbung, kann man mit leben, denke ich. - ein paar API-Funktionen wie, form.topmost gibt es in vb.net freihaus. So mein Kenntnisstand. Gruß Andreas
------------------ Besten Dank Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
modeng Ehrenmitglied V.I.P. h.c.
Beiträge: 7061 Registriert: 10.12.2003
|
erstellt am: 19. Okt. 2004 12:33 <-- editieren / zitieren --> Unities abgeben: Nur für progiAS
falls das nicht geaendert wurde ist ein ziemlicher Nachteil: keine Korrektur von Fehlern 'on-the-fly', jeder Aenderung bedingt Neukompile. Ansonsten ist VB.NET mehr JAVA und C(++) denn VB .. its' MicroSoft after all Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
progi Mitglied Programmierer
Beiträge: 74 Registriert: 18.08.2004 VB.net SE 16
|
erstellt am: 19. Okt. 2004 14:00 <-- editieren / zitieren --> Unities abgeben: Nur für progiAS
In 2005er solls alles wieder "normal" sein in VB.Net, also während des Degugen weiter entwickeln. Ich durft letztens eine Java Application updaten, also ich war irgendwie verwöhnt von MS, die Entwicklungsumgebungen sind schon besser, die Komptibilitätsproblem kannte ich auch nicht so in VB. VB bzw. VB.net find ich schon ganz gut. SE ist auch nicht schlecht, man muß vorher nur ProE programmiert haben. ------------------ Besten Dank Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
modeng Ehrenmitglied V.I.P. h.c.
Beiträge: 7061 Registriert: 10.12.2003
|
erstellt am: 19. Okt. 2004 16:21 <-- editieren / zitieren --> Unities abgeben: Nur für progiAS
[...] Ich durfte letztens eine Java Application updaten, also ich war irgendwie verwöhnt von MS [...] kommt auf die Entwicklungsumgebung an ... Bei JAVA aergert mich eigentlich nur das 'Deprecated' ansonsten gab's eigentlich keine Probleme ausser man hat ohne zu wissen die MS-jars benutzt ... Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
progi Mitglied Programmierer
Beiträge: 74 Registriert: 18.08.2004 VB.net SE 16
|
erstellt am: 19. Okt. 2004 16:35 <-- editieren / zitieren --> Unities abgeben: Nur für progiAS
Das war ein Visual Cafe Projekt, die hatten fleißig die VisualCafe klassen benutzt. Im JBuilder & Co konnte diese nicht richtig oder gar nicht anzeigen. Der JBuilder konnte dann doch noch, jedoch war das What you see What you get feeling nicht gegeben, selbst nach kompletter Entfernung der VisualCafe-Klassen. Irgendwie war das ganze Projekt in VisualCafe "vernietet". Was mich beeindruckte war auch, daß JPane paßte nicht zum JTree (alles Swing von Sun) , mit einem einfachen Pane in dem Jtree gings dann, sehr merkwürdig! Mit der MS Virtuel Maschine kam dann ein anderes Ergebnis (besseres) zu Stande als mit der Sun, obwohl Sun-Standard Komponenten, die Begeisterung sackte doch so auf 0,.. Bei MS sehe ich in einem Register nicht die anderen Registerblätter, beim Blättern der Register, oder habe Initialisierungsprobleme. Naja bin ja auch nicht im Internet mit VB unterwegs -). ------------------ Besten Dank Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |