| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | |  | Von Digital Twins bis Hochleistungs-Computing: PNY präsentiert seine Zukunftstechnologien für die Industrie von morgen, eine Pressemitteilung
|
Autor
|
Thema: Popup, Hyperlink, Excel & Co. (2080 mal gelesen)
|
kschlepp Mitglied Dipl.-Ing. FH

 Beiträge: 63 Registriert: 02.05.2007
|
erstellt am: 27. Jun. 2007 15:02 <-- editieren / zitieren --> Unities abgeben:         
Hallo! Aus dem VBA-Forum bin ich nun ans Lisp-Forum verwiesen worden. Vielleicht liegt hier der Schlüssel zur Lösung meines Problems... Habe im "Rund um AutoCAD"-Forum bereits einige Hilfe erfahren, allerdings das gewünschte Ergebnis nur zum Teil erreicht. Es geht um folgendes: In einige Zeichnungen muss vor dem Plotten ein Stempel eingefügt werden um sie eindeutig zu kennzeichnen. Damit dies nicht vergessen wird soll vor beim Aufruf des Plotbefehls ein Hinweisfenster aufpoppen. Zum Beispiel: "Stempel einfügen nicht vergessen (wenn notwendig)!" So kann der User bei Bedarf den Plot-Befehl abbrechen und den Stempel einfügen, oder einfach OK drücken und weiterplotten. Nun müssen aber alle Zeichnungen die einen Stempel erhalten haben zentral erfasst werden. Dies soll in einer Excel-Tabelle geschehen. Ich dachte zunächst eine Verknüpfung des Stempels (ein Block) mit der Excel-Liste über einen Hyperlink wäre eine tolle Lösung. Allerdings gefällt mir das nun doch nicht. Das Symbol ist sehr klein und der Weg dorthin über Markieren > RMT > Hyperlink > Öffnen... sehr lang. Schöner wäre es man hätte bereits in dem Popup eine Verbindung zu der Excel-Liste, z.B. so: "Stempel einfügen nicht vergessen (wenn notwendig)! Zum Öffnen der Excel-Liste bitte hier klicken." Im Rund um AutoCAD-Forum hab ich nun erfahren das ein solcher Hyperlink in einem alert nicht möglich ist. Also muss was anderes her. Mein bisheriger Code sieht so aus: (defun C: plot ( ) (alert "Stempel einfügen nicht vergessen (wenn erforderlich)!") (initdia) (command ".plot") (princ) ) Ich denke ich muss die alert-Zeile ersetzen und an dieser Stelle ein weiteres Programm aufrufen oder? Wie macht man das am elegantesten? Und wie sieht dann dieses weitere Programm aus? Wie erstelle ich ein Fenster mit einem Hyperlink und einem Ok-Button zum Schließen des Fensters?... Habe bislang nur so etwas gefunden: (command "start" "Liste.xls") --> Kann man das mit einem Text oder Button verknüpfen? Dankeschön. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13530 Registriert: 30.11.2003 .
|
erstellt am: 27. Jun. 2007 15:10 <-- editieren / zitieren --> Unities abgeben:          Nur für kschlepp
Wie sehen denn deine Bemühungen zur Lösung deines Problems aus ? Bisher fragst du ja nur rum und hast nur mit Komplett-Code was anfangen können? Schon mal Mapcars-Tutorial zur Gemüte geführt? Auf afralisp.net gesurft ? Beispiel-Codes mit DCL analysiert usw. ? Zeig doch mal Eigeninitiative! Und in welchem Forum du fragst .. naja .. die Antworter lesen meist eh in mehreren mit .. soviel zu deinen Crosspostings ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
       

 Beiträge: 4191 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 27. Jun. 2007 15:15 <-- editieren / zitieren --> Unities abgeben:          Nur für kschlepp
Hallo kschlepp, da hast du dir mehrere Themen auf den Tisch gezogen, die jedes für sich schon ein abendfüllendes Programm sein könnten. in Lisp ist es nicht ohne Weiteres möglich 'ala MsgBox einen YesNo-Dialog auf den Bildschirm zu zaubern. Dafür musst du dir ein Dialogfeld programmieren, und natürlich auch die entsprechenden Funktionen, die das Dialogfenster steuern und die entsprechende Rückgabe geben. Du willst als nächstes einen Link in einem Dialogfenster haben ... das geht nicht. Du kannst in deinem Dialogfenster einen Button machen, dem der Link hinterlegt ist. Anderer Vorschlag: Warum bastelst du nicht ein Programm, welches vor dem Plott prüft, ob die Zeichnung bereits in der Excel-Tabelle erfasst ist? Je nach Ergebnis, kannst du dann das Plotten zulassen oder eben nur nach extra Bestätigung ermöglichen. Oder trägst die daten einfach in der Excel-Tabelle ein. Grüße! Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kschlepp Mitglied Dipl.-Ing. FH

 Beiträge: 63 Registriert: 02.05.2007
|
erstellt am: 27. Jun. 2007 17:42 <-- editieren / zitieren --> Unities abgeben:         
Hallo Holger! Danke für deinen Rat. Habe mir auf CADmiums Vorschlag hin nochmal zwei Stunden mapcars Seiten für Einsteiger und Fortgeschrittene angeschaut. Ausser das ich jetzt weiss das Lisp für "list processing" steht und das man mit Listen eine ganze Menge machen kann bin ich dort aber auch nicht schlauer geworden. Wie man ein Popup bzw. Dialogfenster auf den Bildschirm zaubert ist dort nämlich nicht beschrieben. Deiner Antwort entnehme ich aber, dass das aber auch mit Lisp möglich ist. Auf den von mir erwähnten Link kann ich im Übrigen auch verzichten, eine Verknüpfung zu der erwähnten Excel-Tabelle über ein Button wäre ja mindestens genauso schön. Damit wäre die Frage nun: Wie erzeuge ich in Lisp eine Dialogbox und wie Buttons? Der Text in der Dialogbox ist fest: "Stempel nicht vergessen und bei Bedarf auch Excel-Liste pflegen!" - oder so ähnlich. Ein Button ("Ok") sollte das Fenster einfach schließen und das Plotfenster aufpoppen lassen (also zu (initdia) springen). Ein weiterer Button sollte die Excel-Liste öffnen (also so ähnlich wie (command "start" "Liste.xls"). Und ein dritter könnte eventuell direkt den Stempel bereitstellen oder die Bibliothek öffnen. Soweit die Wunschliste. Vielleicht kannst du mir einen Leitfaden an die Hand geben, wie man ein solches Dialogfeld in Lisp programmiert, welche Argumente und Daten benötigt werden und wann wie wo an was übergeben werden müssen und wie man Button in dieses Dialogfeld integriert und ihnen wiederum Funktionen zuweist. Vielleicht gibt es ja auch einen entsprechenden Suchbegriff der mich auf verwandte (Anfänger-)Probleme verweisen kann, ich habe bislang leider noch keinen Thread hier im Forum gefunden der mir geholfen hat. Vielleicht sagst du als Moderator aber auch: Lass es sein. Das ist mit Lisp so kompliziert, dass ein blutiger Anfänger das in zwei Wochen nicht hinbekommt (denn so lange habe ich ungefähr noch bis meine Kollegen mit dem Stempel und der Excel-Liste arbeiten sollen). Dann müsste ich nochmal im VBA-Forum nachfragen (so etwas soll ja auch damit machbar sein), oder oder ich müsste halt Zettel schreiben und allen Mitarbeitern auf den Bildschirm kleben: STEMPEL NICHT VERGESSEN! Nur wäre das weder in meinem Sinn, noch in dem meiner Kollegen, noch in dem des 21. Jahrhunderts. Zu deinem anderen Vorschlag: Wir hatten in der Abteilung auch schon überlegt was Sinn machen würde, wie wir möglichst sicherstellen können das immer alle Stempel gesetzt werden (wenn nötig) und diese auch in der Excel-Liste notiert werden. Möglich wäre in unseren Augen auch folgendes: Das "alert"-Fenster bleibt so bestehen wie bisher und man durchsucht jede Zeichnung vor dem Plotten nach dem entsprechenden Block (Stempel). Ist er vorhanden müssen die Attribute ausgelesen und in die Excel-Liste eingetragen werden. Ist der eintrag allerdings schon vorhanden, so soll er natürlich nicht noch einmal hinzugefügt werden. Außerdem müsste auch immer der Dateiname an Excel übergeben werden und und und... Da erschien es uns Laien einfacher "Achtung! Stempel setzen!" und "Achtung! Liste ausfüllen!" auf dem Bildschirm erscheinen zu lassen und zu verlinken als mit mehreren verschachtelten Bedingungen, Abragen (if, do while, else, etc.) und Variablen zu arbeiten. Vielleicht siehst du das aber auch anders und zeigst uns einen Weg wie es einfacher geht. Mit freundlichen Grüßen... Karsten. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
   
 Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 27. Jun. 2007 18:50 <-- editieren / zitieren --> Unities abgeben:          Nur für kschlepp
Servus Karsten Der gewünschte Leitfaden wäre ja nicht gerade ein Dreizeiler. Zitat: ...Vielleicht gibt es ja auch einen entsprechenden Suchbegriff ...
Erste Infos zu Dialogboxen findest Du so: Starte den Visual Lisp Editor (Befehl: _vlide) und rufe dort die Hilfe auf Index: dialog box ... ------------------ Schöne Grüße Ernst www.geopaint.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13530 Registriert: 30.11.2003 .
|
erstellt am: 27. Jun. 2007 19:04 <-- editieren / zitieren --> Unities abgeben:          Nur für kschlepp
Zitat: Original erstellt von kschlepp:
Vielleicht sagst du als Moderator aber auch: Lass es sein. Das ist mit Lisp so kompliziert, dass ein blutiger Anfänger das in zwei Wochen nicht hinbekommt (denn so lange habe ich ungefähr noch bis meine Kollegen mit dem Stempel und der Excel-Liste arbeiten sollen).
Sooo kompliziert ist das auch mit Lisp nicht, aber damit als Anfänger einzusteigen, ist das Pferd von hinten aufzäumen... Was du dir hier vorstellst, übersteigt IMHO den Rahmen der Forenhilfe und geht mehr in Richtung Dienstleistung. Warum holt ihr euch nicht jemanden der das für euch in 14 Tagen kompetent löst mit ins Boot? Wirtschaftlich ist das allemaler, als wenn du 14 Tage lang daran rumwurschtelst.(Es sei denn, du kostest deinem Chef nix )
------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
       

 Beiträge: 4191 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 28. Jun. 2007 08:17 <-- editieren / zitieren --> Unities abgeben:          Nur für kschlepp
Hallo kschlepp, auf dein Posting Bezug nehmend sage ich wirklich: Lass es sein! Ich traue mir nicht zu, dir die DCL-Programmierung hier im Forum so zu erklären, dass du damit etwas anfangen könntest. Wie mir scheint, bist du auch in Sachen AutoLISP Anfänger. Dieses absolut notwendige Wissen solltest du allerdings bereits besitzen, wolltest du Dialogfenster in Lisp programmieren. Zum Thema VBA. Deine Aufgabe lässt sich sicher auch als VBA-Makro lösen. Vielleicht sogar einfacher, da das Dialogfensterhandling in dieser Umgebung einfacher ist. Mir scheint allerdings die ganze Aufgabe noch nicht durchdacht zu sein. Das alleinige Aufpoppen Erinnerung wird das Problem, welches die Ursache deiner Überlegungen ist, nicht lösen. Solche Dialoge lassen sich einfach wegklicken und du hast wirklich keinen Effekt. In deinen Gedankengängen machst du einen Fehler. Du versuchst eine Lösung zu finden, die deinen Programmierkenntnissen entspricht. Du brauchst aber eine Lösung, die das Problem erledigt. Und in deinem Fall wäre es eben das durchforsten der Excel-Tabelle nach Informationen, ob die aktuelle Zeichnung bereits erfasst ist und wenn nicht, dass die Zeichnung dann erfasst wird. Versuche also die Ursache zu beschreiben, weshalb du überhaupt an eine Programmierlösung denkst. Dann entwickelt man einen möglichen Arbeitsablauf und dann erst kann man die Entscheidung treffen, was und womit eine Lösung programmiert wird. Ein Schnellschuß (14 Tage Zeit) bringt dir gar nichts. Schade um die Zeit, die du investiert hast. Ein nutzen ist nicht zu erkennen und die Kollegen werden die Lösung auch nicht annehmen .. es wird also alles so bleiben wie gehabt. Sorry für die harten Worte, aber das ist meine (auf Erfahrung) basierende Meinung - Machen kannst du natürlich, was du für richtig hältst, in Detailfragen steht Dir das Forum sicher auch hilfreich zur Seite. Grüße Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten

 Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 28. Jun. 2007 11:03 <-- editieren / zitieren --> Unities abgeben:          Nur für kschlepp
Hi Karsten, Ich will mich mal anschliessen, und Dir sagen, das alles ist nicht soooooo schwer, wie Du unten siehst ja kein langer code  zur DCL (Dialog in Lisp): das einzige, was Du brauchst ist das Layoutelement :Button zum Lisp: Prinzip: 1. Dialogdatei laden (*.dcl) (load_dialog) 2. Dialog, der in der DCL definiert ist initialisieren (new_dialog) 3. sagen, was bei welchem Knopf gemacht werden soll (action_tile) 4. Dialog anzeigen (start_dialog) 5. machen, was gemacht werden soll. In Lisp hast Du ja eigentlich schon alles, nur die DCL-Aufrufe fehlen Dir halt noch: Code: (defun c : plot () (setq dcl_id (load_dialog "xlplot.dcl")) (if (not (new_dialog "xlplot" dcl_id)) (exit) ) (mode_tile "plot" 2) (action_tile "plot" "(done_dialog 2)") (action_tile "excel" "(done_dialog 1)") (setq result (start_dialog)) (if (= result 2) (progn (initdia) (command ".plot") ) ) ;diese Klammer fehlte ;) - s.u. (if (= result 1) (command "start" "xlplot.xls")) (prin1) )
Und zum Studieren ein DCL-Beispiel (sollte xlplot.dcl heissen):Code: xlplot : dialog { label = "Plotten oder was?"; :text { label = "Exceltabelle auch schon bearbeitet?"; } :row { :button { label = "JA, Plotten!"; key = "plot"; } :button { label = "OOPS, zu Excel"; key = "excel"; } :button { label = "Abbrechen"; key = "cancel"; is_cancel = true; } } }
Du siehst, so schwer ist das wirklich nicht. Grüsse, Henning------------------ VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de [Diese Nachricht wurde von wronzky am 28. Jun. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kschlepp Mitglied Dipl.-Ing. FH

 Beiträge: 63 Registriert: 02.05.2007
|
erstellt am: 28. Jun. 2007 13:37 <-- editieren / zitieren --> Unities abgeben:         
@Ernst: Dankeschön! dialog box war der richtige Hinweis. Unter Popup, Pop-up, Fenster, Window, Hinweis usw. hatte ich nix gefunden. Mit der Hilfe kann man echt was anfangen. @Henning: Danke für deinen Leitfaden! Anhand der Hilfe, auf die mich Ernst verwiesen hat, hatte ich aber bereits eine ähnliche Lösung umgesetzt. Aber ich habe Ich habe deinen Vorschlag ebenfalls getestet --> Es kam bei mir zur Fehlermeldung (eine Klammer musste noch geschlossen werden ) @Holger: Danke für deine ehrliche Meinung. Leider habe ich sie erst gelesen als ich schon längst damit angefangen hatte mir anhand der Hilfe etwas eigenes zu basteln. Hätte ich sie vorher gelesen - wahrscheinlich hätte ich es gar nicht erst probiert. Und noch eine Anmerkung zur Aufgabenstellung: Die Sache mit den Stempeln ist hier im Haus ein ziemlich komplexes Thema. Das Hauptproblem liegt darin, dass kein Algorithmus existiert der festlegt, ob ein Stempel gesetzt werden muss, neu gesetzt werden muss, eventuell sogar entfernt werden muss oder der Inhalt des Stempels vielleicht sogar geändert werden muss. Und es ist nicht sicher ob dies bereits alle Möglichkeiten sind. Daher war es der ausdrückliche Wunsch aller Kollegen vor dem Plotten einfach daran erinnnert zu werden, dass daran zu denken sei bei Bedarf gegebenenfalls (je nach Ermessen) einen Stempel zu setzen und ihn in die Liste einzutragen. Die bisherigen Tests liefen sehr erfolgreich und die Kollegen sind sehr begeistert. @Thomas: Danke auch für deinen Ratschlag. Leider habe ich auch diesen erst gelesen, als ich quasi bereits fast fertig war. Zugegeben, alles in allem ist ein Arbeitstag sicherlich ne Menge Holz für so ein paar Zeilen (siehe Hennings Beispielprogrammierung), aber durch den freundlichen Hinweis von Ernst (und sicherlich auch Henning) war es nun letztlich doch möglich ein Popup in relativ kurzer Zeit zu realisieren und alle glücklich zu machen. Vielen Dank noch einmal, auch im Namen der gesamten Abteilung.
Karsten. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |