Tělo funkce vytiskniPozdrav()

Funkce vytiskniPozdrav() je definována s prefixem c:. Z toho plyne, že je možné ji použít jako nový příkaz AutoCADu vytiskniPozdrav. Zadá-li uživatel tento příkaz do příkazové řádky, je ve Wordu vypsán zformátovaný text.

Hlavní části funkce:

Ve funkci je před vytvořením funkce nahrána podpora ActiveX prvků. Je-li příkaz pro nahrání podpory ActiveX umístěn na začátku souboru (není v žádné funkci), je zpuštěn jako první.Následuje deklarace funkce s prefixem c:, zajišťujícím snadné volání funkce v prostředí AutoCADu - jako příkazu.

Je zkontrolována přítomnost knihovny typů MS Wordu. Není-li knihovna typů importována, importuje-ji pomocí příkazu vlax-import-type-library.

V dalším úseku kódu se AutoLISP pokusí získat pointer na objekt Word. Číslo 9 signalizuje verzi aplikace - Word2000. V případě, že číslo verze neuvedeme bude nahrána libovolná verze přítomná v systému. Pokud se získání pointru nepodaří = Word není spuštěn, je zavolána funkce pro vytvoření objektu Word (spustí Word). Aby byla spuštěná aplikace viditelná musí se spustit funkce vla-put-visible.

Nyní AutoLISP získá pointry na skupinu documents (obdoba modelového prostoru v AutoCADu). Ve skupině documents vytvoří AutoLISP nový dokument (vytvoření nového dokumentu umožňuje při novém spuštění funkce vytiskniPozdrav otevřít vždy nový dokument). V novém dokumentu otevřeme nový odstavec. Před posláním první části textu, AutoLISP zjistí poslední odstavec, určí jeho délku a nastaví tloušťku písma. Poté vypíše první úsek textu za poslední odstavec (pomocí zjištěné velikosti odstavce). Následuje obdobné nastavení (změní se pouze tloušťka písma) a pošle se druhá část textu.

Vlastní kód funkce:

  (vl-load-com)
  
  (defun c:vytiskniPozdrav ()
    (if (equal nil mswc-wd100Words)
            ;;; kontrola zda je nahrána knihovna typů Wordu
      (vlax-import-type-library
        :tlb-filename      "D:/msword9.olb" 
        :methods-prefix	   "mswm-"
        :properties-prefix	"mswp-"
        :constants-prefix	"mswc-"
      )     ;;; nahrání knihovny typů a definování prefixů 
            ;;; pro metody, vlastnosti a konstanty
            ;;; POZOR musí být zadána správná cesta
            ;;; VAROVÁNÍ VLisp nepozná jméno souboru,
            ;;; v kterém je mezera např. "program files"
    )
    
    (setq mswAppObj (vlax-get-object "Word.Application.9"))
            ;;; pokus o získání objektu aplikace Wordu    
    (if (equal nil mswAppObj)
            ;;; pokud objekt aplikace Wordu nebyl získán
            ;;; aplikace Word není v systému spuštěna vytvoř objekt
            ;;; a zviditelni ho
      (progn
        (setq mswAppObj(vlax-create-object "Word.Application.9"))
        (vla-put-visible mswAppObj :vlax-true)
      )
    )
    
    (if (/= nil mswAppObj)        ;;; pokud je objekt korektně vytvořen
      (progn
              ;;; získej pointer na objekt skupina dokumentů
        (setq docs (vla-get-documents mswAppObj))
              ;;; vytvoř nový dokument
        (setq doc (mswm-add docs))
              ;;; získej pointer na objekt odstavce v dokumentu
        (setq paragraphs (mswp-get-paragraphs doc))
              ;;; získej poslední odstavec
        (setq pg (mswp-get-last paragraphs))
              ;;; urči rozsah odstavů
        (setq range (mswp-get-range pg))
              ;;; nastav písmo na tlusté
        (mswp-put-bold range 1)
              ;;; vlož za poslední odstavec
        (mswm-InsertAfter
	        range
	        (strcat "Dobrý den\n")
         )
              ;;; urči nový rozsah
        (setq range (mswp-get-range pg))
              ;;; nastav písmo na normální
        (mswp-put-bold range 0)
              ;;; vlož za poslední odstavec
        (mswm-InsertAfter
	       range
	       (strcat "\nTento text vypisuje ve Wordu AutoLISP!\n
            Podobným způsobem můžete posílat do Wordu i důležitější 
            informace.\nNashledanou."
          )
        )
      )
      (alert "Aplikace MSWord nebyla v sytému nalezena.")
              ;;; pokud není MSWord v systému obsažen vytiskne se chyba
    )
  ) 

Zdrojový kód příkladu

Zdrojový kód funkce vytiskniPozdrav().