[Date Prev] [Date Index] [Date Next]
[Thread Prev] [Thread Index] [Thread Next]

[xyzzy:02283] Re: バージョンアップのお知らせ



    Mon, 29 Mar 1999 12:13:01 +0900 の
   “[xyzzy:02278] バージョンアップのお知らせ”
    への返事です.

| しました。相変わらず何も変わってませんけど。

何が変わったかってーと、こういうしょーもないことができ
るようになりました。


(defconstant *ole-reader-.* '#:ole-.)
(defconstant *ole-reader-[* '#:ole-[)
(defconstant *ole-reader-}* '#:ole-})

(defvar *ole-readtable*
  (let ((x (copy-readtable)))
    (set-macro-character #\. #'(lambda (stream c) *ole-reader-.*) nil x)
    (set-macro-character #\[ #'(lambda (stream c) *ole-reader-[*) nil x)
    (set-macro-character #\} #'(lambda (stream c) *ole-reader-}*) nil x)
    (set-syntax-from-char #\] #\) x)
    x))

(defun ole-reader (stream char param)
  (let ((*readtable* *ole-readtable*))
    (let ((obj (read stream t nil t)))
      (loop
	(let ((sep (read stream t nil t)))
	  (cond ((eq sep *ole-reader-.*)
		 (let ((prop (read stream t nil t)))
		   (when (or (eq prop *ole-reader-.*)
			     (eq prop *ole-reader-[*)
			     (eq prop *ole-reader-}*))
		     (error "Unexpected ~a" prop))
		   (setq obj `(ole-method ,obj ',prop))))
		((eq sep *ole-reader-[*)
		 (unwind-protect
		     (progn
		       (set-syntax-from-char #\. #\.)
		       (setq obj (nconc obj (read-delimited-list #\] stream t))))
		   (set-macro-character #\. #'(lambda (stream c) *ole-reader-.*))))
		((eq sep *ole-reader-}*)
		 (return obj))
		(t
		 (error "Unexpected ~s" sep))))))))

(set-dispatch-macro-character #\# #\{ #'ole-reader)

(defsetf ole-method (obj prop &rest args) (x)
  `(progn
     (ole-putprop ,obj ,prop ,x ,@args)
     ,x))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defun excel-demo ()
  (interactive)
  (let (app chart)
    (setq app (ole-create-object "Excel.Application"))
    (setf #{app.Visible} t)
    #{app.Workbooks.Add}
    (setf #{app.Range["a1"].Value} 3)
    (setf #{app.Range["a2"].Value} 2)
    (setf #{app.Range["a3"].Value} 1)
    #{app.Range["a1:a3"].Select}
    (setq chart #{app.Charts.Add})
    (setf #{chart.Type} -4100) ; xl3DColumn
    (do ((i 0 (+ i 10)))
	((> i 180))
      (setf #{chart.Rotation} i)
      (sit-for .1))
    (sit-for 1)
    #{app.ActiveWorkbook.Close[0]}
    #{app.Quit}))

(defun ie-demo ()
  (interactive)
  (let ((ie (ole-create-object "InternetExplorer.Application")))
    (setf #{ie.Visible} t)
    #{ie.Navigate["http://wakusei.cplaza.ne.jp/archiver/"]}))

--
亀井哲弥(Tetsuya Kamei)
kamei@xxxxxxxxxxxx/JCA00343@xxxxxxxxxxx

Index Home