明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3582|回复: 14

[求助]图像按钮……

  [复制链接]
发表于 2003-2-10 12:10:00 | 显示全部楼层 |阅读模式
//这是一个简单的对话框,我的问题是:
//1、点击图像区域就可以翻页下一幅并且能在"path_blk" "blk_path" "sld_path"中显示信息,
//2、是否要写一个文本文件存图块的信息?
//3、如何获得点击图像按钮的动作,
//4、如何在图像框区域最大化显示幻灯片,请大侠们指教,切切
aw : dialog {
label = "浏览";
: concatenation {
                : text_part {
                        label        = "名称:";
                            fixed_width  = true;
                }
                 : text_part {
                            label        = " ";
                            key          = "path_blk";
                            width        = 6;
                }
                 : text_part {
                            label        = "序号:";                  
                }
                 : text_part {
                            label        = " ";
                            key          = "blk_path";
                            width        = 6;
                }
                : text_part {
                            label        = "幻灯片:";                  
                }
                 : text_part {
                            label        = " ";
                            key          = "sld_path";
                            width        = 6;
                }
        }  
            : boxed_column {
        label = "图块";
                : image_button {
                           key = "show tit";
                           height = 16;
                           width = 30;
                           color = -2;     
                }spacer;
             }spacer;
     ok_only;
}
发表于 2003-2-11 08:43:00 | 显示全部楼层

回复

(defun C:aw( / dcl_id getinf n)
  (setq n 1)
  (defun getinf ( / x y)
         (prompt "你只需在这里添加控制代码即可")
         (prompt "不可能在图像框区域最大化显示幻灯片")
         (prompt "因为幻灯片是自己做的,所以我认为你应该制作一个列表文件什么的,用于保存路径等的信息")
         (prompt "我已经做了连续浏览的功能")
         ;(if (>= n "幻灯片的最后一张") (setq n 1));重新从第一张开始显示.
         (if (>= n 7) (setq n 1))
         ;如果你使用的是幻灯库,那么程序就容易多了.
         (setq x (dimx_tile "show tit")
               y (dimy_tile "show tit")
         )
         (start_image "show tit")
         (fill_image  0 0 x y 0)
         (slide_image 0 0 x y "acad.slb(n)")
         (prompt "建议使用下边这种方法,上边的方法不知道为什么没有显示,但是不会出错")
         ;(cond ((= n 1)
         ;       (start_image "show tit")
         ;       (fill_image  0 0 x y 0)
         ;       (slide_image 0 0 x y "幻灯片n")
         ;      )
         ;      ((= n 2)
         ;       (start_image "show tit")
         ;       (fill_image  0 0 x y) 0)
         ;       (slide_image 0 0 x y "幻灯片n")
         ;      )
         ;      ......
         ;      ((= n "幻灯片的最后一张")
         ;       (start_image "show tit")
         ;       (fill_image  0 0 x y 0)
         ;       (slide_image 0 0 x y "幻灯片n")
         ;      )
         ;      (t nil)
         ;)
         (setq n (+ n 1))
         (prompt "其他的诸如路径等的信息,就交给你自己了.")
         (prompt "我没有测试过程序,可能有问题,随时联系. *^_^*")
  )

  (setq dcl_id (load_dialog "d:/tmp.dcl"))
  (if (new_dialog "aw" dcl_id)
      (progn
           (start_image "show tit")
           (fill_image  0 0 (dimx_tile "show tit") (dimy_tile "show tit") 0)
           (slide_image 0 0 (dimx_tile "show tit") (dimy_tile "show tit")
                            "acad.slb(1)"
           )
           (action_tile "show tit" "(getinf)");点击图像按钮的动作
           (start_dialog)
           (unload_dialog dcl_id)
      )
  )
  (princ)
)

//对话框的文件名假设为d:/tmp.dcl
aw : dialog {
   label = "浏览";
   : concatenation {
     : text_part {
                 label        = "名称:";
                 fixed_width  = true;
            }
     : text_part {
                 label        = " ";
                 key          = "path_blk";
                 width        = 6;
            }
     : text_part {
                 label        = "序号:";
            }
     : text_part {
                 label        = " ";
                 key          = "blk_path";
                 width        = 6;
            }
     : text_part {
                 label        = "幻灯片:";
            }
     : text_part {
                 label        = " ";
                 key          = "sld_path";
                 width        = 6;
            }
   }
   : boxed_column {
      label = "图块";
      : image_button {
              key = "show tit";
              height = 16;
              width = 30;
              color = -2;
      }spacer;
   }spacer;
   ok_only;
}
发表于 2003-2-11 08:58:00 | 显示全部楼层

其实,《Visual LISP程序设计——技巧与范例》中就有现成的例子:C:DCLTest

发表于 2003-2-11 11:42:00 | 显示全部楼层

没有仔细看你的程序,根据我的经验提点建议。

1。在(action_tile)函数中调用你自己写的更换幻灯片,更改路径的函数。
2。你的图块的路径是你自己定好的,你只是在对话框中显示出来,你可以用
edit_box,text,text_part等显示。调用图块是在你程序中完成的。所以没有
必要特意写一个文本文件。
3。函数(action_tile)就可以捕获点击图像按钮的动作。如第一条所写。
4。可将幻灯片放大,不管你做的时候是怎样的。但我不知道你的最大化的含意是不是和我理解的一样。具体运用如下:
  (start_image ai_key)
  (slide_image 0 0 (+ (dimx_tile ai_key) X)
    (+ (dimy_tile ai_key) Y) ai_key)
  (end_image)
其中,X和Y是正整数,可以调整幻灯片的大小,不过要不断调整,以达到最好
的效果。
 楼主| 发表于 2003-2-11 14:31:00 | 显示全部楼层

谢意,提前祝元宵节愉快

谢谢各位大侠,我初学,看其他的幻灯片文件在我的显示区域里是满的可我自己做的幻灯片总是一圈留有很大的空当,我掉整X,Y值也只能将它放在中心而已,……汗颜…………
发表于 2003-2-11 18:48:00 | 显示全部楼层

你在制作幻灯片的时候尽量做到最大,就是zoom-extents后的效果。再做成幻灯片可能会

你在制作幻灯片的时候尽量做到最大,就是zoom-extents后的效果。再做成幻灯片可能会好些。[br]
 楼主| 发表于 2003-2-11 20:25:00 | 显示全部楼层

我那里错了……

(defun C:aw (/ dcl_id getinf n I:Path show_tit slide)
  (setq n 1)
  (mapcar 'setvar '("cmdecho" "blipmode") '(0 0))
  (defun getinf        (/ x y)
    (if        (not (setq FIL (findfile "acad.slb")))
      (setq I:Path (if I:Path
                     I:Path
                     (getvar "DWGPREFIX")
                   )
      )
    )
;;;(set_tile show_tit "n")
    (setq slide (I:Path I:Path))
    (if        (>= n 5)
      (setq n 1)
    )
    (setq show_tit "acad(n)")
    (setq x (dimx_tile "show_tit")
          y (dimy_tile "show_tit")
    )
    (fill_image 0 0 X Y 0)
    (slide_image 0 0 X Y "acad(n)")
;;;(end_image)
    (cond
      ((= n 1)
       (start_image "show_tit")
       (fill_image 0 0 x y 0)
       (slide_image 0 0 x y "acad(2)")
      )
      ((= n 2)
       (start_image "show_tit")
       (fill_image 0 0 x y 0)
       (slide_image 0 0 x y "acad(3)")
      )
      ((= n 3)
       (start_image "show_tit")
       (fill_image 0 0 x y 0)
       (slide_image 0 0 x y "acad(4)")
      )
      ((= n 4)
       (start_image "show_tit")
       (fill_image 0 0 x y 0)
       (slide_image 0 0 x y "acad(5)")
      )
      ((= n 5)
       (start_image "show_tit")
       (fill_image 0 0 x y 0)
       (slide_image 0 0 x y "acad(6)")
      )
      ((= n 6)
       (start_image "show_tit")
       (fill_image 0 0 x y 0)
       (slide_image 0 0 x y "acad(6)")
      )
      (t nil)
      (setq n (+ n 1))
    )
  )
  (setq dcl_id (load_dialog "tmp.dcl"))
  (if (not (new_dialog "aw" dcl_id))
    (exit)
  )
  (start_image "show_tit")
  (fill_image 0 0 (dimx_tile "show_tit") (dimy_tile "show_tit") 0)
  (slide_image 0 0 (dimx_tile "show_tit") (dimy_tile "show_tit") "acad(1)")
;;;(end_image)
  (action_tile "show_tit" "(getinf)")
  (mode_tile "show_tit" 3)
  (start_dialog)
  (unload_dialog dcl_id)
)
(princ)
 楼主| 发表于 2003-2-11 21:40:00 | 显示全部楼层

放大了

按你的方法我把幻灯片调到了最大,好像换一个幻灯片就不对了
 楼主| 发表于 2003-2-11 21:42:00 | 显示全部楼层

慢慢读…………汗颜

发表于 2003-2-12 10:01:00 | 显示全部楼层

回复

程序运行没有出错误呀,不明白你想问什么。
单就程序而言,我认为getinf这个子程序的
(if (not (setq FIL (findfile "acad.slb")))
        (setq I:Path (if I:Path I:Path (getvar "DWGPREFIX")))
)
(setq slide (I:Path I:Path))
这两句没有作用。而且,
    (setq show_tit "acad(n)");这句又是干吗的?
    (setq x (dimx_tile "show_tit")
          y (dimy_tile "show_tit")
    )
    (start_image "show_tit");少了这句吧
    (fill_image 0 0 X Y 0)
    (slide_image 0 0 X Y "acad(n)")
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 05:58 , Processed in 0.171679 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表