对话框设计基础知识(一)(我只是一个渺小的搬运工)

本文详细介绍了控件的分类,包括可以定义动作行为的控件、组合类控件以及装饰性和信息类控件,并阐述了各类控件的特点和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

按照控件的特点可以将控件分为以下几类

一.可以定义动作行为的控件
这类控件具有动作行为(action)的属性,动作行为是用AutoLISP的函数或表达式表示定义的,用鼠标单击这样的控件时,就会执行相应的函数或表达式。

  1. 按钮(Button)
    按钮适用于立即产生可视的操作,如退出对话框、弹出子对话框及其它特定操作。每个对话框至少包含一个OK按钮(或功能相当的控件)。
    按钮的类型是button。有action、alignment、fixed_height、fixed_width、height、is_cancel、is_default、is_enabled、is_tab_stop、key、label、mnemonic、width 共13个属性。它的标签(label)显示在按钮上。
    若要创建与OK等价的控件,其关键字必须为"accept",并将其属性is_default设定为true(真)。

  2. 编辑框(Edit Box)
    编辑框用于输入字符串。它的类型是edit_box。有action、alignment、allow_accept、edit_limit、edit_width、fixed_height、fixed_width、height、is_enabled、is_tab_stop、key、label、mnemonic、value、width、password_char 16个属性。其标签显示在该框的左边,它的默认宽度为12个字符,当输入的字符多于12时,文本自动向左滚动,框内的字符串即为编辑框的值(value)。
    图下图所示的编辑框定义如下:

:edit_box
{ key="test_text";
  label="长度: ";
  value="100.0";
  width=12;                           
    }

在这里插入图片描述
3. 图像按钮(Image Button)
图像按钮将图像显示在按钮上。图像由AutoLISP程序确定。它的类型是image_button。有action、alignment、allow_accept、aspect_ratio、color、fixed_height、fixed_width、height、is_enabled、is_tab_stop、key、mnemonic、width 13个属性。
图像按钮很有用的一个特性是,通过AutoLISP程序可以获取被单击时的位置,从而根据不同的位置设计相应的动作。
下图所示图像按钮定义的如下:

:image_button
{ key="test_image_button";
  width=10;
  aspect_ratio=1.5;             
}

在这里插入图片描述
4. 列表(List Bbox)
列表框的类型是list_box。有action、alignment、allow_accept、fixed_height、fixed_width、height、is_enabled、is_tab_stop、key、label、list、mnemonic、multiple_select、tabs、value、width 16个属性。列表内含有若干行可供选择的文本,当表的内容超出表的范围时,将自动在表的右侧出现一个滑动条。
列表的标签显示在列表框的上方作为文字说明。列表的值是被选中的文本行的序号,序号从0开始。属性multiple_select为true时,允许同时选取框内的多行文本。
在这里插入图片描述
上图所示对话框的列表(不包括其他控件)定义如下:

:list_box
  {label="齿轮种类";
   list= "圆柱直齿\n圆柱斜齿\n圆锥直齿\n螺旋伞齿\n蜗轮\n蜗杆\n";
   value="2";
   key="gear_list";
   height=6;
  }
  1. 下拉列表(Popup List)
    下拉列表的类型是popup_list。它具有action、alignment、edit_width、fixed_height、fixed_width、height、is_enabled、is_tab_stop、key、label、list、mnemonic、tabs、value、width 15个属性。
    下拉列表具有编辑框和列表框的两个特点,初始状态象一个编辑框,标签显示在框的左边,框内只有一行字符和一个向下的箭头,见图(a)。单击框内箭头,将弹出一个列表,见图(b),选取表内文本之后,列表自动关闭,在编辑框内显示选中的内容。下拉列表的值是被选中的文本行的序号。
    所示下拉列表的定义如下:
:popup_list
{label="齿轮种类:";
list="圆柱直齿\n圆柱斜齿\n圆锥直齿\n螺旋伞齿\n蜗轮\n蜗杆\n";
key= "gear_list";
}

(a):

a
(b):
b
6. 单选按钮(Radio Button)
单选按钮的类型是radio_button。有action、alignment、fixed_height、fixed_width、height、is_enabled、is_tab_stop、key、label、mnemonic、value、width 12个属性。
单选按钮不宜能单独使用,必须由多个这样的按钮以行或列的形式组成一组,同组的按钮之间是互锁的,只能从中选取一个。单选按钮的标签显示在按钮的右边。下图所示单选按钮的定义如下:

:radio_button 
{ key= "unit_mm";
   label= "毫米";
}

在这里插入图片描述
7. 滑动条(Slider)
滑动条是一种直观控制数值的控件。点取滑动条上的箭头或拖动滑块,可以得到字符串方式表示的整数。
滑动条的类型是slider。有action、alignment、big_increment、fixed_height、fixed_width、height、key、label、layout、max_value、min_value、mnemonic、small_increment、value、width 15个属性。
属性max_value、min_value确定数值的最大和最小值,small_increment、big_increment确定点击滑动条箭头时的最小、最大增量。
下图所示滑动条的定义如下:

:slider 
 { key= "test_slider";
   min_value=0;
   max_value=100;
 }

在这里插入图片描述
8. 复选框(Toggle)
复选框又称作切换开关、乒乓开关,它的类型是toggle。有action、alignment、fixed_height、fixed_width、height、is_enabled、is_tab_stop、key、label、value、width 11个属性。
复选框与单选按钮不同的是它可以单独使用,同组的复选框各自是独立的。
标签显示在开关的右边。图12-9所示复选框的定义如下:

:toggle
 { label= "正交方式";
   key= "ortho_mode";
   value=1;
}

在这里插入图片描述

二.组合类控件

组合类控件可以将相关的控件组合在一起,使得对话框的布局更加美观、合理,操作更加方便。

  1. 列(Column)
    列是将若干控件构成垂直分布的一个组件。
    列的类型是column。有alignment、children_alignment、children_fixed_height、children_fixed_width、fixed_height、fixed_width、height、label、width 9个属性。
    所示列的定义如下:
:column{
   :button{label= "光标拾取 <"; 
           key= "pick";
           }
   :edit_box{label= "x="; 
             width=12; 
             key= "x";
             mnemonic= "x";
             value=0.0;
            }
:edit_box{label= "y="; 
          width=12; 
          key= "y";
          mnemonic= "y";
          value=0.0;
         }
 }

在这里插入图片描述
2. 加框列(Boxed Column)
顾名思义加框列就是加了一个矩形框的列。
加框列的类型是boxed_column。有alignment、children_alignment、children_fixed_height、children_fixed_width、fixed_height、fixed_width、height、label、width 9个属性。
如果将上图所示列的定义的第一行":column{改为:boxed_column{label= “左下角点”;",即可定义一个加框列。
在这里插入图片描述
3. 互锁列(Radio Column)
若干个单选按钮组成的列即为互锁列。
互锁列的类型是radio_column。有alignment、children_alignment、children_fixed_height、children_fixed_width、fixed_height、fixed_width、height、label、width 9个属性。互锁列的特点是,它保证了其中只能有一个按钮的值为1,即处于打开状态。
所示互锁列的定义如下:

:radio_column{
  key= "size";
  :radio_button{label= "A&0";
    key= "a0";}
  :radio_button{label= "A&1 ";
    key= "a1";}
  :radio_button{label= "A&2 ";
    key= "a2";}
  :radio_button{label= "A&3";
      key= "a3";
      value=1;}
:radio_button{label= "A&4";
  key= "a4";}
:radio_button{label= "A&5";
  key= "a5";}
}

在这里插入图片描述
4. 加框互锁列(Boxed Radio Column)
加框互锁列就是加了一个矩形框的互锁列。
加框互锁列的类型是boxed_radio_column。有alignment、children_alignment、children_fixed_height、children_fixed_width、fixed_height、fixed_width、height、label、width 9个属性。
如果将上图所示互锁列的定义的第一行":radio_column{“改为”:boxed_radio_column{label=“幅面规格”;",即可定义一个加框互锁列。

在这里插入图片描述
5. 行(Row)
行是将若干控件构成水平分布的一个组件。
行的类型是row。有alignment、children_alignment、children_fixed_height、children_fixed_width、fixed_height、fixed_width、height、label、width 9个属性。

所示行的定义如下:

:row{
  :toggle{ label="纵向";
           key="dir"; }
  :edit_box{ label="W(mm)="; mnemonic="W"; key="w"; 
             value=420; }
  :edit_box{ label="H(mm)="; mnemonic="H"; key="h";      
             value=297; }
    }

在这里插入图片描述
6. 加框行(Boxed Row)
加框行就是加了一个矩形框的行。
加框行的类型是boxed_row。有alignment、children_alignment、children_fixed_height、children_fixed_width、fixed_height、fixed_width、height、label、width 9个属性。
如果将上图所示行的定义的第一行":row{“改为”:boxed_row{label=“图纸幅面”;",即可定义一个加框行。

在这里插入图片描述
7. 互锁行(Radio Row)
若干个单选按钮组成的行即为互锁行。
互锁行的类型是radio_row。有alignment、children_alignment、children_fixed_height、children_fixed_width、fixed_height、fixed_width、height、label、width 9个属性。互锁行中只能有一个选钮的值为1。
下图所示互锁行的定义如下:

:radio_row{
  key="size";
  :radio_button{label="A&0"; key="a0";}
  :radio_button{label="A&1"; key="a1";}
  :radio_button{label="A&2"; key="a2";}
  :radio_button{label="A&3"; key="a3"; value=1;}
  :radio_button{label="A&4"; key="a4";}
  :radio_button{label="A&5"; key="a5";}
          }

在这里插入图片描述
8. 加框互锁行(Boxed Radio Row)
加框互锁行就是加了一个矩形框的互锁行。
加框互锁行的类型是boxed_radio_row。有alignment、children_alignment、children_fixed_height、children_fixed_width、fixed_height、fixed_width、height、label、width 9个属性。
如果将上图 所示互锁行的定义的第一行":radio_row{“改为”:boxed_radio_row{label=“幅面规格”;",即可定义一个加框互锁行。
在这里插入图片描述
9. 对话框(dialog)
对话框本身也可以看作是一种控件,它是对话框的主体,不能单独使用,且至少要有一个确认(OK)或取消(Cancel)按钮。它的类型是dialog,有initial_focus、label、value 3个属性。标签是对话框的标题。属性value也可以作为标题,这样的标题在程序运行时可以被改变。initial_focus用于指定初始聚焦的控件。
见下图所示对话框及以下程序代码:

  sample:dialog {
   label = "简单的对话框实例";
   :text {label = "祝您成功!";}
   :button{key = "accept";
           label = "确认";                 简单的对话框实例
           is_default = true;
           fixed_width = true;
           alignment=centered;}
                 }

在这里插入图片描述

三.装饰性和信息类控件

装饰性和信息类控件无行为动作,也不能被选择,主要用于显示信息、加强视觉效果或协助对话框布局。

  1. 图像(Image)
    图像是在一个矩形区域内显示矢量图形、色彩填充块等的控件。它的类型是image。有alignment、aspect_ratio、color、fixed_height、fixed_width、height、is_enabled、is_tab_stop、key、mnemonic、width 11个属性。图像的值是点取图像时的位置,通过AutoLISP程序可以获取该位置,从而根据这些位置设计相应的动作。
    必须指定图像的width、height或二者之一和aspect_ratio属性。图像的内容由AutoLISP程序确定。
    所示图像的定义如下(注意:图像的内容由AutoLISP程序确定。):
:image{ width=30; 
   aspect_ratio=0.6; 
   key= "rect"; 
   color=graphics_background;
       }

在这里插入图片描述在这里插入图片描述
2. 文本(Text)
文本控件通常用于显示提示或警告信息。
文本的类型是text。有alignment、fixed_height、fixed_width、height、is_bold、key、label、value、width 9个属性。
属性label和value都可以存放用户要显示的信息,且外观相同。但是,label存放的信息是不变的,value存放的信息可以由AutoLISP程序赋以新的内容。若label和value同时存放了某些信息时,label的信息不予显示。下例定义了用属性label存放显示信息的对话框,外观见下图。
【例】 用属性label存放显示信息的对话框。

iwarn1:dialog{label="警告信息";
:text{label="选取的对象不是直线,请重新选择!";
             }
ok_cancel;
  }

在这里插入图片描述
3. 部分文本(text_part)
部分文本的类型是text_part,只有label一个属性。单独的部分文本与只含label属性的文本(Text)等效。多个部分文本可以组成单行的文本或段落,弥补了文本(Text)只能单行的不足,下例定义了显示两行信息的对话框,外观见下图。
【例】定义多行文本的对话框。

warn2:dialog{label="警告信息";
  :text_part 
    {label="选取的对象不是直线,"; }
  :text_part 
    {label="请重新选择!"; }
  ok_cancel;
 }

在这里插入图片描述
4. 串联(Concatenation)
串联的类型是Concatenation,没有属性,它的作用是把多个部分文本组成单行的文本。
下例是将两个部分文本组成单行的文本的实例,结果见下图。
【例】将两个部分文本组成单行的文本。

Warn3:dialog{label="警告信息";
  :concatenation 
  { :text_part {label="选取的对象不是直线,"; }
    :text_part { label="请重新选择!"; }
  }
  ok_cancel;
 }

在这里插入图片描述
5. 段落(Paragraph)
段落的作用是把多个部分文本组成段落,它的类型是paragraph,没有属性。下例是将三个部分文本组成一个段落的实例,结果见下图。

warn:dialog{label="警告信息";
  :paragraph{
     :concatenation {
      : text_part{ label="选取的对象不是直线,"; }
      : text_part{ label="请重新选择!"; }
                    }
  :text_part{label ="用单点方式选择直线 !"; }
            }
   ok_cancel;
}

在这里插入图片描述
6. 间隔(Spacer、Spacer_0、Spacer_1)
间隔(Spacer)也称空白衬垫,是一种特殊的控件,它具有不可见的大小和对齐方式,用来调整其它一些控件之间的间隔。如果不用间隔,系统将采用均匀的布局,因此,间隔只用在需要局部调整控件间隙的地方。
间隔控件的类型是spacer,有alignment、fixed_height、fixed_width、height、width 5个属性。
Spacer_0和Spacer_1是AutoCAD定义的具体控件。Spacer_0是Spacer的width、height为0的特例,Spacer_1是Spacer的width、height为1的特例。Spacer_0、Spacer_1可直接引用。
以下图为例,前4行每行是具有固定宽的3个按钮。底行最宽,它确定了所有的行宽。第一行没有插入间隔,这3个按钮的两端与底行对齐,且均匀分布。第二行插入间隔Spacer_0,Spacer_0虽然没有宽度,但它参与等分底行大于该行的间隔,或者认为该行增加了一个宽度为0的按钮。第三行插入间隔Spacer_1,相当于增加了一个宽度为1的按钮,再均匀分布。第四行插入宽度为4的间隔Spacer,相当于增加了一个宽度为4的按钮,再均匀分布。该对话框的定义见下例。
在这里插入图片描述
【例】用spacer、spacer_0、spacer_1调整控件间的间隙

spcr:dialog{label= “调整间隔实验”;

在这里插入图片描述

:row{//没有插入间隔
   :button{label="A0";key="a0";fixed_width=true;}
   :button{label="A1";key="a1";fixed_width=true;}
   :button{label="A2";key="a2";fixed_width=true;}
    }

在这里插入图片描述

:row{spacer_0;//插入间隔Spacer_0
  :button{label="B0";key="b0";fixed_width=true;}
  :button{label="B1";key="b1";fixed_width=true;}
  :button{label="B2";key="b2";fixed_width=true;}
    }

在这里插入图片描述

:row{spacer_1;//插入间隔Spacer_1
  :button{label="C0";key="c0";fixed_width=true;}
  :button{label="C1";key="c1";fixed_width=true;}
  :button{label="C2";key="c2";fixed_width=true;}
    }

在这里插入图片描述

:row{:spacer{//插入宽度为4的间隔Spacer
        width=4;
        fixed_width=true;
            }
  :button{label="D0";key="d0";fixed_width=true;}
  :button{label="D1";key="d1";fixed_width=true;}
  :button{label="D2";key="d2";fixed_width=true;}
    }
  ok_cancel_help_info;
}

未完待续哈

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值