| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
Autor
|
Thema: Events !? (1002 mal gelesen)
|
Jens S. Mitglied Dipl.-Ing.

 Beiträge: 55 Registriert: 23.02.2005
|
erstellt am: 24. Mrz. 2005 11:25 <-- editieren / zitieren --> Unities abgeben:         
Moin Jungs + Mädels, Wenn ich versuche eine Event-Steuerung in VB6 (API-Progammierung) einzubinden (zu deklarieren), dann bekomme ich immer folgenden Fehler: Dim WithEvents msrcPartDoc As SldWorks.PartDoc Fehler Meldung: Fehler beim Kompilieren! Nur in ObjektModul zulässig! Da ich noch nicht sehr lange Api-mässig dabei bin, wäre ich über eine Interpretation der Fehlermeldung dankbar :-) LG JENS PS: An Alle schonmal: Frohe Ostern! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kalle Mitglied Student
  
 Beiträge: 706 Registriert: 14.04.2002
|
erstellt am: 24. Mrz. 2005 13:56 <-- editieren / zitieren --> Unities abgeben:          Nur für Jens S.
Aheu Jens, das ist auch eine Sache, die ich nicht so ganz verstehe, aber pack deine Deklaration in ein Formular und dann geht's. Musst dann aber auch die Prozeduren im Formular haben (glaub ich mich zu entsinnen). Bis dann, Kalle ------------------ ----------------------------------------- Es gibt immer mehr Lösungen als Probleme. [Diese Nachricht wurde von Kalle am 24. Mrz. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jens S. Mitglied Dipl.-Ing.

 Beiträge: 55 Registriert: 23.02.2005
|
erstellt am: 30. Mrz. 2005 14:02 <-- editieren / zitieren --> Unities abgeben:         
Hallo Kalle, das habe ich gemacht und es funktioniert. :-)Warum weiss ich auch nicht?! :-) Was das auch immer für die zukünftige Verwendung in einem Programm-Code bedeuten mag?! Wie sieht denn die Deklaration Dim WithEvents msrcPartDoc As swApp.PartDoc ohne die Verwendung von der SldWorks 200x Type Library aus? Da fängt er bei mir nämlich zu meckern an, wenn ich "As Object" sage... :-) Wird wohl am disem "blöden" WithEvents" liegen ... Lieben Gruß JENS Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kalle Mitglied Student
  
 Beiträge: 706 Registriert: 14.04.2002
|
erstellt am: 30. Mrz. 2005 14:22 <-- editieren / zitieren --> Unities abgeben:          Nur für Jens S.
Aheu Jens, ich vermute mal das geht überhaupt nicht, da in der Type Library festgelegt ist, dass das PartDoc überhaupt Events abfeuern kann. Dein Programm weiss ja sonst nicht worauf es überhaupt warten soll. Hab aber auch noch keine 'wissenschaftliche' Erklärung dazu gelesen, sondern das ist das, was ich mir grade selbst überlegt hab  Bis dann, Kalle ------------------ ----------------------------------------- Es gibt immer mehr Lösungen als Probleme. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jens S. Mitglied Dipl.-Ing.

 Beiträge: 55 Registriert: 23.02.2005
|
erstellt am: 30. Mrz. 2005 14:37 <-- editieren / zitieren --> Unities abgeben:         
Hi, danke für die Info! :-) Ist es denn gundsätzlich "besser" oder "schlechter" in einem externen (kein Makro) VB6-Tool die Library einzubinden? Denn bis jetzt habe ich alles ohne diese Type-Library gemacht (AS Object usw usw) und müsste ja nun darauf zurück greifen wegen der "WithEvents"-Geschichte?! (Im übrigen sind ja viel VB6-API-Beispiele (extern) ohne diese Library, wird bestimmt einen Grund haben oder?) Oder ist es kein Problem einfach einen Verweis auf diese Library zusetzten und einfach alles neu zu deklarieren? Gruß JENS Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Müller Mitglied Masch. Ing. HTL / Betriebsing. STV
   
 Beiträge: 1151 Registriert: 11.04.2001
|
erstellt am: 30. Mrz. 2005 16:22 <-- editieren / zitieren --> Unities abgeben:          Nur für Jens S.
Hi Jens. Ich denke mal, dass die "Formularlösung" funktioniert, weil ein Formular eine "Klasse" ist. Vermutlich könntest Du (ich hab's selber noch nicht versucht) auch eine eigene Klasse definieren und da dann mit WithEvent arbeiten. So hat offenbar jeden SWX-Macro eine Klasse "SolidWorks Objekte" worin man mit den Events arbeiten kann. Ob Du mit "late Binding" (as Object) oder "early Binding" arbeitest (z.B. as ModelDoc2) kannst Du (wie schon festgestellt) selbst entscheiden. Beides hat Vor- und Nachteile. Beim Programmieren arbeite ich eigentlich immer mit early Binding. Das hat den Vorteil, dass VB weiss, was es denn mit dem Objekt machen kann (Eigenschaften, Methoden). Dann ist es wesentlich einfacher die richtigen "Funktionen" zu finden (Ctrl-Space). ------------------ Gruss Andreas A+E Müller AG Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jens S. Mitglied Dipl.-Ing.

 Beiträge: 55 Registriert: 23.02.2005
|
erstellt am: 01. Apr. 2005 11:14 <-- editieren / zitieren --> Unities abgeben:         
|
Jens S. Mitglied Dipl.-Ing.

 Beiträge: 55 Registriert: 23.02.2005
|
erstellt am: 05. Apr. 2005 11:31 <-- editieren / zitieren --> Unities abgeben:         
Hallo Jungs, ich habe die Event-Steuerung mal nach Angaben von Kalle realisiert. Ich habe das Ganze in eine eigene Form gebracht, die ich "einfach" initialisiere. Jedoch bekomme ich diese Form trotz "UNLOAD" nicht mehr abgeschaltet und mein Modul (VB6-Prog.) empfängt weiterhin lustig Events des Typs PartDoc :-) Wie kann ich das Biest denn zum schweigen bringen? Zudem musste ich die Form unsichtbar "machen" (visible = false)! Also, so richtig gefällt mir das noch nicht! Mir scheint das nicht ganz so fachgerecht zusein. LG JENS Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Müller Mitglied Masch. Ing. HTL / Betriebsing. STV
   
 Beiträge: 1151 Registriert: 11.04.2001
|
erstellt am: 05. Apr. 2005 12:57 <-- editieren / zitieren --> Unities abgeben:          Nur für Jens S.
|
Jens S. Mitglied Dipl.-Ing.

 Beiträge: 55 Registriert: 23.02.2005
|
erstellt am: 05. Apr. 2005 13:24 <-- editieren / zitieren --> Unities abgeben:         
|
Jens S. Mitglied Dipl.-Ing.

 Beiträge: 55 Registriert: 23.02.2005
|
erstellt am: 06. Apr. 2005 09:31 <-- editieren / zitieren --> Unities abgeben:         
Moin, Moin, also diese Event-Steuerung bringt mich nochmal ins Grab! Nun habe ich folgendes Problem (was aber nicht immer auftritt): Wenn ich ein Event des Typs PartDoc auslöse und eine "Mitteilung" an mein VB6-Prog. gechickt wird, dann leite ich damit die Abarbeitung eines Anweisungsblockes ein. Z.b. Private Function msrcPartDoc_NewSelectionNotify() As Long ArtderComponente End Function Private Sub ArtderComponente() Anweisung1 Msgbox("Blabla") Anweisung2 Anweisung2 End Sub Das Problem ist nun folgendes: Bestätige ich die MsgBOX nicht innerhalb einer gewissen Zeit (mir scheint es jedenfall so), so bekomme ich eine "Fehlermeldung" und zwar mit dem Inhalt: SERVER IST AUSGELASTET! Dieser Vorgang kann nicht ausgeführt werden, da das Programm XX(meins) nicht reagiert. Klicken Sie auf "Wechseln zu" um das Problem zu beheben. Dann kann ich in der Nachrichtbox der "Fehlermeldung" auf Wechseln zu oder Wiederholen klicken ... Hat jemand eine Ahnung, was da schief läuft? Gruß JENS Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PASCAM Mitglied Diplom Informatiker

 Beiträge: 67 Registriert: 25.11.2002
|
erstellt am: 06. Apr. 2005 10:59 <-- editieren / zitieren --> Unities abgeben:          Nur für Jens S.
Hallo Jens, Das ist kein Fehler, sondern so gewollt, unbd zwar vom Betriebssystem. Foglender Hintergrund: SWX ruft Dein VB6_programm, wohl als EXE (Out-Of-Process). Dein VB6-Programm braucht eine Zeit und wartet dann mit der MsgBox. Aus Sicht von SWX laeuft Dein VB6-Programm noch und muss warten. Da die Kommunikation mittels COM stattfindet, ueberprueft das Betriebssystem, ob es die Verbindung noch gibt. Nach einer gewissen Zeit zeigt der Aufrufer (SWX ) diese Meldung an, da dieser ja auf die Antwort wartet. Loesungen: - Nur kurze Bearbeitungen - Realisierung als DLL (geht auch mit VB6) - die eigentliche Bearbeitung in einem eigen Thread ablaufen lassen (einiges an Programmieraufwand) - Die Sache mit VBA realisieren (quasi als Dll) Hoffe, ich habe Dir ein wenig weitergeholfen. Gruss, Ralph ------------------ PASCAM Ralph Müller Softwareentwicklung Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jens S. Mitglied Dipl.-Ing.

 Beiträge: 55 Registriert: 23.02.2005
|
erstellt am: 06. Apr. 2005 11:04 <-- editieren / zitieren --> Unities abgeben:         
Hallo PASCAM, vielen Dank für die ausführliche Erklärung! Jetzt weiss ich zumindest, woran es liegt. Da ich noch relativ unerfahren mit VB bin, muss ich erst mal deine Tipps analysieren und verstehen, was damt gemeint ist. Gruß JENS Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jens S. Mitglied Dipl.-Ing.

 Beiträge: 55 Registriert: 23.02.2005
|
erstellt am: 06. Apr. 2005 12:48 <-- editieren / zitieren --> Unities abgeben:         
Hallo Leuts, hallo PASCAM hat für mich einer von euch mal eine kurze Aufklärung über die Nutzung einer .DLL? Ich denke, dass das etwas mit einer direkten Einbindung in SldWorks zutun haben muss?! LG JENS PS: Jeden Tag was Neues - echt schlimm ... :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PASCAM Mitglied Diplom Informatiker

 Beiträge: 67 Registriert: 25.11.2002
|
erstellt am: 06. Apr. 2005 13:10 <-- editieren / zitieren --> Unities abgeben:          Nur für Jens S.
|