Autor
|
Thema: VBA-Programmierung in TurboCAD (7441 mal gelesen)
|
ibruethsch Mitglied Bauingeniuer
Beiträge: 80 Registriert: 18.10.2006
|
erstellt am: 30. Jan. 2012 13:01 <-- editieren / zitieren --> Unities abgeben: Nur für jossie
Hallo Peter ich habe die .exe mit Win7 64 TC18 Prof getestet. Das Tabellenkonfigurationsfenster öffnet sich, aber in TC passiert nix. Wenn Du Deinen Sourcecode zur Verfügung stellst, kann man damit was anfangen. Gruß Bernd Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Leopoldi Mitglied Heimwerker i.R. www.max-mg.de
Beiträge: 1360 Registriert: 16.07.2009 Unter Win10-Pro 64Bit: (TC21)-TC2020 Pro Platinum
|
erstellt am: 31. Jan. 2012 14:43 <-- editieren / zitieren --> Unities abgeben: Nur für jossie
Hallo zusammen ich habe meine Beschreibung für Einsteiger aktualisiert. In VisualBasic 2010 Express* (was es ja kostenfrei gibt) wird direkt im Projektpfad unter ..\bin\debug eine .exe erzeugt. Was ich noch nicht weiss, wie man eine .dll - und dann noch TurboCad verträglich - erstellt. Ich habe die 2 Beispiele aus dem US-Forum erfolgreich übernommen: "ImportTextFile" und "CreateSurface" Beim "Projekt öffnen" die .sln Datei wählen. Beide Dateien sind aus älternen Versionen als 2010 und werden jedoch fehlerfrei importiert. Bei ImportTextFile muss TurboCad geöffnet sein, bei Create Surface nicht. Beispiele gibt es hier (nach Anmeldung?): http://forums.turbocad.com/index.php/topic,4013.0.html http://forums.turbocad.com/index.php/board,25.0.html mfg. Leopoldi * Wenn ich das richtig sehe: VisualBasic 2010 Express ist kostenfrei und kommerziell nutzbar Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Leopoldi Mitglied Heimwerker i.R. www.max-mg.de
Beiträge: 1360 Registriert: 16.07.2009
|
erstellt am: 31. Jan. 2012 18:59 <-- editieren / zitieren --> Unities abgeben: Nur für jossie
|
jossie Mitglied Astronom im Ruhestand
Beiträge: 360 Registriert: 21.03.2008 TC 21 Pro Platinum, Windows11 (64bit), 64GByte RAM, Intel i9, Nvidia Quadro P2000
|
erstellt am: 01. Feb. 2012 09:31 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen Leopoldi, super, tausend Dank für Deine Zusammenfassung, die nun genau das zur Verfügung stellt, was ich mit diesem Faden wollte, nämlich aufzuzeigen, wie man überhaupt ins Programmieren von TC reinkommt! Hoffentlich erreicht das auch die Wunschliste und wird in Zukunft in die TC-Dokumentation übernommen. Noch eine Kleinigkeit: Wie ich weiter oben im Faden erwähnt hatte, sollte man die WINDOWS SDK und :NET Framework ** VOR ** Visual Studio installieren. Nur so findet Visual Basic das, was es davon braucht. Man kann da sicher nachträglich noch etwas umbiegen, wenn man weiss, was ... Mich hat es jedenfalls einige Zeit gekostet, da drauf zu kommen. Beste Grüße Hermann-Josef Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Leopoldi Mitglied Heimwerker i.R. www.max-mg.de
Beiträge: 1360 Registriert: 16.07.2009
|
erstellt am: 01. Feb. 2012 09:51 <-- editieren / zitieren --> Unities abgeben: Nur für jossie
Hallo HJ bei meiner Installation von "Visual Basic 2010 Express" wurde gleich ein ganzes Paket an Zusätzen installiert; ein Installer?, NetFrameWork 4. u.a.. Jetzt fehlt ja nur noch eine Musterlösung zum Erstellen einer DLL. mfg. Leopoldi P.S.: Ich habe den ISO-File geladen und auf DVD gebrannt. Dann hat man alle Varianten. DVD einlegen und los gehts mit der Auswahl der Version. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PSblnkd Mitglied Dipl.-Ing.
Beiträge: 156 Registriert: 13.03.2009
|
erstellt am: 02. Feb. 2012 09:20 <-- editieren / zitieren --> Unities abgeben: Nur für jossie
@Bernd Unter der Annahme, dass Du die "Tabelle für TC.exe" meinst: Wie bereits in http://ww3.cad.de/foren/ubb/Forum229/HTML/000010.shtml - mein Beitrag vom 13.05.2011 erläutert, ist die Funktionalität auf die geordnete Auflistung von Objekten eines bestimmbaren Layers in der ComboBox des Tabellenkonfigurationsfensters beschränkt. Eine weitergehende Funktionalität ist (noch) nicht implementiert. In TC selbst sind keinerlei Aktionen zu sehen. Da aber offensichtlich weiterhin das Thema "Tabellengenerator" von Desinteresse seitens der TC-Gemeinde geprägt ist - Du vielleicht mal ausgenommen - bin ich immer noch unschlüssig, ob ich die Arbeit daran wieder aufnehmen soll. Ich hatte eigentlich gehofft, dass es nun doch vielleicht Hinweise auf die gewünschte Funktionalität, Bedien-Philosophie usw. geben würde - die Umsetzung, sprich Programmierung mache ich dann schon ... und über den Fortschrittsverlauf würde ich auch laufend berichten. @Leopoldi Zu Deiner Zusammenstellung zur SDK-Programmierung hatte ich schon Einiges kommentiert. So einfach, wie Du die DLLs behandelst, ist es leider nicht. Dazu hatte ich schon mehrfach geschrieben, u.a. auch in http://ww3.cad.de/foren/ubb/Forum229/HTML/000039.shtml. Zu AutoIt schreibts Du, dass (Zitat) "Mit AutoIt erstellte .exe-Dateien sehen kompiliert aus. Tatsächlich ist jedoch die .exe selbstentpackend. Das so entpackte Script läuft dann auf dem ebenfalls entpackten Interpreter." - Wo hast Du denn das her? - Soweit ich AutoIt verstanden habe, basieren die dort vorhandenen Funktionen auf dem Windows-API, d.h. die betreffenden Windows-API-Funktionen werden direkt angesprochen und wie beim MS-Studio-Compiler auch "zusammengebunden". Da bei AutoIt aber keinerlei "Überbau"-Bibliotheken gebraucht werden, ist die erzeugte EXE dann auch so klein. Natürlich kommt die Funktionalität von AutoIt bei Weitem nicht an die vom MS-Studio heran, so kann man z.B. - so weit ich weiß - keine DLL erzeugen. Grüsse aus Berlin PSblnkd [Diese Nachricht wurde von PSblnkd am 02. Feb. 2012 editiert.] [Diese Nachricht wurde von PSblnkd am 02. Feb. 2012 editiert.] [Diese Nachricht wurde von PSblnkd am 02. Feb. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
devo Mitglied Holzverarbeiter
Beiträge: 366 Registriert: 11.02.2010 dell Latitude E6410 i5, 4 GB Ram, Win 7 TC V6-V10,V16 US; V6,11,12,17-20 D
|
erstellt am: 02. Feb. 2012 11:25 <-- editieren / zitieren --> Unities abgeben: Nur für jossie
@PSblnkd "Mittels F7 ("Build") und Strg+F7 ("Compile") lässt sich ein Skript in eine ausführbare .exe Datei verpacken. Einen echten Compiler, der Skripte in Maschinensprache übersetzt, hat AutoIt aber nicht zu bieten - die ausführbaren Dateien bündeln den Script-Code mit dem Interpreter." Karsten Violka Fensterschrauber c´t 10/2008 S.153 c´t extra 02/2009 Programmieren S.98 gruss mike Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Leopoldi Mitglied Heimwerker i.R. www.max-mg.de
Beiträge: 1360 Registriert: 16.07.2009
|
erstellt am: 02. Feb. 2012 11:34 <-- editieren / zitieren --> Unities abgeben: Nur für jossie
|
ibruethsch Mitglied Bauingeniuer
Beiträge: 80 Registriert: 18.10.2006
|
erstellt am: 02. Feb. 2012 11:55 <-- editieren / zitieren --> Unities abgeben: Nur für jossie
Ich habe auf Anraten von Mike Kuhn das Skriptcenter mit VBS noch mal einen Test unterzogen. Bei einigen Anwendungen kommt es mir sehr auf die Geschwindigkeit an. Ich hatte mit VBSedit den Geschwindigkeits Test mit den 10.000 Strichen, aus dem VBSEdit Fenster gestartet. Da habe ich den Geschwindigkeitstest nach 2 min abgebrochen (d.h. für aufwändige Prozeduren ist diese Lösung unbrauchbar). Mike Kuhn wies aber darauf hin dass er im Skriptcenter die gleiche Aufgabe mit VBS in einer sehr kurzen Zeit bewerkstelligt hat. Dies kann ich nun bestätigen. In den Skriptcenter läuft die gleiche Aufgabe mit 4 s und ist somit genauso schnell wie die .dll. D.h. Lösung mit VBS ist durchaus akzeptabel. Mit VBS kann man mittels VBSedit in akzeptabler Programmierumgebung entwickeln und hat im Skriptcenter schnellen Zugriff zu diesen schnellen Routinen, Das Skriptcenter läuft unter Windows 7 64 Bit leider nur eingeschränkt. Die Funktion Autoload und open script file funktionieren nicht. Aber Skripte , die bereits unter WinXP eingebunden wurden, laufen. Gruß Bernd
[Diese Nachricht wurde von ibruethsch am 02. Feb. 2012 editiert.]
[Diese Nachricht wurde von ibruethsch am 02. Feb. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PSblnkd Mitglied Dipl.-Ing.
Beiträge: 156 Registriert: 13.03.2009
|
erstellt am: 04. Feb. 2012 11:28 <-- editieren / zitieren --> Unities abgeben: Nur für jossie
@devo @Leopoldi Den C't-Artikel von Karsten Violka kenne ich auch und das war der Anlass mich mit AutoIt zu beschäftigen. Allerdings bin ich mir in der Richtigkeit der zitierten Aussage nicht sicher - jedenfalls solange das nicht nur die reine Interpreter-Funktion des mit der Autoit3.exe unterstützten SciTE-Programms betrifft. Werden die *.au3-Quelltexte mit Aut2exe.exe compiliert, entstehen so kleine EXE-Dateien, dass dort unmöglich der Autoit3.exe-Interpreter drinstecken kann. Das jedenfalls induziert die oben zitierte Aussage. Ansonsten würde die erzeugte EXE auch nicht auf jedem x-beliebigen Windows-PC laufen, ohne dass dort AutoIt installiert ist. Da halte ich mich an die Aussage in der AutoIt-Hilfe (Zitat): "Skripte können mit Aut2Exe in selbstständig ausführbare Dateien kompiliert werden" und http://www.autoit.de/dokumentation/intro/compiler.htm. Eine selbständig ausführbare (EXE-)Datei ist im PC immer ein Maschinenprogramm. Wie die internen Abläufe dabei auch sind ist letztendlich egal - man kann das Programm in der EXE-Datei mit Doppelcklick starten und seine Funktionalität in Anspruch nehmen ohne zusätzlich Applikation dazu laufen lassen zu müssen (EXCEL, IE o.ä.). @Bernd Hast Du Deinen 10000-Linien-Test schon mal mit AutoIt gemacht? - Wie schnell oder langsam(?) ist das dort? Grüsse aus Berlin PSblnkd Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ibruethsch Mitglied Bauingeniuer
Beiträge: 80 Registriert: 18.10.2006
|
erstellt am: 04. Feb. 2012 13:07 <-- editieren / zitieren --> Unities abgeben: Nur für jossie
Die .vbs-Geschwindigkeit interessiert mich doch detaillierter. Es scheint so, dass David Bell im Scriptcenter eine Verbindung zur COM-Schnittstelle innerhalb des dort aufgerufenen Internetexplorer hergestellt hat. Aber verstehen oder analysieren kann ich das nicht. Also, wenn man die .vbs im Scriptcenter eingebunden hat, dauert es 4 sekunden. Wenn man hingegen die .vbs mittels "open script File" öffnet, werden wohl andere Wege beschritten und dass Gleiche dauert 8 Minuten. Es scheint mir daher sinnvoll, diese Verbindung im Scriptcenter genauer zu untersuchen, da ja auch in AutoIT IE-Objecte adressierbar sind. Vielleicht kann man in AotoIT ja eine solche Verbindung herstellen, die dann auch sauschnell ist. @Peter mit AutoIT : 8 Minuten siehe http://forums.turbocad.com/index.php?action=profile;u=76;sa=showPosts Scriptcenter: in Win7-64 bit läuft das nicht wie unter WinXP gewohnt. In palette.html und AutoScriptIndex.vbs ------------------------------------------------------------- Sub OpenFile dim ObjFSO, InitFSO Set ObjFSO = CreateObject("UserAccounts.CommonDialog") ObjFSO.Filter = "HTML Pages|*.htm*|VBScripts|*.vbs|All Files|*.*" if left(document.location, 8) = "file:///" and right(document.location, 12) = "palette.html" then ObjFSO.InitialDir = replace(unescape(mid(document.location, 9, len(document.location) - 20)), "/", "\") & "\VBScripts" end if InitFSO = ObjFSO.ShowOpen document.location = ObjFSO.FileName End Sub ----------------------------------------------------------------- austauschen gegen: ----------------------------------------------------------------------- Sub OpenFile dim ObjFSO dim InitFSO Set ObjFSO=CreateObject("MSComDlg.CommonDialog.1") const cdlCancel = 32755 const cdlOFNHideReadOnly = 4 const cdlOFNAllowMultiselect = 512 const cdlOFNFileMustExist = 4096 Const cdlOFNExplorer = 524288 ObjFSO.Flags = cdlOFNHideReadOnly + cdlOFNAllowMultiselect + cdlOFNExplorer + cdlOFNFileMustExist ObjFSO.Filter = "HTML Pages|*.htm*|VBScripts|*.vbs|All Files|*.*" objFSO.FilterIndex = 1 objFSO.InitDir = "" objFSO.maxfilesize=8000 '25 'dim ObjFSO, InitFSO 'Set ObjFSO = CreateObject("UserAccounts.CommonDialog") 'ObjFSO.Filter = "HTML Pages|*.htm*|VBScripts|*.vbs|All Files|*.*" if left(document.location, 8) = "file:///" and right(document.location, 12) = "palette.html" then ObjFSO.InitDir = replace(unescape(mid(document.location, 9, len(document.location) - 20)), "/", "\") & "\VBScripts" end if InitFSO = ObjFSO.ShowOpen document.location = ObjFSO.FileName End Sub -------------------------------------------------------------------------- Dann läuft es wieder einigermaßen. D.h. "open script file" funktioniert, aber die Autoload-funktion funktioniert weietrhin nicht. Gruß Bernd
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
devo Mitglied Holzverarbeiter
Beiträge: 366 Registriert: 11.02.2010 dell Latitude E6410 i5, 4 GB Ram, Win 7 TC V6-V10,V16 US; V6,11,12,17-20 D
|
erstellt am: 04. Feb. 2012 14:36 <-- editieren / zitieren --> Unities abgeben: Nur für jossie
@Bernd @PSblnkd Die Schnittstelle gibts schon seit dem ScriptsPack von Softdev 2001. Sie befindet sich in der datei "StTC.htm" im Verzeichnis ...\Internet\VBScript\CommonScripts\. David Bell hat dafür nur den Autoloader gebaut und konnte wie er es in der Anleitung zu seinem ScriptCentre schreibt auch nicht erklären wies genau funktioniert. Es wäre sehr hilfreich wenn man darüber mal von Imsi eine genaue Beschreibung bzw. ein richtig kommentiertes Listing erhalten würde am besten mit der Anleitung wie man die StTC.htm auch mit anderen Skriptsprachen einsetzen kann. Was ich selbst überhaupt nicht nachvollziehen kann ist die Tatsache dass man trotz solcher Möglichkeiten einen schnarchlangsamen Makrorecorder auf die kunden loslässt ... gruss mike Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ibruethsch Mitglied Bauingeniuer
Beiträge: 80 Registriert: 18.10.2006
|
erstellt am: 06. Feb. 2012 01:11 <-- editieren / zitieren --> Unities abgeben: Nur für jossie
Ich hab nochmal ein paar Stunden in die Ergründung von RUBY gesteckt. Meine 10.000 Striche als Geschwindigkeits Test wurden in befriedigenden 4 s erledigt. (die 10000 Striche müssen rot sein und selectiert sein) RUBY ------------------------------------------------ require "Sketchup" def geschw_test ents = Sketchup.active_model.entities sel = Sketchup.active_model.selection count = sel.count i=0 for i in (0..count-1) # achtung for i in und ende mit end
gr=sel[i] sel[i].material = Color.new("Green") if sel[i].tc_object().color.to_s == "Color(255, 0, 0, 255)" end end ---------------------------------------------------- Das ganze Objektmodell scheint aus SketchUp zu kommen und in den Scripten im Verzeichnis \RubyEngine wird das Objektmodell von Turbocad auf das Objectmodell in Sketchup umgedichtet. Ruby hat eine andere Syntax. Mittels Win32.ole lässt sich eine Verbindung zu den Microsoft-COM Objekten herstellen ------------------------------------------- require 'win32ole' def test_excel # aus Rubyconsole Werte in Excel schreiben # Excel muß laufen # http://ruby-doc.org/stdlib-1.9.3/libdoc/win32ole/rdoc/WIN32OLE.html excel = WIN32OLE.connect('Excel.Application') excel.visible = true workbook = excel.Workbooks.Add(); worksheet = workbook.Worksheets(1); worksheet.Range("A1 1").value = ["North","South","East","West"]; worksheet.Range("A2:B2").value = [5.2, 10]; worksheet.Range("C2").value = 8; worksheet.Range("D2").value = 20; range = worksheet.Range("A1 2"); range.select chart = workbook.Charts.Add; #workbook.saved = true; #excel.ActiveWorkbook.Close(0); #excel.Quit(); end ------------------------------------------------------------ Eine Verbindung zum Turbocad-objectmodell mittels Win32ole konnte ich nicht herstellen. ----------------- require 'win32ole' def test_TC # aus Rubyconsole Linie in TC zeichnen # TC muß laufen TC = WIN32OLE.connect('TurboCAD.Application') ------------------------------------------- funktioniert nicht!!! Gruß Bernd
[Diese Nachricht wurde von ibruethsch am 06. Feb. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Leopoldi Mitglied Heimwerker i.R. www.max-mg.de
Beiträge: 1360 Registriert: 16.07.2009 Unter Win10-Pro 64Bit: (TC21)-TC2020 Pro Platinum
|
erstellt am: 06. Feb. 2012 10:43 <-- editieren / zitieren --> Unities abgeben: Nur für jossie
|
jossie Mitglied Astronom im Ruhestand
Beiträge: 360 Registriert: 21.03.2008
|
erstellt am: 09. Feb. 2012 09:59 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen Leopoldi, das würde ich sofort unterstützen, denn das ursprüngliche Ziel wurde ja schon vor einiger Zeit erreicht, nämlich aufzuzeigen, wie man ***IM PRINZIP*** in TC programmieren kann. Das ist in Deiner Zusammenfassung enthalten. Da die Diskussionen immer spezieller wurden, würde ich vorschlagen, den Titel des neuen Fadens dem jeweiligen Problem anzupassen, damit man diese Punkte im Forum auch leicht lokalisieren kann. Beste Grüße und noch einen schönen Tag Hermann-Josef Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |