dcl_Form_Close

Started by OPLisp, April 21, 2010, 07:39:59 AM

Previous topic - Next topic

OPLisp

  Hallo,

  ich starte eine Form durch eine Schleife.

  Mit Button schließe ich die Form um in AutoCAD Objekte zu wählen.
  Wie ersichtlich, steuere ich die Form weiter mit dcl_Control_GetValue
  und dcl_Control_SetVisible. Das läuft weil das Project nicht entladen ist,
  nach dcl_FORM_SHOW wird alles richtig angezeigt.

  Meine Frage wäre, ob die Art so zu programmieren
  in Ordnung geht ? Sind hier keine "spätfolgen" zu erwarten ?
  Oder ob nur eine sichtbare Form gesteuert werden sollte.

  In DCL ist eine vorübergehend geschlossene Form überhaupt
  nicht erreichbar.

  Code auszug:

  (defun c:main () 
    .
    .
    (setq loop T)
    (while loop
      (setq loop nil)
      (dcl_FORM_SHOW Project_Form)
    )
    .
    .
  )

  (defun c:Project_Form_button_OnClicked (/ art var1)

    (setq loop T)
    (dcl_Form_Close Project_Form)
    (setq art (dcl_Control_GetValue Project_Form_option1))
    (setq var1 (ssget))
    .
    .
    (dcl_Control_SetVisible Project_Form_option2 nil)
  )


  Weiterhin habe ich wenig über (dcl_project_unload) gefunden
  ist dies zu empfehlen ?

  Danke für die Unterstützung

Fred Tomke

Hallo, OPLisp,

Dein Beispiel mit der Objektwahl funktioniert gut in nicht-modalen Dialogen, andockbaren Dialogen und Paletten. In modalen Dialogen kann ich dringend empfehlen, die Event-Funktion zunächst zu verlassen. Ein Beispiel hierfür findest Du hier: http://www.opendcl.com/forum/index.php?topic=1080.0
Wie Du selbst festgestellt hast, stehen auch die Änderungen einiger Steuerelemente solange zur verfügung, bis das Projekt entladen wird. Änderst Du also den CheckBox-Status, geht das, weil eben diese Einstellung gespeichert wird. Das gilt aber eben beispielsweise nicht für Inhalte von Baumstrukturen, Grids und ListViews sowie die aktuelle Auswahl der Listenfelder, Grids und Baumstrukturen.

QuoteOder ob nur eine sichtbare Form gesteuert werden sollte.
Bei modalen Dialogen würde ich dem demnach ausnahmslos zustimmen.

Bei nicht-modalen und andockbaren Dialogen und Paletten ist das ein wenig anders. Hier kannst Du für den Zeitraum einer Punktwahl einfach die Hide-Methode anwenden: Der Dialog ist dann einfach zwischenzeitlich nicht sichtbar, aber dennoch aktiv und Du kannst ohne weiteres Änderungen auch im Dialog vornehmen und bei Bedarf diesen wieder einblenden.

(dcl_project_unload) dient in erster Linie der Bereinigung nicht mehr benötigter Projekte, gerade auch in der Phase der Entwicklung, um nicht jedes Mal AutoCAD neuzustarten, nur um das Verhalten VOR dem Laden des Projekts zu prüfen. Außerdem könnte es Fälle geben, bei denen verschiedene Versionen eines Projekts in unterschiedlichen Ordnern existieren. Dann kann ein Entladen sinnvoll sein. Hat man ein Projekt entladen und will wieder einen Dialog dieses Projekts anzeigen, muss zunächst das Projekt wieder geladen werden. Bei größeren Projektdateien mit vielen Dialogen oder großen Bildern/Icons kann der Ladevorgang schon ein wenig dauern, weswegen ein ständiges Laden/Entladen die Anwendung nicht gerade performant erscheinen lässt. Deshalb lassen die meisten das Projekt geladen und entladen es nicht mehr. Und das ist wohl der Grund, weshalb du so wenig darüber gefunden hast. :)

VG, Fred
Fred Tomke
Dipl.-Ing. (FH) Landespflege

[ landscaper - landscape developer - digital landscape and urban design]