| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | PNY wird von NVIDIA zum Händler des Jahres gewählt - zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Globale Koordinate (1967 mal gelesen)
|
FiRePhoeniX Mitglied Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau
 
 Beiträge: 127 Registriert: 22.04.2007 AutoCad 2007
|
erstellt am: 11. Dez. 2008 15:47 <-- editieren / zitieren --> Unities abgeben:         
Hallo Forum, ich muss euch heute noch mal stören. Kämpfe schon seit ungefähr einer stunde an dem Problem und ich kriege es nicht hin. Erst mal vorab ich bin noch Anfänger. So, zu Problem: Hab zwei Buttons erstellt. In dem ersten wird der Einfügepunkt abgefragt. Mit dem Befehl: einfuegepk = ThisDrawing.Utility.GetPoint(, "Nullpunkt wählen") Daraus mach ich mir eine Variable: Dim TXEinfüge(0 To 2) As Double TXEinfüge(0) = einfuegepk(0) TXEinfüge(1) = einfuegepk(1) TXEinfüge(2) = 0 So, wenn man jetzt den anderen Button betätigt. Soll an dem Punkt ein Text erscheinen. Das mach ich mit dem Befehl: Dim Text As AcadText Dim TXhoehe As Double Dim TXinhalt As String Set Text = ThisDrawing.ModelSpace.AddText(TXinhalt, TXEinfüge, TXhoehe) Dies geht ja nicht weil das zwei unterschiedliche Module sind. Hab dann gelesen das man vor ein Module den befehl Public(variable) setzen soll um eine Globale Variable zu erhalten. Dies geht auch mit allen Variablen außer mit der Einfügevariable wo die Koordinaten gespeichert sind. Hab ich was falsch gemacht oder bin ich einfach nur Blöd ^^. Könntet ihr mir vielleicht erklären was ich falsch gemacht habe. Ich danke für jede antwort. Mit freundlichen Grüßen Firephoenix
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 11. Dez. 2008 16:38 <-- editieren / zitieren --> Unities abgeben:          Nur für FiRePhoeniX
Hallo Zitat: Original erstellt von FiRePhoeniX: Dies geht ja nicht weil das zwei unterschiedliche Module sind. Hab dann gelesen das man vor ein Module den befehl Public(variable) setzen soll um eine Globale Variable zu erhalten. Dies geht auch mit allen Variablen außer mit der Einfügevariable wo die Koordinaten gespeichert sind. Hab ich was falsch gemacht oder bin ich
Du musst dir erst mal darüber im klaren sein wie dein Projekt aufgebaut ist. Grundsätzlich solltest du immer mit der "Option explict" arbeiten. Damit gibts du an, das jede Variable vor dem Gebrauch deklariert werden muss. Eine Deklaration kann zum Beispiel mit DIM oder PUBLIC erfolgen. Das hängt davon ab wo du das machst und was du erreichen willst. Wenn du in deinem Projekt mehrere Module hast geht es wie folgt.
Code: '' Modul 1 '' gilt innerhalb des Moduls und steht vor der ersten Funktion DIM Modulvariable as string '' gilt im ganzen Projekt also in allen Funktionen und Prozeduren Public ProjektVariable as String ' Diese Funktion kann nur innerhalb des Moduls verwendet werden Function GibWas (EIngabe as String) as boolean ' Gilt nur in der Funktion / Sub Dim ProzedurVariable as String End function ' Diese Function kann aus allen Modulen verwendet werden Public Function GibWas2 (EIngabe as String) as boolean ' Gilt nur in der Funktion / Sub Dim ProzedurVariable as String End Function
Ich würde aber mit den globalen Variablen (Public) sehr vorsichtig umgehen. Dadurch entstehen sehr schnell Fehler wenn du diese aus Versehen irgendwo änderst. Ratsam ist, dass du an der Namensgebung sehen kannst ob die Variable/Funktion global oder lokal ist.Sieh auch mal http://ww3.cad.de/foren/ubb/Forum259/HTML/001059.shtml#000003 Wilfried Stelberg ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
FiRePhoeniX Mitglied Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau
 
 Beiträge: 127 Registriert: 22.04.2007
|
erstellt am: 12. Dez. 2008 08:52 <-- editieren / zitieren --> Unities abgeben:         
|
FiRePhoeniX Mitglied Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau
 
 Beiträge: 127 Registriert: 22.04.2007 AutoCad 2007
|
erstellt am: 15. Dez. 2008 13:15 <-- editieren / zitieren --> Unities abgeben:         
Hallo Forum, Ich hab mich zu früh gefreut. Hab es jetzt öfter getestet und musste feststellen das er die Globale variable nicht anerkennt. Hab eine variable mit dem Befehl: Public TXEinfüge As Double erstellt. So jetzt klickt man auf eine Button wo man den Einfügepunkt bestimmen kann. Mit dem befehl : einfuegepk = ThisDrawing.Utility.GetPoint(, "Nullpunkt wählen") Jetzt möchte ich dies Koordinaten in meine Globale variable speichern. Dies geht aber nicht. Hab es dann mal ohne Globale veriable versucht. Dann geht es. Dim TXEinfüge(0 To 2) As Double Me.Hide einfuegepk = ThisDrawing.Utility.GetPoint(, "Nullpunkt wählen") TXEinfüge(0) = einfuegepk(0) TXEinfüge(1) = einfuegepk(1) TXEinfüge(2) = 0 Mit dem befehl dim XXXX (0 to 2) as Double geht es. Ich kann aber keine feste länge in die Globale Variable stellen. Kann mir einer vielleicht helfen. Danke im voraus. Firephoenix
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 15. Dez. 2008 13:22 <-- editieren / zitieren -->
Hi, grundsätzlich kannst Du globale wie lokale Variable mit Arraygrenzen definieren, nur beim Zuweisen muss man ein wenig vorsichtig sein. Du kannst Deine Variable statt mit Double auch mit Objekttyp 'Variant' deklarieren Und in Deinem Beispiel führt Du ganz oben an: Code: Public TXEinfüge As Double
und wenn mal eine Variable global deklariert ist, geht (wenn nicht Typ Variant) neu-deklarieren/überschreiben nicht mehr (ohne Gewalt). Vielleicht hast Du da aber nur einen Schreibfehler und es sollte heissen:Code: Public TXEinfüge(0 to 2) As Double
Und noch was: keine Variablennamen mit Umlauten/Sonderzeichen!!!! - alfred - |
FiRePhoeniX Mitglied Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau
 
 Beiträge: 127 Registriert: 22.04.2007
|
erstellt am: 15. Dez. 2008 13:32 <-- editieren / zitieren --> Unities abgeben:         
|
Ex-Mitglied
|
erstellt am: 15. Dez. 2008 13:38 <-- editieren / zitieren -->
Hi, dann deklariere die Variable mit 'Variant' (sorry, vb6 ist schon eine Zeit her, ich dachte schon, dass das funkt)
Code: Public TXEinfüge As Variant
Zugreifen kannst Du dann (nach Zuweisung) als wäre es ein Array (ist ja auch ein Array)
Code: TXEinfüge = ThisDrawing.Utility.GetPoint(, "Nullpunkt wählen") 'und es verhält sich wie ein Array, z.b. X=TXEinfüge(0) Y=TXEinfüge(1)
- alfred -
|
FiRePhoeniX Mitglied Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau
 
 Beiträge: 127 Registriert: 22.04.2007
|
erstellt am: 15. Dez. 2008 14:36 <-- editieren / zitieren --> Unities abgeben:         
Danke noch mal alfred, hab es hin bekommen. Hab es ein bisschen verändert. Hab 3 neuen Variablen Global gestellt. Public XwertTX As Double Public YwertTX As Double Public ZwertTX As Double Dann bei starten des anderen Moduls. Einfach zusammen gesetzt Dim TXeinfuege(0 To 2) As Double TXeinfuege(0) = XwertTX TXeinfuege(1) = YwertTX TXeinfuege(2) = ZwertTX. Und so geht jetzt. Danke noch mal. Mit freundlichen Grüßen Firephoenix
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 15. Dez. 2008 18:36 <-- editieren / zitieren --> Unities abgeben:          Nur für FiRePhoeniX
|