Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  AutoCAD und VB6

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  AutoCAD und VB6 (2590 mal gelesen)
Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


Sehen Sie sich das Profil von Dirk.B an!   Senden Sie eine Private Message an Dirk.B  Schreiben Sie einen Gästebucheintrag für Dirk.B

Beiträge: 534
Registriert: 25.11.2003

erstellt am: 01. Mrz. 2007 21:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo zusammen!

Ich habe hier mal ein kleineres VBA - Programm und möchte nun probieren, dieses aus VB6 zu starten / nutzen.
Kann mir da jemand helfen und zeigen, wo etwas wie geändert werden muß?

Vielen Dank im voraus.

Modul:

Code:

Sub User_Dialog()
    Falzleiste.Show
End Sub

Formular:

Code:

Const pi = 3.14159  'Festlegung der Konstanten PI = 3,14159

Function dtr(a As Double) As Double
    dtr = (a / 180) * pi
    'Festlegung der Winkelfunktion
End Function

Private Sub cmd1_Click()

'Festlegung der Variablen
Dim Prompt1 As String
Dim P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15 As Variant
Dim Point(23) As Double
Dim Point1(20) As Double
Dim XL, YL As Integer
Dim pline As AcadPolyline
Dim pline1 As AcadPolyline
Dim nHatch As AcadHatch
Dim nHatch1 As AcadHatch
Dim HObjs(0) As AcadEntity
Dim HObjs1(0) As AcadEntity
Dim scal1 As Double
Dim wink1 As Double
Dim schr1 As Variant

If (tbo1.Value = "" Or tbo2.Value = "") Then GoTo MyErrorHandler

Falzleiste.Hide      'Blendet die Dialogbox aus, löscht sie aber nicht aus dem Speicher

Prompt1 = vbCrLf & "Einfügepunkt:"
P0 = ThisDrawing.Utility.GetPoint(, Prompt1) 'Einfügepunkt

On Local Error Resume Next  'Fehlerübersprung

'Werte einzelnen Variablen zu ordnen
XL = tbo1.Value    'Materialstärke
YL = tbo2.Value    'Höhe der Falzleisten
scal1 = tbo3.Value
wink1 = tbo4.Value
schr1 = cbo3.Value

'Koordinatenfestlegung über Variablen
P1 = ThisDrawing.Utility.PolarPoint(P0, dtr(90#), YL - 5)
P2 = ThisDrawing.Utility.PolarPoint(P1, dtr(180#), XL)
P3 = ThisDrawing.Utility.PolarPoint(P2, dtr(270#), YL - 10)
P4 = ThisDrawing.Utility.PolarPoint(P3, dtr(0#), XL / 2)
P5 = ThisDrawing.Utility.PolarPoint(P4, dtr(270#), 7)
P6 = ThisDrawing.Utility.PolarPoint(P5, dtr(270#), 3)
P7 = ThisDrawing.Utility.PolarPoint(P6, dtr(0#), 3)
P8 = ThisDrawing.Utility.PolarPoint(P7, dtr(0#), (XL / 2) - 3)
P9 = ThisDrawing.Utility.PolarPoint(P8, dtr(270#), YL - 10)
P10 = ThisDrawing.Utility.PolarPoint(P9, dtr(180#), XL)
P11 = ThisDrawing.Utility.PolarPoint(P10, dtr(90#), YL)
P12 = ThisDrawing.Utility.PolarPoint(P11, dtr(0#), (XL / 2) - 3)
P13 = ThisDrawing.Utility.PolarPoint(P12, dtr(0#), 3)
P14 = ThisDrawing.Utility.PolarPoint(P13, dtr(270#), 3)
P15 = ThisDrawing.Utility.PolarPoint(P14, dtr(270#), 7)

'Die einzelnen Punkte der Vertex Liste (Point) zufügen
Point(0) = P0(0): Point(1) = P0(1)
Point(3) = P1(0): Point(4) = P1(1)
Point(6) = P2(0): Point(7) = P2(1)
Point(9) = P3(0): Point(10) = P3(1)
Point(12) = P4(0): Point(13) = P4(1)
Point(15) = P5(0): Point(16) = P5(1)
Point(18) = P7(0): Point(19) = P7(1)
Point(21) = P8(0): Point(22) = P8(1)

'Polylinie zeichnen
Set pline = ThisDrawing.ModelSpace.AddPolyline(Point)
pline.Layer = cbo1.Value
pline.Closed = True

'Die einzelnen Punkte der Vertex Liste (Point1) zufügen
Point1(0) = P8(0): Point1(1) = P8(1)
Point1(3) = P9(0): Point1(4) = P9(1)
Point1(6) = P10(0): Point1(7) = P10(1)
Point1(9) = P11(0): Point1(10) = P11(1)
Point1(12) = P12(0): Point1(13) = P12(1)
Point1(15) = P14(0): Point1(16) = P14(1)
Point1(18) = P15(0): Point1(19) = P15(1)

'Polylinie zeichnen
Set pline1 = ThisDrawing.ModelSpace.AddPolyline(Point1)
pline1.Layer = cbo1.Value
pline1.Closed = True

'Schraffurdefinition
Set nHatch = ThisDrawing.ModelSpace.AddHatch(0, schr1, True)
Set HObjs(0) = pline
nHatch.AppendOuterLoop (HObjs)
nHatch.Layer = cbo2.Text
nHatch.PatternAngle = ThisDrawing.Utility.AngleToReal(wink1, acDegrees)
nHatch.PatternScale = scal1
nHatch.Evaluate
nHatch.color = acCyan
ThisDrawing.Regen True

'Schraffurdefinition
Set nHatch1 = ThisDrawing.ModelSpace.AddHatch(0, schr1, True)
Set HObjs1(0) = pline1
nHatch1.AppendOuterLoop (HObjs1)
nHatch1.Layer = cbo2.Text
nHatch1.PatternAngle = ThisDrawing.Utility.AngleToReal(wink1, acDegrees)
nHatch1.PatternScale = scal1
nHatch1.Evaluate
nHatch1.color = acCyan
ThisDrawing.Regen True

    Exit Sub
MyErrorHandler:
    MsgBox "Bitte geben Sie entsprechende Werte ein", 64, "Hinweis"

   
End Sub

Private Sub tbo1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Erlaubt = "0123456789.," & Chr$(8)
zeichen = Chr$(KeyAscii)
If InStr(1, Erlaubt, zeichen) = 0 Then
KeyAscii = 0
End If
End Sub

Private Sub tbo1_Change()
    tbo1.Text = Replace(tbo1.Text, ".", ",")
End Sub

Private Sub tbo2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Erlaubt = "0123456789.," & Chr$(8)
zeichen = Chr$(KeyAscii)
If InStr(1, Erlaubt, zeichen) = 0 Then
KeyAscii = 0
End If
End Sub

Private Sub tbo2_Change()
    tbo2.Text = Replace(tbo2.Text, ".", ",")
End Sub

Private Sub tbo3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Erlaubt = "0123456789.," & Chr$(8)
zeichen = Chr$(KeyAscii)
If InStr(1, Erlaubt, zeichen) = 0 Then
KeyAscii = 0
End If
End Sub

Private Sub tbo3_Change()
    tbo3.Text = Replace(tbo3.Text, ".", ",")
End Sub

Private Sub tbo4_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Erlaubt = "0123456789.," & Chr$(8)
zeichen = Chr$(KeyAscii)
If InStr(1, Erlaubt, zeichen) = 0 Then
KeyAscii = 0
End If
End Sub

Private Sub tbo4_Change()
    tbo4.Text = Replace(tbo4.Text, ".", ",")
End Sub
Private Sub cbo1_Change()
    Dim PickLayer As String
    Dim NewLayer As AcadLayer
    PickLayer = cbo1.Text
    Set NewLayer = ThisDrawing.Layers(PickLayer)
End Sub
Private Sub UserForm_Initialize()

Dim nLay(0 To 1) As AcadLayer
Set nLay(0) = ThisDrawing.Layers.Add("Falzleiste")
Set nLay(1) = ThisDrawing.Layers.Add("Falzleistenschraffur")
   
    Dim entry As AcadLayer
    For Each entry In ThisDrawing.Layers
        cbo1.AddItem entry.Name
        cbo2.AddItem entry.Name
    Next
 
    cbo1.Value = "Falzleiste"
    cbo2.Value = "Falzleistenschraffur"
    cbo3.Value = "Ansi31"
   
    With cbo3
        .AddItem ("Angle")
        .AddItem ("Ansi31")
        .AddItem ("Ansi32")
        .AddItem ("Ansi33")
        .AddItem ("Ansi34")
        .AddItem ("Ansi35")
        .AddItem ("Ansi36")
        .AddItem ("Ansi37")
        .AddItem ("Ansi38")
    End With
End Sub

Private Sub cmd2_click()
    End
End Sub


Gruß

Dirk

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

startrek
Moderator
Architekt


Sehen Sie sich das Profil von startrek an!   Senden Sie eine Private Message an startrek  Schreiben Sie einen Gästebucheintrag für startrek

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 02. Mrz. 2007 01:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Dirk.B 10 Unities + Antwort hilfreich

Hallo Dirk,

hab's nur überflogen erstmal, die generelle Frage die ich mir stelle,
ist, wozu _diesen_ Code in VB?
Ich mein, ausführbar ist der nur mit Acad, bei jedem PC ohne Acad schmiert die exe ab, was steht also gegen das 'A' hintendran?;-)

Aber okay - ist ja nur ne Trockenübung, 's geht ja um's Prinzip ...

also general musst du in VB so drangehen, als wenn du extern auf Acad zugreifst (zB wie auch aus Excel heraus),
faktisch gehört erstmal die Application (Acad) selber in ein Object.

Code:

dim objAcad as Object
set objAcad=(Get)(CreateObject).("acad.appli xxx")


Die genaue Syntax zu o.g. egal ob early oder late Binding nimm aus der Suche, das Thema gab's häufig.

Dieses objAcad-Object musst du dann auch immer den applicationseigenen Methoden/Befehlen voransetzen,
also zB statt:

Code:

P0 = ThisDrawing.Utility.GetPoint(, Prompt1) 'Einfügepunkt
P0 = objAcad.ThisDrawing.Utility.GetPoint(, Prompt1) 'Einfügepunkt

Und das konsequent im Code durchziehen.

Bin mir jetzt nicht sicher, aber vielleicht wäre es besser sich erstmal VB-intern vertraut zu machen, also mit den Basics selber.
Die Aufgabenstellung könnte z.B. lauten:
Schreibe ein kleines Programm, was Dir aus einer Radiusangabe (in einer Textbox) bei Klick auf einen Commandbutton den Umfang eines Kreises ermittelt ... völlig losgelöst, ohne Appli.
Ist was total banales, aber imho wichtig, dass man's zumindest einmal gemacht hat;-)

Schön zum Einstieg und auch für später: http://www.activevb.de/startseite/index.html

Sorry, dass ich jetzt nicht näher auf deinen Code eingegangen bin,
mir lagen eher die banalen Sachen am Herzen;-)

Grüsse Nancy

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Carsten1210
Mitglied
staatl. geprüfter Holztechniker


Sehen Sie sich das Profil von Carsten1210 an!   Senden Sie eine Private Message an Carsten1210  Schreiben Sie einen Gästebucheintrag für Carsten1210

Beiträge: 1357
Registriert: 24.07.2002

erstellt am: 02. Mrz. 2007 07:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Dirk.B 10 Unities + Antwort hilfreich

Hi Dirk,

Ich muss Nancy beipflichten, wozu willst du diesen Code von einer VB.EXE starten? Dann könntest du ja auch alles in VB machen. Dazu solltest du dir aber dann auch mal diesen Beitrag anschauen. Ich würde da aber komplett beim VBA bleiben.

OffTopic:
Mal so nebenbei, kann jeder bei euch die Falzleisten gestalten, wie er lustig ist?! Wir benutzen eine Standard-Falzleiste und dann ist gut. Die kann man auf Lager legen und dann nach Bedarf abnehmen und muss die nicht immer (Zeitaufwendig) nach Erstellerwunsch neuproduzieren.

Gruß, Carsten

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP



(Senior) Projektmanager:in Realisierung | Site Assessment (m/w/d)

FÜR UNSERE PROJEKTENTWICKLUNG ONSHORE WIND AM STANDORT AACHEN ODER KASSEL SUCHEN WIR:

(Senior) Projektmanager:in Realisierung | Site Assessment (m/w/d)

Wir sind das führende Netzwerk von Stadt­werken in Europa. Wir stehen für Unab­hängig­keit und neue Wege. Im Wett­bewerb bieten wir unseren Partnern Kompetenz in Erzeugung, Handel und Vertrieb. Wir bündeln Akti­vi­täten und gestalten Energie­märkte....

Anzeige ansehenProjektmanagement
Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


Sehen Sie sich das Profil von Dirk.B an!   Senden Sie eine Private Message an Dirk.B  Schreiben Sie einen Gästebucheintrag für Dirk.B

Beiträge: 534
Registriert: 25.11.2003

AutoCAD 2021/2022
CAD+T
HP ZBook 15 G4, 64-bit,
WIN 10 Pro

erstellt am: 07. Mrz. 2007 13:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Startrek!
Hallo Carsten!

Das mit VBA und oder VB6 interessiert mich einfach nur mal so,
nicht speziell zu diesem Code.
Mir geht es mehr darum ob es generell möglich wäre.

Vielen Dank für Eure Infos.

Gruß

Dirk

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz