| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: Reactor (1112 mal gelesen)
|
BerndE Mitglied Hochbautechniker
Beiträge: 557 Registriert: 05.07.2003
|
erstellt am: 17. Aug. 2003 03:23 <-- editieren / zitieren --> Unities abgeben:
Hi Forum, auf Grundlage diverser AutoCad-Sample-Dateien arbeite ich mich gerade in das Kapitel "reactor" ein. Folgender Beispiel-Code aus einer Hilfe Datei bereitet mir Probleme: 'Klassenmodul Public WithEvents PLine As AcadLWPolyline 'Modul Sub CreatePLineWithEvents() ' Dieses Beispiel erzeugt eine optimierte Polylinie. Dim points(0 To 9) As Double points(0) = 1: points(1) = 1 points(2) = 1: points(3) = 2 points(4) = 2: points(5) = 2 points(6) = 3: points(7) = 3 points(8) = 3: points(9) = 2 Set PLine = ThisDrawing.ModelSpace.AddLightWeightPolyline(points) PLine.Closed = True ThisDrawing.Application.ZoomAll End Sub Private Sub PLine_Modified (ByVal pObject As AutoCAD.IAcadObject) ' Dieses Ereignis wird ausgelöst, wenn die Größe der Polylinie geändert wird. ' Wenn die Polylinie gelöscht wird, wird das Modified-Ereignis weiterhin ' ausgelöst. Es wird daher das Fehlersteuerungsprogramm ' eingesetzt, um das Laden von Daten aus gelöschten Objekten zu vermeiden. On Error GoTo ERRORHANDLER MsgBox "The area of " & pObject.ObjectName & " is: " _ & pObject.Area Exit Sub ERRORHANDLER: MsgBox Err.Description End Sub Mein Problem sieht nun wie folgt aus: in der Zeile Private Sub PLine_Modified (ByVal pObject As AutoCAD.IAcadObject) wird ein pObject als AutoCAD.IAcadObject deklariert. VBA bietet mir allerdings .IAcadObject nicht zur Auswahl an. Woran mag das liegen? Muß ein bestimmter Verweis gesetzt werden?
------------------ Bernd Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daywa1k3r Ehrenmitglied V.I.P. h.c. Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002 Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570 Laptop: Alienware m17x Win7, Inventor2012
|
erstellt am: 18. Aug. 2003 10:40 <-- editieren / zitieren --> Unities abgeben: Nur für BerndE
|
BerndE Mitglied Hochbautechniker
Beiträge: 557 Registriert: 05.07.2003
|
erstellt am: 18. Aug. 2003 13:01 <-- editieren / zitieren --> Unities abgeben:
Tja, wenn es nur so einfach wäre.....ist nen activeX-Interface-Object...daher wohl das I ohne I funktioniert es aauch nicht. abgesehen davon, wäre es kurios, wenn in allen Büchern der gleiche Tippfehler wäre ------------------ Bernd Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daywa1k3r Ehrenmitglied V.I.P. h.c. Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002 Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570 Laptop: Alienware m17x Win7, Inventor2012
|
erstellt am: 18. Aug. 2003 15:00 <-- editieren / zitieren --> Unities abgeben: Nur für BerndE
Hi, Private Sub PLine_Modified (ByVal pObject As AutoCAD.IAcadObject)
gehört zur WithEvents, und daher muss sie auf alle Fälle im Klassenmodul stehen. Im normalen Modul ist sie nicht sichtbar. Das wäre der Grund 1 warum es nicht funktionieren kann. Und noch so 'ne Kleinigkeit: Du hast bestimmt gemerkt, dass mit PLine.Closed = True etwas nicht stimmt. Es kamen keine Eigenschaften nach dem du den Punkt eingegeben hast. Das kommt davon, dass dein KlassenModul nicht in dem Modul sichtbar ist. Wenn das KlassenModul zB. Klasse1 heisst, dann must du in dem Modul zB. Dim MeineKlasse As New Klasse1 erstellen. Danach kannst du mit MeineKlasse.PLine.Close = True weiter arbeiten. Bei mir stürzt das Code allerdings hier: Set PLine = ThisDrawing.ModelSpace.AddLightWeightPolyline(points) ab. Keine Datenbank heiss es. Und das ist wiederum AutoCad Kram. Ich bin froh, dass ich mich damit nicht befassen muss, aber die zwei Sachen oben must du beachten bevor du da weiter machst. ------------------ Grüße daywa1k3r Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoSiNiNo Mitglied Konstrukteur
Beiträge: 1126 Registriert: 09.10.2002 Acad 2011-deutsch, Express Tools 3ds Max 2010 Win 7-Professional HP Workstation Z400, 6GB GeForce GTX 470
|
erstellt am: 19. Aug. 2003 07:23 <-- editieren / zitieren --> Unities abgeben: Nur für BerndE
|
daywa1k3r Ehrenmitglied V.I.P. h.c. Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002
|
erstellt am: 19. Aug. 2003 18:57 <-- editieren / zitieren --> Unities abgeben: Nur für BerndE
Zitat: Original erstellt von RoSiNiNo: Also, ich hab mir das ganze jetzt doch einmal angesehen. Kopiere den Code einfach in "ThisDrawing", und zwar den Ganzen. Es sollte dann funktionieren.
Tut's nicht Ein Event muss in ein Klassenmodul rein ! Eigentlich interessiert mich AutoCad nicht sooo, aber ich bin gespannt wie das hier ausgeht ------------------ Grüße daywa1k3r Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
OlliBaer Mitglied Dipl. Ing. TGA
Beiträge: 19 Registriert: 06.08.2003
|
erstellt am: 19. Aug. 2003 19:03 <-- editieren / zitieren --> Unities abgeben: Nur für BerndE
|
daywa1k3r Ehrenmitglied V.I.P. h.c. Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002 Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570 Laptop: Alienware m17x Win7, Inventor2012
|
erstellt am: 19. Aug. 2003 20:10 <-- editieren / zitieren --> Unities abgeben: Nur für BerndE
Hm, bei mir nicht Es kommt immer der gleiche Fehler "Keine Datenbank". Aber ich muss gestehen, dass ich heute Früh das erste Mal mein AutoCad 2004 gestartet habe, und das startete schon mit irgend so einem Fehler. Also es liegt wahrscheinlich an meinen AutoCad. Ich freue mich, dass es bei euch funzt. Bei mir muss es nicht. Es war reine Neugier, da ich auch mit Events im Inventor zu kämpfen habe, und da scheinen die Regeln ein wenig anders zu sein. Bis dann... ------------------ Grüße daywa1k3r Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BerndE Mitglied Hochbautechniker
Beiträge: 557 Registriert: 05.07.2003
|
erstellt am: 21. Aug. 2003 00:12 <-- editieren / zitieren --> Unities abgeben:
Hi Forum, weil Ihr Euch alle so bemüht habt, will ich Euch kurz mitteilen: ES HAT ENDLICH GEKLAPPT <FREU> Die Lösung: 'Klassenmodul EventClassModule Option Explicit Public WithEvents PLine As AcadPolyline Private Sub PLine_Modified(ByVal pObject As AutoCAD.IAcadObject) On Error GoTo ERRORHANDLER MsgBox "The area of " & pObject.ObjectName & " is: " & pObject.Area Exit Sub ERRORHANDLER: MsgBox Err.Description End Sub 'Irgendein Modul (muß nicht ThisDrawing sein)
Option Explicit Dim PL As New EventClassModule Sub CreatePLineWithEvents() ' Dieses Beispiel erzeugt eine optimierte Polylinie. Dim points(0 To 14) As Double points(0) = 1: points(1) = 1: points(2) = 0 points(3) = 1: points(4) = 2: points(5) = 0 points(6) = 2: points(7) = 2: points(8) = 0 points(9) = 3: points(10) = 3: points(11) = 0 points(12) = 3: points(13) = 2: points(14) = 0 Set PL.PLine = ThisDrawing.ModelSpace.AddPolyline(points) PL.PLine.Closed = True End Sub
Mein Fehler, auf den mich daywa1k3r hinwies, war die fehlende Zeile: Dim PL As New EventClassModule, welche ich nach dem Hinweis als: Dim PL As EventClassModule deklarierte...also ohne NEW (wer lesen kann ist klar im Vorteil Nun denn...dieses Problem wäre also gelöst....aber wie es immer so ist, es wartet gleich das nächste: Nach Veränderung erscheint die MsgBox mit der Meldung, wie groß die Fläche vor der Veränderung war. Ich will aber wissen,wie groß sie geworden ist, nachdem sie verändert wurde. Nundenn, es würde ja keinen Spaß machen, wenn es alles so easy von der Hand ginge Nochmal vielen Dank Euch allen....U's sind unterwegs
------------------ Bernd Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoSiNiNo Mitglied Konstrukteur
Beiträge: 1126 Registriert: 09.10.2002 Acad 2011-deutsch, Express Tools 3ds Max 2010 Win 7-Professional HP Workstation Z400, 6GB GeForce GTX 470
|
erstellt am: 21. Aug. 2003 07:09 <-- editieren / zitieren --> Unities abgeben: Nur für BerndE
|
BerndE Mitglied Hochbautechniker
Beiträge: 557 Registriert: 05.07.2003
|
erstellt am: 21. Aug. 2003 12:12 <-- editieren / zitieren --> Unities abgeben:
|
harryk Mitglied Projektleiter
Beiträge: 124 Registriert: 19.08.2003 Revit 2019, ACMep2019, F360
|
erstellt am: 21. Aug. 2003 19:52 <-- editieren / zitieren --> Unities abgeben: Nur für BerndE
Hallo, hab das mal so mitverfolgt und ausprobiert, also bei mir zeigt er nach der Änderung die Fläche vor der Änderung an. Was mich genauso stört ist das wenn ich eine weitere Plinie erstelle, die alte keine Events mehr auslöst. Wenn man die Zeichnung wieder öffnet verhält sie sich genauso. Vielleicht steh ich jetzt aufm Schlauch aber für mich ergibt sich jetzt erstmal keine vernünftige Verwendung dafür oder habt Ihr ne Idee?? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BerndE Mitglied Hochbautechniker
Beiträge: 557 Registriert: 05.07.2003
|
erstellt am: 21. Aug. 2003 23:58 <-- editieren / zitieren --> Unities abgeben:
Da stand ich nen Moment auch erst mal auf dem Schlauch, aber es scheint so zu sein, dass das "Aktivieren des Ereignisses auf Objektebene" nur einmal funktioniert und dann nicht mehr. (wozu das auch gut sein soll?) Habe aber in der Hilfedatei noch das Kapitel "Verarbeitung von Ereignissen auf Dokumentenebene" gefunden. Das scheint mir eher das zu sein, was ich (und vermutlich auch du) von den events erwarten. ------------------ Bernd Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |