| | |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| | |
 | SolidWorks Kurs mit IHK-Zertifzierung , ein Kurs (bis zu 100% förderbar mit Bildungsgutschein)
|
|
Autor
|
Thema: VB-Programm Schriftfeld (1817 mal gelesen)
|
Piet Mitglied Konstruktionsleiter & Konstrukteur
  
 Beiträge: 661 Registriert: 20.11.2001 SWx 2021
|
erstellt am: 21. Jan. 2005 12:52 <-- editieren / zitieren --> Unities abgeben:         
Vor einiger Zeit hat hier ein netter Mensch (ich weiß leider nicht mehr, wer) ein VB-Programm zur Verfügung gestellt, mit dem komfortabel benutzerdefinierte Eigenschaften an Modelle angehängt werden können, und die dann automatisch in Schriftfelder von Zeichnungen angehängt werden. Ich versuche nun, dies Programm an meine Bedürfnisse anzupassen. Da ich nur VB.Net zur Verfügung habe, wurde der Code (in VB6 geschrieben) konvertiert. Beim Versuch, den Code zu Kompilieren, wird eine lange Fehlerliste angezeigt. Einige konnte ich schon bereinigen, aber jetzt stehe ich auf dem Schlauch. Die dringendste zuerst: Der Operand "=" ist für die Typen "System.Type" und "Short" nicht definiert. Diesen Code hab ich unverändert übernommen, das müsste also in der ursprünglichen Version funktionieren. Die angehängten Bilder Schriftfeld1 und Schriftfeld2 zeigen Screenshots. Die andere Fehlermeldung lautet "SelStart" ist kein Member von System.Windows.Forms.Control Diese Meldung (siehe Bild Schriftfeld3) bezieht sich direkt auf VB6, was ich da bei VB.Net einsetzen muss, ist mir nicht klar. Ich bin ein Anfänger in Visual Basic (in Programmierung sowieso), VB6 kenn ich immerhin etwas, VB.Net ist neu für mich. Für alle hilfreichen Tipps bin ich sehr dankbar. Piet
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Piet Mitglied Konstruktionsleiter & Konstrukteur
  
 Beiträge: 661 Registriert: 20.11.2001 SWx 2021
|
erstellt am: 21. Jan. 2005 12:54 <-- editieren / zitieren --> Unities abgeben:         
Hier ist noch mal eine besser lesbare Version des ersten Bildes, sowie der Programmcode. Piet [Diese Nachricht wurde von Piet am 21. Jan. 2005 editiert.] [Diese Nachricht wurde von Piet am 21. Jan. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Piet Mitglied Konstruktionsleiter & Konstrukteur
  
 Beiträge: 661 Registriert: 20.11.2001 SWx 2021
|
erstellt am: 25. Jan. 2005 11:16 <-- editieren / zitieren --> Unities abgeben:         
|
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)

 Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 25. Jan. 2005 11:44 <-- editieren / zitieren --> Unities abgeben:          Nur für Piet
Hallo Piet, der Code stammt wohl in Urspüngen irgendwie von mir, aber ich nutze noch kein VB.net ... und "alten" VB-Code einlesen würde ich schon gar nicht, sondern alles neu schreiben. Was die Operantmeldung angeht hab ich keine Idee, es sieht fast so aus, als erkennt das VB.net nicht, dass Model ein Object ist oder GetType von irgendeinem anderen Object kommt. Das andere Problem (mit SelStart) weiß ich auch das passende .NET Pendant nicht, aber das kannst du auch einfach weglassen, die ganze Funktion ist einfach nur eine Komfortfunktion, um automatisch den ganzen Text in einem Textfeld zu selektieren. Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Piet Mitglied Konstruktionsleiter & Konstrukteur
  
 Beiträge: 661 Registriert: 20.11.2001 SWx 2021
|
erstellt am: 25. Jan. 2005 11:47 <-- editieren / zitieren --> Unities abgeben:         
|
PASCAM Mitglied Diplom Informatiker

 Beiträge: 67 Registriert: 25.11.2002
|
erstellt am: 25. Jan. 2005 14:26 <-- editieren / zitieren --> Unities abgeben:          Nur für Piet
Hallo Piet, Das mit dem automatischen Konvertieren von VB6 zu VB.NET geht nur, wenn die Datentypen strikt sind. In Deinem Code waren die SWX -Objekte alle vom Typ 'Object'. Der Übersetzer kennt also den SWX -Typ nicht und kann daher nicht korrekt übersetzen. Im Einzelnen: - Dein erstes Problem ist, dass ModelDoc die Methode GetType hat, die von VB.NET jetzt anders verwendet wird. Daher verwende für ModelDoc immer als Typ SldWorks.ModelDoc2 (Zuvor musst Du natuerlich ein Verweis auf die SWX -Typbibliothek machen!!) In Deinem Code sind das so. ca. 15 Stellen. Damit kriegt der Compiler GetType wieder korrekt aufgelöst! - Die SelStart- Sache geht so in VB.NET nicht. Code einfach mal deaktivieren und dann sehen, wie sich die ganze Sache verhält Im uebrigen ist es auch im VB6-Code sinnvoller (und manchmal auch schneller - in Ausführung und beim Debuggen), den Datentyp auf die SWX -Klassen zu setzen und nicht mit object zu arbeiten. In 99% der Fälle geht das mittlerweile. Gruss, Ralph ------------------ PASCAM Ralph Müller Softwareentwicklung Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)

 Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 25. Jan. 2005 15:16 <-- editieren / zitieren --> Unities abgeben:          Nur für Piet
Hallo Ralph, > Im uebrigen ist es auch im VB6-Code sinnvoller (und manchmal auch > schneller - in Ausführung und beim Debuggen), den Datentyp auf die > SWX-Klassen zu setzen und nicht mit object zu arbeiten. In 99% der > Fälle geht das mittlerweile. Das mache ich tatsächlich absichtlich nicht, sondern nutze das late-binding mit as object, da ich versuche meine Makros versionsunanhängig zu programmieren und es offensichtlich sehr schwer ist den Leuten begreiflich zu machen, wo dieser Haken für den Verweis im Makroeditior umgelegt werden muss Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PASCAM Mitglied Diplom Informatiker

 Beiträge: 67 Registriert: 25.11.2002
|
erstellt am: 25. Jan. 2005 15:38 <-- editieren / zitieren --> Unities abgeben:          Nur für Piet
Hallo Stefan, Gebe Dir recht, das ist ein Gegenargument. Und ich wollte Dich auch nicht kritisieren! Nur hat die Typsicherheit von Early-Binding enorme Vorteile - Wie u.a. auch beim Konvertieren nach VB.NET. Gruss, Ralph ------------------ PASCAM Ralph Müller Softwareentwicklung Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)

 Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 25. Jan. 2005 16:07 <-- editieren / zitieren --> Unities abgeben:          Nur für Piet
Hallo Ralph, ich hab nichts gegen Kritik, nur so kann man ja lernen  Ich hab's nur als Erklärung mit dabeigeschrieben, damit der nächste, der es dann mit Early-Binding macht, auch darauf gefasst ist, dass das Makro/Programm bei einem Versionswechsel von SolidWorks angepasst werden muss  Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Müller Mitglied Masch. Ing. HTL / Betriebsing. STV
   
 Beiträge: 1151 Registriert: 11.04.2001
|
erstellt am: 25. Jan. 2005 16:18 <-- editieren / zitieren --> Unities abgeben:          Nur für Piet
Hallo Alle! Sorry Piet, mein Beitrag ist ein bisschen offtopic, aber es interessiert mich an dieser Stelle einfach. Zitat: Original erstellt von StefanBerlitz: ...nutze das late-binding mit as object, da ich versuche meine Makros versionsunanhängig zu programmieren ...
Stefan: Soweit ich das aus der Literatur verstanden habe, kann bei der early-binding nur auf die Funktionen der entsprechenden Verweise (z.B. SldWorks 2005 Type Library) zugegriffen werden. Nun ist es ja aber so, dass gerade in dieser Library die meisten "alten" Befehle nicht verschwinden, sondern mit neuen ergänzt werden. Wenn man dann ein bisschen "aufpasst", sollten doch auch ältere SWX-Versionen mit early-binding machbar sein, oder?? ------------------ Gruss Andreas A+E Müller AG Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Piet Mitglied Konstruktionsleiter & Konstrukteur
  
 Beiträge: 661 Registriert: 20.11.2001 SWx 2021
