AutoCAD... AutoLISP... VisualLISP...

  [25] MsgBox a alert

index  

  Przekazywanie jasnych i pełnych informacji użytkownikowi, jest podstawą każdego (dobrego) programu. Wysyłanie komunikatów o zaistniałych błędach, zagrożeniach, czy pytań dotyczących dalszego wykonywania programu, jest niezwykle ważne. Niestety AutoLISP nie posiada takiego narzędzia. Funkcja alert może nadawać się tylko do niektórych zastosowań (komunikaty i informacje wymagające tylko akceptacji). Do zastosowania interfejsu komunikacji zgodnych z Windows możesz wykorzystać funkcje zdefiniowane aplikacjach arx (np. dos_lib lub acet_util.arx). Jeżeli jednak nie masz tych plików (lub nie chcesz z nich korzystać), możesz skorzystać ze sposobu który tutaj przedstawiam. Działa w wersji AutoCAD 2000 i wyższych. Zasada działania jest niezwykle prosta. Polega na wywołaniu funkcji VB o nazwie MsgBox przez program VisualLISP. Aby kontrolować przez LISP wartości zwróconej przez MsgBox, VB zapisuje ją do zmiennej systemowej USERI1. Lisp odczytuje tę wartość i zwraca na końcu funkcji. Ponieważ program korzysta z metod ActiveX, moduł (vl-load-com) musi być już załadowany. Funkcja wygląda tak:
;;; =================================================================;;;
;;; Wyświetla okna informacyjne i ostrzeżeń                          ;;;
;;; 2001(2009) by kojacek                                            ;;;
;;; =================================================================;;;
;;; Argumenty:                                                       ;;;
;;; Message  - treść komunikatu                                      ;;;
;;; Buttons  - typu i ilości przycisków oraz ikony                   ;;;
;;; Title    - Tytuł okna                                            ;;;
;;; =================================================================;;;
(defun jk:VBA_Msg (Msg Btn Title / Old_User Res)
  (setq Old_User (getvar "USERI1"))
  (vla-eval
    (vlax-get-acad-object)
    (strcat
      "AutoCAD.AcadApplication.ActiveDocument.SetVariable 
      \"USERI1\", MsgBox (\""
      Msg "\"," (itoa Btn) ",\"" Title "\")"
    )
  )
  (setq Res (getvar "USERI1"))
  (setvar "USERI1" Old_User)
  Res
)
Poniżej przykłady wywołań funkcji:
Wartości argumentu Buttons (dla różnych kombinacji przycisków, ikon i przycisków domyślnych mogą być sumowane):
VbCritical - 16 - Wyświetl ikonę Komunikat krytyczny.
VbQuestion - 32 - Wyświetl ikonę Pytanie ostrzegawcze.
VbExclamation - 48 - Wyświetl ikonę Komunikat ostrzegawczy.
VbInformation - 64 - Wyświetl ikonę Komunikat informacyjny.
VbDefaultButton1 - 0 - Domyślnym przyciskiem jest przycisk pierwszy.
VbDefaultButton2 - 256 - Domyślnym przyciskiem jest przycisk drugi.
VbDefaultButton3 - 512 - Domyślnym przyciskiem jest przycisk trzeci.
VbDefaultButton4 - 768 - Domyślnym przyciskiem jest przycisk czwarty

Zwracane wartości przez funkcję:
vbOK - 1 - OK
vbCancel - 2 - Anuluj
vbAbort - 3 - Przerwij
vbRetry - 4 - Ponów
vbIgnore - 5 - Ignoruj
vbYes - 6 - Tak
vbNo - 7 - Nie

Oto niektóre przykłady: