| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
Autor
|
Thema: API-Punktabfrage in Zeichnung unter Win7 (2377 mal gelesen)
|
Litzinger Mitglied Systemmanager CAD

 Beiträge: 17 Registriert: 09.11.2000 SolidWorks 2010 SP 5.0 WinXP Pro SP3 & Win7 Pro SP1
|
erstellt am: 19. Apr. 2012 16:07 <-- editieren / zitieren --> Unities abgeben:         
Hallo API-Spezialisten, mit der Umstellung auf Win7 habe auch ich die leidvolle Erfahrung mit den Formularen machen müssen, die auf einmal im Hintergrund verschwanden. Die passenden Lösungsvorschläge aus dem Forum behoben zwar diesen Fehler, führten aber zu einem neuen Problem mit der GetSelectionPoint2-Methode zur Abfrage von Eingabepunkten in einer SW-Zeichnung. Interessanterweise funktioniert das angehängte Makro zur Erstellung einer Passmaß-Abmaß-Tabelle völlig problemlos unter WinXP. Verwendet habe ich den folgenden Code für die Anzeige des Formulars sowie die Abfrage des Eingabepunktes : Load FUF1_SW_Passungen_Tabelle lRet = FindWindow(vbNullString, FUF1_SW_Passungen_Tabelle.Caption) res = SetWindowPos(lRet, HWND_TOPMOST, 0, 0, 0, 0, FLAGS) FUF1_SW_Passungen_Tabelle.Show ... Do While IsEmpty(EingabePunkt) EingabePunkt = swSelMgr.GetSelectionPoint2(1, 0) DoEvents Loop Das Formular FUF1 wird sauber im Vordergrund angezeigt, aber leider kann man anschließend keinen Punkt auf dem Zeichenblatt eingeben, da die Do While-Schleife nicht mehr verlassen wird. Arbeite ich hingegen mit dem Befehl > FUF1_SW_Passungen_Tabelle.Show (False) <, so funktioniert die Punkteingabe wieder, allerdings werden auch alle Befehlszeilen unterhalb dieses Befehls ungewollt ausgeführt. Ergebnis : entweder funktioniert die Punkteingabe nicht oder das Makro führt ungewollt die nachfolgenden Befehle aus - ein echter Teufelskreis. Wer unter den API-Spezialisten arbeitet auch unter Win7 mit Formularen und kennt eine Lösung für diese Problematik ? Im Voraus besten Dank für Eure Unterstützung ! Gruß Frank
------------------ Lit Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Litzinger Mitglied Systemmanager CAD

 Beiträge: 17 Registriert: 09.11.2000 SolidWorks 2010 SP 5.0 WinXP Pro SP3 & Win7 Pro SP1
|
erstellt am: 08. Mai. 2012 14:58 <-- editieren / zitieren --> Unities abgeben:         
... ich bin doch einigermaßen überrascht, daß offenbar kein weiterer SW-User mit diesem Problem zu kämpfen hat. Im Grunde müßten alle SW-Makros betroffen sein, die mit Punktabfragen (GetSelectionPoint2) in einer Win7-Umgebung ablaufen. Ich habe jetzt die Fragestellung an die Hotline unseres SW-Resellers weitergegeben und dort hat man eine Anfrage bei SolidWorks gestartet (Service Request 1-2556906431). Ansonsten bleibt nur noch die Möglichkeit, die Makros mittels .Show (False) so abzuändern, daß nach dem Aufruf eines Formulars im Skript keine weiteren Befehlszeilen folgen (dann funktioniert wenigstens die Punktabfrage wieder). ------------------ Lit Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lutz Federbusch Ehrenmitglied V.I.P. h.c. Dipl.-Ing. Maschinenbau

 Beiträge: 3094 Registriert: 03.12.2001 alle SW seit 97+ AutoCAD2016-2022 ERP ProAlpha + CA-Link Intel Core i7-7820K 32GB Win10x64 Quadro K5000 SpacePilot
|
erstellt am: 08. Mai. 2012 16:13 <-- editieren / zitieren --> Unities abgeben:          Nur für Litzinger
|
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: 09. Mai. 2012 09:59 <-- editieren / zitieren --> Unities abgeben:          Nur für Litzinger
Hallo Frank, ging mir ähnlich wie Lutz, ich wollte mir das schnell mal ansehen, konnte aber in dem undokumentierten und in meinen Augen schlecht formatierten Quellcode nicht so richtig nachvollziehen, was du da vor hattest - und mit den harten Verdrahtungen konnte ich es auch nicht einfach laufen lassen, um mal zu probieren. Wäre es vielleicht eine Alternative mit Preselektion zu arbeiten und en vorher gewählten Punkt mit SelectionMgr::GetSelectionPoint abzufragen? Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Litzinger Mitglied Systemmanager CAD

 Beiträge: 17 Registriert: 09.11.2000 SolidWorks 2010 SP 5.0 WinXP Pro SP3 & Win7 Pro SP1
|
erstellt am: 09. Mai. 2012 10:23 <-- editieren / zitieren --> Unities abgeben:         
Hallo Lutz Federbusch, hallo Stefan Berlitz, schönen Dank für die ersten Reaktionen, aber die Frage verstehe ich nicht ganz : wie ich bereits formuliert habe und meiner Meinung nach auch im Makro erkennbar ist, geht es um die Erstellung einer Passmaß-Abmaß-Tabelle in einer SW-Zeichnung (bestehend aus Linien und Texten). Zur Platzierung verwende ich die GetSelectionPoint2-Methode, d.h. der SW-User soll einen Punkt auf der SW-Zeichnung angeben. Diese Methode funktioniert seit Jahren unter WinXP tadellos aber nicht mehr unter Win7, weil kein Punkt angenommen und damit die Do While-Schleife nicht mehr verlassen wird. Preselection kommt nicht in Frage, da der SW-User ja erst einmal auswählen soll, ob er eine Tabelle neu erstellt oder erweitert und anschließend einen Platzierungspunkt eingibt. Eine "zu feste Verdrahtung" kann ich als "Gelegenheits-Programmierer" dabei wirklich nicht erkennen, eher ein lästiges und unangenehmes Verhalten in einer Win7-Umgebung. Da hier offensichtlich keine Lösung existiert, habe ich jetzt zwangsläufig mein Makro so abgeändert, daß alle UserForms ungebunden sind und dem Befehl >.Show (False)< keine weiteren Befehlszeilen folgen. Nochmals besten Dank für die Unterstützung. Gruß Frank ------------------ Lit Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lutz Federbusch Ehrenmitglied V.I.P. h.c. Dipl.-Ing. Maschinenbau

 Beiträge: 3094 Registriert: 03.12.2001 alle SW seit 97+ AutoCAD2016-2022 ERP ProAlpha + CA-Link Intel Core i7-7820K 32GB Win10x64 Quadro K5000 SpacePilot
|
erstellt am: 09. Mai. 2012 10:29 <-- editieren / zitieren --> Unities abgeben:          Nur für Litzinger
Wozu die Mühe? Es gibt hier im Forum eine fertige Makrolösung, die allerdings nicht Linien zieht, sondern ein Tabellenelement einbettet. Und dieses Applikationsfenstergreifen (was unter Windows7 das Problem sein wird) scheint da auch nicht nötig zu sein bzw. zu stören. ------------------ Lutz Federbusch Mein Gästebuch Der Mensch, Herr oder Sklave der Technik? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
  
 Beiträge: 817 Registriert: 18.05.2005 SolidWorks 2022 x64 SP5.0 Dell Precision 5820 Intel Xeon W-2125 4x4GHz NVIDIA Quadro P2000 5GB 32GB RAM 2x Dell U2412M, 24" TFT Windows 10 Enterprise x64 22H2 Microsoft 365 E5 Microsoft Visual Studio Enterprise 2022
|
erstellt am: 10. Mai. 2012 08:18 <-- editieren / zitieren --> Unities abgeben:          Nur für Litzinger
Hallo Frank Habe zwar kein Win7, hab es aber troztdem mal angeschaut. Grundsätzliches zu deinem Makro. - Ich würde das SolidWorks-Objekt nicht "SldWorks" nennen, das kann zu Problemen führen. Nenne es zum Beispiel "swApp", damit musst du es auch nicht mehrmals als Public deklarieren und mehrmals neu zuweisen. (In deinem Makro im Modul und Formular2) - Deklariere Pfade zu Dateien als Konstanten. zB. Public Const xlsFilename = "\\A400s149\DatenEDM1\SW_Library\Makro-Programme\SW-Zeichnungen\SW-Passungen-Tabelle.xls" oder benutze die Makropfad-Variable, wenn du die Dateien im selben oder in einem Unterordner des Makros hast. zB. swApp.GetCurrentMacroPathFolder & "\SW-Passungen-Tabelle.xls" Zu deinem Problem, kann ich leider nichts sagen, aber vieleicht reicht es schon das SolidWorks-Objekt umzubenennen. (Siehe oben)
Gruss Andreas
------------------ 21 ist nur die halbe Antwort. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Litzinger Mitglied Systemmanager CAD

 Beiträge: 17 Registriert: 09.11.2000 SolidWorks 2010 SP 5.0 WinXP Pro SP3 & Win7 Pro SP1
|
erstellt am: 10. Mai. 2012 14:20 <-- editieren / zitieren --> Unities abgeben:         
Hallo Andreas, ich danke Dir für die grundsätzlichen Hinweise zum Deklarieren von Variablen und Konstanten. Mit der Umstellung auf "swApp" blieb das Problem mit der Punkteingabe zwar bestehen, aber immerhin konnte ich jetzt die doppelten Deklarationen vermeiden. Wobei sich mir als Gelegenheits-Programmierer nicht erschließt, worin der Unterschied zwischen "SldWorks" und "swApp" bei der Objektbezeichnung liegen soll. Wahrscheinlich muß man sich doch intensiver mit der Objektorientierten Programmierung auseinandersetzen oder gleich Informatiker sein, um diese Logik richtig zu begreifen. Ich gewinne immer mehr den Eindruck, daß auch die Programmierung von SolidWorks (entgegen mancher Behauptungen) eher etwas für routinierte Programmierer ist und sich daher auch nur wenige Anwender mit der Thematik beschäftigen. Dank & Gruß Frank ------------------ Lit Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
    
 Beiträge: 1764 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 11. Mai. 2012 07:14 <-- editieren / zitieren --> Unities abgeben:          Nur für Litzinger
Hallo Frank Das mit der Punkteingabe hätte ich auch schon ein paar Mal gern gehabt und kann Dir da leider auch nicht weiter helfen. Leider wird das von VBA für SWX nur suboptimal unterstützt. Zum Thema Gelegenheitsprogrammierer ich würde Dir auf jeden Fall empfehlen mal bei Deinem Reseller einen Programmierkurs zu besuchen. ein paar persönliche Hinweise, wie auch schon von Andreas und Stefan geschrieben (ich bin auch nur Gelegenheitsprogrammierer) 1.)wegen der Verwendung von SldWorks als Namen der Unterschied ist der, dass die Bezeichnung "SldWorks" bereits verwendet wird. Das siehst Du auch daran, wenn Du eine Variable deklarierst z.B. DIM xxx AS SldWorks.yy 2.) Du verwendest sehr viele Public Variablen ich würde versuchen das auf das Minimum einzuschränken Man verliert sehr rasch und sehr leicht den Überblick und es kann zu ungewollten Fehlzuweisungen kommen 3.) Ein wenig mehr Formatierung wär nicht schlecht, dann lässt sich das Makro von "Fremden" besser lesen 4.) Mehr Kommentare wären auch nicht schlecht. Ich weiß von mir selbst, dass das lästig ist und Zeit kostet. Aber wenn ich mir Programme von mir ansehe die ich vor ein paar Jahren erstellt habe die nicht kommentiert sind, dann muss ich wahrscheinlich mehr Zeit investieren mich da wieder reinzudenken als es gekostet hätte es gleich ordentlich zu machen. 5.) Pfade usw. sollten wie schon geschrieben als Konstanten gespeichert werden oder noch besser alle Dateien in das Makroverzeichnis und dann über "GetCurrentMacroPathName" darauf zugreifen 6.) bei der Exceltabelle hast Du Dir sehr viel Mühe gemacht Hast Du die von irgendwo kopiert oder selbst erstellt? Nur als Hinweis SWX hat eine eigene Access-DB mit den Passmaßen die findet man normalerweise unter C:\Program Files\SolidWorks-2012\SolidWorks\data\databases\fit.mdb und dann in den Tabellen ISO_Hole_Limits_... und ISO_Shaft_Limits_... Bitte nimm das nur als Gedankenanstoss und nicht als Kritik! Ich schreib eigentlich fast keine Makros nur selbst, sondern bastle meistens etwas aus verschiedenen Codeteilen zusammen die ich im Internet finde. Es gibt fast kein Problem, dass nicht ein anderer auch schon gehabt hat. Und wenn doch, dann zahlt es sich aus VOR der Programmierung z.B. hier im Forum sein Problem zu posten. Du wirst dann zwar nicht die fertige Lösung aber zumindest Vorschläge bekommen. ------------------ Grüße Heinz PS kann mir jemand sagen warum mein angezeigtes Profil nicht mit dem übereinstimmt das ich eingetragen habe? [Diese Nachricht wurde von nahe am 11. Mai. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Litzinger Mitglied Systemmanager CAD

 Beiträge: 17 Registriert: 09.11.2000 SolidWorks 2010 SP 5.0 WinXP Pro SP3 & Win7 Pro SP1
|
erstellt am: 11. Mai. 2012 12:12 <-- editieren / zitieren --> Unities abgeben:         
Hallo Heinz, merci beaucoup für die Gedankenanstöße; als Kritik habe ich das zu keinem Zeitpunkt aufgefasst und so ist Dein Kommentar erkennbar auch als positive Anregung gemeint. Den von Dir vorgeschlagenen Programmierkurs habe ich bereits vor einigen Jahren absolviert, allerdings rate ich nur den SW-Usern zur Teilnahme, die bereits brauchbare Kenntnisse im Objektorientierten Programmieren (OOP) haben. Ich selbst konnte damals nicht allzu viele Erkenntnisse sammeln, da der Kurs nur aus 2 (!) Teilnehmern bestand, von denen der Eine (meine Person) so gut wie keine OOP-Kenntnisse hatte und der Andere fast ein OOP-Profi war. Mit den Public-Variablen hast Du völlig Recht, das habe ich auch in Form von ungewollten Fehlzuweisungen feststellen müssen, allerdings kann ich mit dem Hinweis auf "mehr Formatierung" relativ wenig anfangen : unter Formatierung verstehe ich die Gliederung im Programm (Absätze, Einrücken von Befehlszeilen usw.) und das meine ich auch getan zu haben. Was die angesprochene Excel-Tabelle angeht, die habe ich vor vielen Jahren für die Anwendung in einem 2D-CAD-System erstellt und im Laufe der Zeit entsprechend ergänzt. Bei diesem CAD-System programmierte man damals in OpenVMS (sowie IAGL), und das war ein absolut wasserdichtes Betriebssystem mit einer übersichtlichen und auch für den Gelegenheitsprogrammierer verständlichen Dokumentation. Von dieser Warte aus betrachtet ist die Logik der OOP durch die Fülle der möglichen Befehle und Anwendungen sowie die unüberschaubare vielfältige Dokumentation nicht so leicht erkennbar und vor allem nachvollziehbar. Ich hoffe aber, daß ich nicht der einzige SW-User im Forum bin, der sich hier mit der Objektorientierten Programmierung etwas schwertut. Viele Grüße aus Frankfurt am Main Frank ------------------ Lit Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
    
 Beiträge: 1764 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 11. Mai. 2012 16:38 <-- editieren / zitieren --> Unities abgeben:          Nur für Litzinger
Hallo nochmals Also, dass was ich bis jetzt an Makros zu sehen bekomme habe und da zähle ich meine Eigenen dazu, hat meiner Meinung nichts mit Objektorientierter Programmierung zu tun außer, daß Objekte mit Methoden und Eigenschaften verwendet werden. Ich würde das erst objektorientierte Programmierung nennen, wenn man selbst eigene Klassen usw. definiert und verwendet. Ich sehe meine Makros als Basic Programme die sich einfach der Klasse SWX bedienen. Das Wichtigste nur nicht aufgeben! Und hier wird Dir fast immer weitergeholfen. Außer es gibt keine wirklich gute Lösung und das ist Meiner Meinung bei Deinem Problem leider der Fall. Punkteeingabe im laufenden Makro ist eben eine Schwäche von VBA für SWX .
Ich hab Dein Makro jetzt nicht gestartet, aber was willst Du mit der Punkteingabe erreichen. Wenn Du das ev. Mal in Worte fasst vielleicht gibt es ja eine andere Lösung. Zum Programmieren, Ich hab einige Jahre auch Makros mit LISP für AutoCAD geschrieben. Dem trauere ich heute noch ein wenig nach. Da kannst Du Sachen mit 2-3 Zeilen machen für die man In VBA etliche Zeilen Code braucht. Aber wenn es um die Verknüpfung mit anderen Programmen geht, gibt es meiner Meinung nach nichts Einfacheres als VBA Schönes Wochenende ------------------ Grüße Heinz [Diese Nachricht wurde von nahe am 11. Mai. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |