VBA-Möglichkeiten erweitern?
Geizhals » Forum » Programmierung » VBA-Möglichkeiten erweitern? (9 Beiträge, 69 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
.
Re: VBA-Möglichkeiten erweitern?
11.11.2004, 19:26:39
> die VBA-Entwicklungsumgebung eines CAD-Programms zu erweitern?
... welches Programm hat denn eine solche ? Mir sind bis dato nur Programme von MS selber bekannt ..

> Ich habe gehört, dass man für CAD-Programme, die eine VBA-SDK haben, auch in
> VB Anwendungen, Plug-Ins usw. programmieren kann.
Du kannst z.B. in VB Anwendungen schreiben, die mit einer Instanz von Excel arbeiten. Sprich: Du kannst auf vorgefertigte Methoden zurückgreifen. Frag mal den Entity, der macht momentan grad sowas.

Aber ich möchte hier erstmal zwei Dinge klarer unterscheiden:
* Viele Programme bringen irgendwelche internen Erweiterungsschnittstellen mit sich. Meist sind dies irgendwelche Script Sprachen, die auf gewisse Befehle reagieren. MS bringt bei seinen Office Produkten VBA (Visual Basic for Applications) zum Einsatz.
* Eine andere Möglichkeit ist die Com - Interoperability zu nutzen. Beispielsweise kann man in VB ein Excel Objekt erzeugen und auf dieses Methoden anwenden, die dieses Excel Objekt hat.


> VBA-Umgebung des Programms eigene Klassen und Funktionsnamen hat.
Wie schon gesagt .. Was für eine VBA Umgebung. Die meisten Programme die ich kenne bringen irgendeine proprietäre Scriptsprache mit sich (z.b. Macromedia Flash mit seinem ActionScript).

Grundsätzlich gilt: Wenn du eine Applikation erweitern willst, tu dies mit der Scriptsprache die mitgeliefert wird.

THEORETISCH hast du auf jedes Objekt im ganzen Windows jederzeit vollen Zugriff. Aber was das an Programmieraufwand erfordert ist nicht mehr lustig und kommt praktisch sicherlich nicht in Frage.

GDI, ActiveX, OLE .. hmm ..
GDI: Graphics Device Interface (glaub ich): Das GDI steht zwischen einem Anwendungsprogramm und dem Anzeigegerät. Sprich: Dein Programm sagt: Zeichne einen Button, und damit dieser dargestellt wird, darum kümmert sich GDI.
ActiveX: bezeichnet vorgefertigte Steuerelemente, die auch einen tiefen Eingriff ins System zulassen .. Wahrscheinlich auch nicht das was du suchst ;)
OLE: Object Linking and Embedding: Bezeichnet nix anderes als das hin und herschieben von daten über die Zwischenablage :) Stammt noch aus Windows - Urzeiten glaub ich :)


Sag am besten konkret um welches Programm es geht, und was du machen willst - evtl. findet sich eine Lösung auf diesem Weg ..


Erst wenn der letzte Programmierer eingesperrt, das letzte Programm verwirklicht und die letzte Idee patentiert ist, werdet ihr merken, dass Anwälte nicht programmieren können.
Spezielle User
Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
..
Re(2): VBA-Möglichkeiten erweitern?
11.11.2004, 19:56:53
Ah, super dass du mir antwortest, ich hab mir deine Postings schon durchgelesen und du hast echt Ahnung von der Materie und kannst mir am ehesten noch helfen.

Also: das Programm nennt sich TurboCAD (ich könnte dir eine Probeversion per ICQ oder so schicken).
AutoCAD hat übrigens auch eine VBA-Schnittstelle.

Wenn du es dir anschauen könntest, wärs glaub ich am besten, weil so drüber reden ist irgendwie schwer.
Jedenfalls hab ich gelesen, dass TurboCAD nicht nur mit der integrierten VBA-Umgebung programmierbar ist, sondern auch mittels Visual C++, Visual Basic usw. Von den ganzen Programmiersprachen würde ich am liebsten mit VB anfangen, weil das am leichtesten zu lernen ist, wenn man noch nie was mit Objektorientierter Programmierung gemacht hat. C++ ist mir für den Anfang echt zu schwer und alle .NET Sprachen funktionieren bei TurboCAD irgendwie nicht (Erfahrung anderer TC-User)

Was ich ganz konkret machen möchte:
Zuerst mal lernen, wie allgemeine Zeichenfunktionen (Linien per Mausklick erstellen, Kreise mittels geklicktem Mittelpunkt und geklicktem Radiuspunkt erstellen usw.) um die Materie zu verstehen, also mal grundlegend, welche Bibliotheken man da verwendet, welche API-Funktionen es da gibt, wie man die einbindet usw.

Ziel der ganzen Sache soll es sein, wiederkehrende Abläufe zu automatisieren. Also ich  will die Zeichenvorgänge, die ich beim Zeichnen einer Konstruktion mache, aufzeichnen und einen Button kreieren, mit dem ich diese Automation aufrufen kann. Damit das Ganze aber sinnvoll ist, müssen die Werte, mit denen ich die Zeichnung erstellt habe, in Variablen umgewandelt werden können, dazu möchte ich ein Dialogfeld, das beim Buttonklick aufgeht und den Benutzer nach den Variablen fragt.
Nach Eingabe der Variablenwerte soll das Programm die Zeichnung mit diesen neuen Maßen erstellen.

Dass das nicht einfach ist, weiß ich, aber ich brauche sowas ganz dringend, damit das ganze CAD-Programm für mich einen Sinn hat.
Ich könnte zwar jede Zeichnung in VBA "programmieren", dann könnte ich Variablen und eine Variablenabfrage per Dialogfeld programmieren, aber bei 200 verschiedenen Zeichnungen wird das aufwändig. Klar möchte ich aber mit sowas anfangen, um mal die grundlegenden Funktionen fürs Zeichnen usw. kennenzulernen.

Damit ich es aber bei 200 und mehr verschiedenen Zeichnungen leichter habe, möchte ich, dass ich diese Zeichnungen anstatt zu programmieren nur zeichnen brauche, ein Recorder das aufnimmt, ich die Masse, mit denen ich gezeichnet habe, in Variablen umwandeln und damit die Zeichnung in ein lauffähiges Makro verwandeln kann, das dieselbe Zeichnung mit beliebigen Längenmaßen erstellt.

Für weitere Hilfe bin ich sehr dankbar,
lg

Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
...
Re(3): VBA-Möglichkeiten erweitern?
11.11.2004, 23:36:26
hm dankeschön für die Information erstmal!
Für AutoCAD gibts eh ein Buch, wo das alles drinsteht. Ich arbeite aber mit TurboCAD (AutoCAD kann ich mir nicht leisten) und da gibts keine Objekte, die mit Acad... anfangen.
Ich hab mir schon gedacht, dass eigentlich das VBA von AutoCAD und das VBA von TurboCAD ja nicht so unterschiedlich sein können, immerhin ist ja beides VBA und beides hat mit CAD zu tun.
Die Klassen haben aber in TurboCAD andere Namen und auch die Objekte heissen anders. Zum Beispiel gibts nicht "ThisDrawing" sondern das heißt dann immer "Active Drawing".
Ich stell mal einen TurboCAD-Code hier rein, um es zu veranschaulichen:
--------------------------------------------------------------------------------
Sample 2: Edit three parameters (center, coordinate, and radius) of a selected circle.

‘File EDITCIRLE.TCM Edit two coordinates, X and Y, as well as radius R for a selected circle.

'Before running the macro, a circle must be selected.Public Sub EditCircle()

Dim App As Application

Dim ActDr As Drawing

Dim Grs As Graphics

Dim Gr As Graphic

Dim Vers As Vertices

Dim Ver As Vertex

Dim ObjSel As Selection

Dim NumSel As Long, i As Long

Dim GrSelType As String

    Set App = IMSIGX.Application    

    Set ActDr = App.ActiveDrawing  

Set ObjSel = ActDr.Selection ‘Define the selected entities.    
    NumSel = ObjSel.Count       If NumSel = 0 Then Exit Sub    For i = 0 To NumSel - 1        Set Gr = ObjSel.Item(i)
  GrSelType = Gr.Type        If GrSelType = "CIRCLE" Then ‘
Choose the entity of the Circle type.
            Set Vers = Gr.Vertices
            Set Ver = Vers.Item(0)
Dim XcOld#, YcOld#, Xr#, Yr#, ROld#
            XcOld = Ver.X
            YcOld = Ver.Y
            Set Ver = Vers.Item(1)

            Xr = Ver.X
            Yr = Ver.Y
            ROld = Sqr((Xr - XcOld) * (Xr - XcOld) + (Yr - YcOld) * (Yr - YcOld))

UserForm1.TextBox1.Text = CStr(XcOld)
            UserForm1.TextBox2.Text = CStr(YcOld)
            UserForm1.TextBox3.Text = CStr(ROld)
            UserForm1.Show
            Gr.Unselect

Dim XcNew#, YcNew#, RNew#
            XcNew = CDbl(UserForm1.TextBox1.Text)
            YcNew = CDbl(UserForm1.TextBox2.Text)
            RNew = CDbl(UserForm1.TextBox3.Text)

Dim Matr As Matrix ' A transformation matrix
Dim xScale#, yScale#, dx#, dy#
            xScale = RNew / ROld
            yScale = RNew / ROld
            dx = XcNew - XcOld
            dy = YcNew - YcOld
            Set Matr = Gr.Scale(xScale, yScale, 1)
            Set Matr = Gr.MoveRelative(dx, dy, 0)
            Gr.Select
        End If
    Next i
End Sub
--------------------------------------------------------------------------------

Wenn du dich mit AutoCAD-Programmierung gut auskennst, kannst du mir ja sicher, nachdem du den Code angesehen hast, sagen, wie unterschiedlich die Objekte und Klassen sind, oder ob man einen AutoCAD-VBA-Code einfach für TurboCAD umschreiben könnte.

Könnte es nicht eigentlich auch funktionieren, in Visual Basic einen Code wie deinen geposteten zu schreiben und die AutoCAD-Objektbibliotheken in das VB-Projekt einzubinden?
Läuft der Code dann aber in TurboCAD?
Oder geht das nur mit den TurboCAD-eigenen Objektbibliotheken?

Das Problem ist nämlich, über VBA für AutoCAD habe ich ein umfangreiches Buch mit zahlreichen Listings, die man ausprobieren könnte (wenn man AutoCAD hat...) aber für TurboCAD gibts so gut wie keine Dokumentation, die das einem Anfänger erklärt.

lg


Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung