| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Turbocad | | | | TURBOCAD TRAINING CENTER IN DER UMWELTTECHNIK | Projekt PAMOS und CAMOS (TurboCAD), ein Anwenderbericht
|
Autor
|
Thema: Recorderscript nach VBA importieren? (1439 mal gelesen)
|
defekt Mitglied fashion design
Beiträge: 50 Registriert: 03.05.2004
|
erstellt am: 13. Nov. 2004 16:48 <-- editieren / zitieren --> Unities abgeben:
Hallo! Ich hab da mal eine bisher unbeantwortete Frage: Im Word-internen VBA ist es möglich, einen mit dem Makrorecorder erstellten Code in die VBA-Umgebung zu importieren und dort ein VBA-Makro zu erstellen, das nach Variablen fragen kann. Man schreibt einfach einen Text, nimmt das Ganze dabei mit dem Makrorekorder auf, den entstandenen Code importiert man in die VBA-Umgebung, ändert die gewünschten Wörter in Variablen, deklariert sie und erstellt ein Dialogfeld, das den Benutzer nach Werten für diese Variablen fragt. Exakt dasselbe möchte ich in TurboCAD machen. Dafür müssen aber die Skriptsprachen von VBA und dem Makrorekorder gleich sein oder zumindest compatibel, damit man den Recordercode nicht aufwändig umschreiben muss, sondern nur Werte durch Variablen ersetzen muss. Geht das mit TurboCAD oder passen die Skriptsprachen nicht zusammen? Ich frage mich nämlich schon die ganze Zeit über, was ein Makrorecorder für einen Sinn haben soll, wenn ich damit immer nur ganz exakt die gleichen Abläufe machen kann, aber keine variierenden Werteeingaben möglich sind. Das schränkt doch die Möglichkeiten extrem ein? Muss ich wirklich jede Zeichnung, die variierende Werte verlangt, per Hand codieren? Das kann ja nicht sein, oder? Ich freue mich auf hilfreiche Antworten, danke! lg Andrea Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
H. Scheurich Mitglied
Beiträge: 161 Registriert: 21.06.2002
|
erstellt am: 15. Nov. 2004 20:54 <-- editieren / zitieren --> Unities abgeben: Nur für defekt
Hallo Andrea, so weit ich informiert bin, ist der Quelltext beider "Script-Sprachen" nicht austauschbar. Es besteht jedoch die Möglichkeit im Macrorecorder-Fenster, Quelltext von Hand hinzu zu fügen und "Konstanten" durch "Variablen" zu ersetzen. Es ist auch möglich Eingabewerte vom Benutzer abzufragen. Somit kann ein aufgezeichnetes Macro, im Macrorecorder-Fenster angepast werden. Als Beispiel habe ich das erstellen eines Rechteckes aufgezeichnet und anschließend die Eckpunkte des Rechteckes (Länge und Breite) durch Variablen ersetzt. Weiterhin wurden Abfragen für "Länge" und "Breite" eingefügt. Bezug für "Länge" und "Breite" ist der "Nullpunkt". Gruß, H. Scheurich.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RexDanni Moderator
Beiträge: 2017 Registriert: 06.06.2000 TurboCAD V2020/21 Pro Platinum German Workstation HP Z4 G6 Intel Xeon W2123 3,6GHz, 8,25 MB 16GB DDR4 SDRAM 256 HP T Turbo Drive PCle SSD Windows 10 pro 64 for Workstations NVIDIA Quadro M4000 8GB
|
erstellt am: 16. Nov. 2004 07:38 <-- editieren / zitieren --> Unities abgeben: Nur für defekt
Hallo, ich finde das schöne an dem neuen Macrorecorder ist, das man sehr schnell ein Script hat das sich dann weiter anpassen läßt. So spart man sich schon mal eine menge Zeit. Und wenn man nicht weis wie eine bestimmte Funktion aussieht, kann man diese einfach aufzeichnen und dann einfügen. Damit bekomm ich sogar mal was hin Servus hans jörg ------------------ www.cnc-modellbautechnik.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fcaspar Mitglied Konstrukteur
Beiträge: 347 Registriert: 09.06.2000
|
erstellt am: 16. Nov. 2004 08:17 <-- editieren / zitieren --> Unities abgeben: Nur für defekt
Hallo H. Scheurich, da mich dieses Thema auch brennend interessiert, ich aber im Scriptrecorder noch nicht so weit vorgedrungen war, daß ich auch Variablen einsetzen konnte, hab ich das Beispielmakro getestet. Nur beim Abspielen tut sich außer der Anzeige eines leeren Ausgabefensters nichts. Wo ist der Haken? Ich vermisse im Script den Befehl: Start "Einfügen|Linie|Rechteck" Ciao Frank
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
H. Scheurich Mitglied
Beiträge: 161 Registriert: 21.06.2002
|
erstellt am: 16. Nov. 2004 08:23 <-- editieren / zitieren --> Unities abgeben: Nur für defekt
|
fcaspar Mitglied Konstrukteur
Beiträge: 347 Registriert: 09.06.2000 Solidworks 2008 DBWorks R10 SP2.6
|
erstellt am: 18. Nov. 2004 13:51 <-- editieren / zitieren --> Unities abgeben: Nur für defekt
Ne tut mir leid, da wird kein Recheck gezeichnet beim Ausführen des Macros. Außerdem sollte ja eine bzw. zwei InputBox aufgehen, ich bekomme aber nur ein leeres Fenster mit nem OK-Button. Vielleicht muß irgendeine Einstellung gesetzt sein, oder ein bestimmter Layer vorhanden. Ich habs jedefalls in einer leeren Zeichnung getestet. Habs gefunden: Dein Stil Standard Linien existiert bei mir (und vermutlich bei einigen anderen nicht, da der voreingestellte Name "Normale Linien" ist. Dies geändert funktioniert das Macro. Ciao Frank [Diese Nachricht wurde von fcaspar am 18. Nov. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fcaspar Mitglied Konstrukteur
Beiträge: 347 Registriert: 09.06.2000
|
erstellt am: 18. Nov. 2004 18:08 <-- editieren / zitieren --> Unities abgeben: Nur für defekt
Um den Faden jetzt noch weiter zu spinnen und auch teilweise die Frage von Andrea zu beantworten: Dieses vorliegende Recorderscript kann in ein Modul im VBA kopiert werden, sub name() und end sub dazu und schon steht es als makro zur Verfügung. Stellt sich für mich die nächste Frage. Wie kann ich vorher den Startpunkt mit der Maus für das Rechteck festlegen, wenn GetMouseClick offensichtlich nicht funktioniert? Ciao Frank Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
H. Scheurich Mitglied
Beiträge: 161 Registriert: 21.06.2002
|
erstellt am: 19. Nov. 2004 16:44 <-- editieren / zitieren --> Unities abgeben: Nur für defekt
Hallo Frank, es ist auch möglich mit Hilfe von "Events" Koordinaten zu erfassen. Diese werden bei vielen Aktionen von TurboCAD gesendet. z.B. "imsiEventMouseDown" beim drücken der linken Maustaste Im "Event-Handler" wird eine Reaktion auf das "Event" vorgenommen. z.B. das auswerten der Koordinatenwerte. So ist es auch möglich, das du einen Startpunkt für das Rechteck mit der Maus festlegen kannst. Gruß, H. Scheurich. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fcaspar Mitglied Konstrukteur
Beiträge: 347 Registriert: 09.06.2000 Solidworks 2008 DBWorks R10 SP2.6
|
erstellt am: 20. Nov. 2004 13:29 <-- editieren / zitieren --> Unities abgeben: Nur für defekt
|
Gerhard.S Mitglied Bauingenieur
Beiträge: 18 Registriert: 08.12.2001
|
erstellt am: 22. Nov. 2004 19:41 <-- editieren / zitieren --> Unities abgeben: Nur für defekt
|
H. Scheurich Mitglied
Beiträge: 161 Registriert: 21.06.2002
|
erstellt am: 22. Nov. 2004 22:07 <-- editieren / zitieren --> Unities abgeben: Nur für defekt
Hallo, ja, jetzt weiß ich nicht recht wie ich sagen soll. Jedenfalls, das was wir vor haben, können wir, wie es sich zur Zeit darstellt, so nicht realisieren. Ziel war und ist es die Koordinaten eines Punktes, welcher mit der Maus gewählt wurde, im Programm zu erfassen. Als erstes funktioniert in der deutschen Version die Funktion "GetMouseClick" nicht. Meine nächsten Überlegungen gingen zur "Event" Auswertung. Diese funktioniert, wie ich nun festellen mußte, zur Koordinatenermittlung nur mit "imsiEventMouseDown". Die "Events", die ich zur Koordinatenermittlung einsetzen wollte, werden von der Application nicht gesendet, obwohl sie in der SDK Dokumentation aufgeführet sind. Ich habe es in C++, VB und VBA getestet und kam immer auf das selbe Ergebnis, keine "Events" "imsiEventPointSnapped" und "imsiEventPointPick". Das hat zur folge, das beim auswerten des "imsiEventMouseDown" Events nicht die "gefangenen Koordinaten" erfast werden, sondern die Koordinaten der aktuellen Mausposition. Das ist zwar ein kleiner Schritt vorwärts, aber nicht das, was wir brauchen. Ganz ehrlich gesagt, nach dem derzeitigen Erkenntnisstand und dem Zustand der deutschen TC10.1-Version schein es nicht möglich zu sein, "gefangene Punkte" programmtechnisch zu erfassen. Schade. Hoffentlich fällt euch noch etwas dazu ein. Ich habe heute eine Anfrage zum Thema an den IMSI-Support geschickt und hoffe das bald einen Antwort mit einer Lösung kommt. Nun zu der Frage wie die Events ausgewertet werden. (Hinweis: Das steht in der SDK-Dokumentation.!) Ja, ja ich weiß. Die SDK-Dokumentation. Es ist nicht alles so verständlich. Geht mir auch so. Ich werde es mal versuchen "rüber zu bringen". Eine Möglichkeit: Eine Klassen anlegen mit der Objekte zur Eventauswertung erstellt werden können. Nennen wir sie mal "clsTC". Diese Klasse oder besser die Objekte der Klasse kann man als "Eventhandler" bezeichnen. In der Klasse müssen Funktionen zur Reaktion auf die benötigten "Event" vorhanden sein. Die Name der Functionen sind von TC vorgegeben. In unserem Fall das Event "imsiEventMouseDown" und die dazu benötigte Ereignisbehandlungsroutine MouseDown(WhichDrawing As Drawing, WhichView As View, _ WhichWindow As Window, Button As ImsiMouseButton, _ Shift As Long, X As Long, Y As Long, Cancel As IMSI_BOOL) In dieser Routine die in VBA eine Function oder Procedure sein kann, werden Reaktionen auf das auftreten des Events "MouseDown" implementiert. Einfachste Auswertung, das anzeigen der "Screen-Werte" von X und Y. MsgBox "MouseDown Event: X = " & X & ", Y = " & Y Soweit zu der Klasse "clsTC". Es ist wirklich nur die einfachste Möglichkeit. In einem "richtigen" Programm muß etwas mehr getan werden. Nun zur Anwendungsklasse oder in VBA ein Modul (Frame geht auch). Gehen wir mal davon aus, das ein Modul in VBA von TC aufgerufen wird. Lassen wir auch das Modul beim Namen "Modul1". Hier benötigen wir ein Object (Instanz) der Klasse "clsTC" welches wir neu erstellen. Dim handler as new clsTC weiterhin eine Public-Variable zum aufnehmen der EreignisVerbindungs-ID Public idEventConnection as long In "Modul1" wird eine Procedure eingefügt in der das "Event" bei TC bestellt wird. Siehe Macro. Das ist keineswegs ein nutzbares Programm. Es soll nur zum erklären der Vorgehensweise helfen. Nun hoffe ich, das ich es verständlich erklären konnte, nichts wesentliches vergessen habe und bald neue, nutzbare Infos von IMSI kommen. Gruß, H. Scheurich.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
defekt Mitglied fashion design
Beiträge: 50 Registriert: 03.05.2004
|
erstellt am: 15. Jun. 2005 20:47 <-- editieren / zitieren --> Unities abgeben:
Hallo! Hat sich denn seit dieser Diskussion nichts Wesentliches getan? Ich warte schon ganz gespannt auf die Lösung dieses Problems, vor allem, weil mit der Möglichkeit, angeklickte Punkte an das Skript zu "übergeben", so vieles mehr möglich ist. Die Ausführungen weiter oben von Herrn Scheurich waren für mich nicht sehr verständlich, denn ich verstehe eigentlich nix von objektoriertierter Programmierung- ich komme mit den Events, Klassen, Modulen, Eigenschaften usw. nicht wirklich zurecht, da muss ich mich erst gründlich einarbeiten (mit Excel vielleicht, das hat auch ein bisschen was mit Zahlen und Rechnereien zu tun - die Hilfe und das Handbuch von TC sind da ja nicht sehr aufschlussreich, zum Lernen für einen Anfänger schon gar nicht geeignet). Es wäre super, wenns da ein Tutorial gäbe, wie man solch eine Klasse erstellt (so dass es auch komplette Dummies wie ich kapieren) oder wie das Problem sonst zu lösen geht. Ich bin da noch nicht sehr weit gekommen. Kann sich zum Beispiel jemand vorstellen, ob und wie Folgendes funktionieren könnte: Ich klicke der Reihe nach 5 Punkte an, weise ihnen die Namen A bis E zu, diese Punktnamen wurden vorher als Variablen im Skript deklariert, haben jetzt die Koordinaten der angeklickten 5 Punkte zugewiesen bekommen, und dann baut sich beim weiteren Ablauf des Makros eine Zeichnung auf, die diese angeklickten Punkte A-E als Referenzpunkte verwendet (zum Beispiel A als Nullpunkt, B als Scheitelpunkt, C als Mittelpunkt eines Kreises usw.) Klar könnte ich einen Kreis auch so zeichnen, ohne das Skript, aber es geht mir jetzt um eine komplexe Zeichnung, die nicht einfach aus einem Kreis besteht, und wo ich Referenzpunkte anklicken möchte, nach denen sich das Skript richtet. Wäre sowas mit TC in Verbindung mit VBA möglich? Wenn es diese Möglichkeit gäbe und mir ein Genie erklärt wie das geht, bin ich superglücklich... Viele Grüße Andrea Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|