|
erstellt am: 25. Jan. 2005 16:35 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Original erstellt von PASCAM: - Dein erstes Problem ist, dass ModelDoc die Methode GetType hat, die von VB.NET jetzt anders verwendet wird. Daher verwende für ModelDoc immer als Typ SldWorks.ModelDoc2 (Zuvor musst Du natuerlich ein Verweis auf die SWX -Typbibliothek machen!!)
Ist natürlich eine Anfängerfrage, aber wie mach ich diesen Verweis? Die ModelDoc hab ich ersetzt. Zitat: - Die SelStart- Sache geht so in VB.NET nicht. Code einfach mal deaktivieren und dann sehen, wie sich die ganze Sache verhält
Das haut hin: Ich hab die Zeilen auskommentiert, keine Fehlermeldung mehr. Piet Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)

 Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 25. Jan. 2005 17:47 <-- editieren / zitieren --> Unities abgeben:          Nur für Piet
Hallo zusammen, @Andreas: ja, von den Befehlen her ist das kein Problem, aber wenn du in deinem Programm/Makro einen Verweis auf die SW2005 TypeLibrary drin hast und jemand will das Makro ausprobieren, der nur die 2004 installiert hat gibt's eine Fehlermeldung (weil die 2005 Typelib ja nicht installiert ist). Das selbe Spiel auch andersherum: schreibst du etwas mit der 2003 Typelib als Verweis und jemand will das jetzt auf seinem 2004 (oder 2005) laufen lassen, der aber nie die 2003 installiert hatte: PENG ... Fehlermeldung, kein lauffähiges Makro oder Programm, verduzter Anwender, der das Makro für bescheuert hält, unzufriedener "Kunde" Deswegen entwickel ich manchmal mit den Verweisen, weil es sehr bequem ist, neben dem (in meinen Augen geringen) Geschwindigkeitsgewinn ist das automatische Komplettieren sehr praktisch; aber spätestens, wenn ich das Makro dann in die freie Wildbahn entlasse schreib ich alles wieder um auf "Object". Aber gut zu wissen, dass ich mir das in VB.net dann abgewöhnen muss; müssen halt die Nutzer ein wenig mitdenken @Piet: einen Verweis setzt du in den Projekteigenschaften; bei VBA kommtst du da unter Extras/verweise dran, im VB6 über Projekt/Verweise. Wo das aber in VB.net zu finden ist weiß ich nicht (hab ich ja noch nicht ) Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PASCAM Mitglied Diplom Informatiker

 Beiträge: 67 Registriert: 25.11.2002
|
erstellt am: 25. Jan. 2005 18:00 <-- editieren / zitieren --> Unities abgeben:          Nur für Piet
Hallo Piet, Der Verweis fuer SWX legst Du in VB.NET wie folgt fest: - RMB im Projektfenster auf Verweise, dann Verweis hinzufügen. Du bekommst ein Fenster mit Reitern, nimm hier den zweiten (COM). - Dort waehlst Du die SolidWorks Typbilbiothek deiner Version aus (z.B. SldWorks 2005 Type Library) und drückst den Auswählen Button - Jetzt mit OK den Dailog schliessen und Du hast den Verweis Uerbigens zu den ModelDoc: Die Variablen, die sich auf das Modell beziehen, muessen ungefähr so deklarariert werden: dim MyModel as sldworks.modeldoc2 Dann klappt das. Ansonsten empfehle ich Dir, erst einmal ein paar Schritte mit VB.NET ohen SWX zu probieren. Es ist nicht schwer, aber eben etwas anders als das "alte" VB. @Stefan: In VB.NET gibt es auch noch das Late-Binding. Aber eben die Methode GetType ist in .NET in der Basisklasse Object vergeben (für die Typermittlung eines Objektes). Daher muss zumindest das ModelDoc2-Objekt früh gebunden werden. Oder man muss jede Menge anderer Code schreiben .... Gruss, Ralph ------------------ PASCAM Ralph Müller Softwareentwicklung Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Piet Mitglied Konstruktionsleiter & Konstrukteur
  
 Beiträge: 661 Registriert: 20.11.2001 SWx 2021
|
erstellt am: 27. Jan. 2005 11:41 <-- editieren / zitieren --> Unities abgeben:         
Vielen Dank für die hilfreichen Tipps. Der fehlende Verweis auf die SWX  -Typbibliothek war der entscheidende Schlüssel. Von ursprünglich 102 Buildfehlern bin ich immerhin schon mal soweit, dass das Programm fehlerfrei kompiliert wird und startet. Nur bei der Ausführung gibt's noch ein paar Hakler wegen veränderter Syntax durch VB.Net. Bis hierhin jedenfalls vielen Dank an alle, besonders an Ralph. Piet Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |