全国服务QQ:136677098
软件开发资讯
当前位置:旗恒科技 > 新闻资讯 > 软件开发资讯 > 易语言控件的通用属性方法和事件

易语言控件的通用属性方法和事件
TAG标签:易语言 编程技术 方法事件     发布时间:2017-08-27
一、控件的通用“属性”
  控件的通用属性主要有:名称、标题、禁止、可视、鼠标指针、字体、边框、可停留焦点、左边、顶边、宽度、高度、标记、备注等。
  上述列出的属性中,只有名称、左边、顶边、宽度、高度、标记、备注是每个控件都拥有的属性,其它属性虽不是每个控件都有,但也非常常见,故也认为它们是控件的通用属性。通用属性中除了名称和标题外,一般不必刻意设置——易语言自动为其取最常见的值。
  除了通用属性外,控件一般都还有自己的特有属性。
  下面逐个讲解控件的通用“属性”:
  1、名称
  控件的唯一标识。好比现实中人的身份证。放到程序中控件必须有名称——如果程序员未特别命名,易语言自动为它按序号命名(如:按钮1、按钮2……编辑框1、编辑框2……等)。要想在代码中操作控件的属性方法和事件,就必须指定目的控件的名称(如:按钮1.标题)。
  [注:如果程序较为复杂——用到的控件较多,最好自己为控件命名。为控件取一个有意义的名称是一个好的习惯。我个人认为,一个好的名称 = 功能 + 控件类型,如“确定按钮”“取消按钮”“密码编辑框”等等。另外,切不可用代码改动控件的名称!]
  2、标题
  显示于控件上的文字。主要是给程序的使用者看的,通常作为某种提示。因控件的不同,标题出现的出现的位置可能也不一样。如:窗口、通用对话框等有标题栏的控件,标题出现在标题栏中;而按钮、标签、单选框、选择框、分组框、菜单等没有标题栏的控件,标题出现在控件中央(或偏上下左右)。
  3、禁止
  控制控件可否被程序使用者操作。它的值只能为真或假,默认为假,即不禁止。被禁止的控件一般表现为:上面的文字(即标题)变为灰色,单击它没有任何反应。
  4、可视
  控制控件可否被程序使用者看到。它的值只能为真或假,默认为真,即可以被看到。
  5、鼠标指针
  当鼠标移动到控件上方时,鼠标指针的形状。本属性一般不必改动——易语言根据控件的不同,会自动为其取一个默认值(最常见的),如:按钮上为,编辑框上为等。
  6、字体
  标题文字的字体:包括字体名称、字体大小、加粗、倾斜、下划线、删除线等。注意,字体颜色一般是不生效的,标题文字的颜色由另外的属性(文本颜色)控制。
  7、边框
  控制边框的样式。边框一般有:0.无边框、1.凹入式、2.凸出式、3.浅凹入式、4.镜框式、5.单线边框式等几种样式。对标签控件而言,它还有另外一个样式:6.渐变镜框式。而对于窗口来说,它的样式就完全不同:0.无边框、1.普通可调边框、2.普通固定边框、3.窄标题可调边框、4.窄标题固定边框、5.镜框式可调边框、6.镜框式固定边框等。
  8、可停留焦点
  设置当用户使用 TAB 或光标键在各单元之间移动焦点时是否允许在本单元上停留。它的值只能为真或假,默认为真。如果控件的可停留焦点属性为真,则控件还有另外一个属性(停留顺序)控制焦点停留的顺序——即当按TAB或光标键时,窗口上各控件获得输入焦点的顺序。(如果按钮上有一个黑色细点组成的虚框,或者编辑框中有光标在闪烁,表示它正在拥有输入焦点。)
  9、左边、顶边、宽度、高度
  左边、顶边分别是控件左上角点的横纵坐标,宽度、高度就分别是控件的宽度和高度。四者的单位均为象素。注意左边、顶边是相对于控件的“父控件”而言的,比如我们在画板中“画”一个按钮,它的左边、顶边就是相对于画板左上角的坐标——这里画板充当了“父控件”(或称容器控件)。易语言中可以充当父控件的控件,除了窗口和画板,还有选择夹、分组框、图片框、外形框等。
  (父控件和子控件的关系:1、如果父控件被销毁、禁止或者隐藏,其内部的所有控件将会自动被销毁、禁止或者隐藏;2、子控件始终被限制在父控件的内部,其坐标位置相对于父控件的左上角;3、父控件内的所有子控件之间存在层次关系,但是父控件与子控件之间不存在层次关系。)
  (当任一可视控件被“画”到或“粘贴”到某“容器控件”——可充当父控件的控件——中时,父子关系就自动形成。要解除控件的父子关系,可将父控件中的子控件删除或剪切掉。)
  10、标记、备注
  标记:记录控件的附加文本信息。备注:对控件的备注信息,主要是程序员自己使用。二者的不同在于,标记可以在程序中使用,而备注不可以——类似调用“控件名.备注”是非法的。
  二者在实际编程中很少使用。标记还偶尔用到;备注,我敢说,99%的易友是从来不用的。
  二、控件的通用“方法”
  控件的通用方法主要有:取窗口句柄()、销毁()、获取焦点()、可有焦点()、取用户区宽度()、取用户区高度()、刷新()、移动()、调整层次()、弹出菜单()、发送信息()、投递信息()、取标记单元()等。其中销毁()、获取焦点()、移动()、弹出菜单()等较为常用。此外还有五个关于“重画”的方法,很少用到。相关例程
  注:所谓“方法”,说白了也是函数(子程序),只不过“方法”是与特定控件相关联的。“方法”与普通函数(如系统库函数和自定义函数)在调用的语法上是不一样的——“方法”的调用:控件名称.方法名称([参数...]),如 _启动窗口.销毁();普通函数的调用:函数名称([参数...]),如 取系统时间()。
  注:“方法”是“控件的”方法,“方法”总是依附于某个控件的。离开了控件,“方法”根本无从谈起。同样的道理,“属性”是“控件的”属性,“事件”是“控件的”事件。属性、方法、事件,都和控件密切相关。
  下面逐个讲解控件的通用“方法”:
  1、取窗口句柄()
  功能:取控件的“窗口句柄”,并以返回值的形式返回。
  语法:控件名称.取窗口句柄()
  应用实例:1、窗口句柄 = _启动窗口.取窗口句柄()
  2、窗口句柄 = 编辑框1.取窗口句柄()
  //分别取得“_启动窗口”“编辑框1”的窗口句柄,并存到整数型变量“窗口句柄”中。
  [注:是 取“窗口句柄”,而不是取“窗口的”句柄。“窗口句柄”是一个专有名词,一般在API调用时使用。。取窗口句柄()不但能够取“窗口”的“窗口句柄”,也能取“控件”的“窗口句柄”(窗口本身就是一个特殊的控件。)][另注:只有可视控件才有“窗口句柄”;非可视控件是没有“窗口句柄”的,不能应用取窗口句柄()方法——比如“窗口句柄 = 时钟1.取窗口句柄()”是非法的。]
  2、销毁()
  功能:销毁控件:使其从屏幕上消失,并在内存中彻底删除。
  语法:控件名称.销毁()
  应用实例:1、_启动窗口.销毁()
  2、按钮1.销毁()
  //分别销毁“_启动窗口”和“按钮1”。第二种用法少见,因为普通控件总是某个窗口的子控件,当窗口被销毁时,子控件也被自动销毁,所以一般不去专门销毁普通控件(只要销毁窗口就可以了)。
  3、获取焦点()
  功能:使控件获得输入焦点。
  语法:控件名称.获取焦点()
  应用实例:1、编辑框1.获取焦点()
  //使“编辑框1”获得输入焦点。这一句编程中经常用到。(如果编辑框中有光标——通常是闪烁的黑色竖线——则表示它已经获取输入焦点,否则表示还没有获取输入焦点。)
  4、可有焦点()
  功能:判断控件是否拥有输入焦点,返回真或假。
  语法:控件名称.可有焦点()
  应用实例:1、x = 编辑框1.可有焦点()
  //如果“编辑框1”当前拥有输入焦点,x的值为真,否则为假——x要事先定义为逻辑型变量。
  5、取用户区宽度()、取用户区高度()
  功能:取得控件“用户区”的宽度/高度。
  语法:控件名称.取用户区宽度()/取用户区高度()
  应用实例:1、宽 = _启动窗口.取用户区宽度()
  2、高 = _启动窗口.取用户区高度()
  //分别取得“_启动窗口”的“用户区”宽度和高度,并存到整数型变量“宽”和“高”中。
  [注:“用户区”——对窗口而言,用户区域为窗口区域减去标题栏、菜单栏、边框后的区域;对普通控件而言,用户区域等同于其窗口单元区域。]
  6、刷新()
  功能:重新显示控件中的内容。与“刷新”屏幕是一个道理。
  语法:控件名称.刷新()
  应用实例:1、_启动窗口.刷新()
  2、画板1.刷新()
  //分别刷新“_启动窗口”和“画板1”。如果画板的自动重画属性为假(默认值),则经常刷新画板是必要的。如果嫌麻烦,干脆把画板的自动重画设为真——只是多占用些系统资源而已。
  7、移动()
  功能:改变控件的位置和尺寸。
  语法:控件名称.移动([左边],[顶边],[宽度],[高度])
  参数:分别对应移动后控件的左边、顶边、宽度和高度。四个参数均可省略。
  应用实例:1、_启动窗口.移动(0,0,100,200)
  2、按钮1.移动(,,100,50) 等效于 按钮1.移动(-1,-1,100,50)
  //把“_启动窗口”移动到(0,0),且把其宽度和高度改为100和200;不移动“按钮1”的位置,只把其宽度和高度改为100和50。(单位是象素。)
  [注:移动()可同时设置控件的四个属性,如果省略某参数(或置为-1)则不改变原来的值。本“方法”的执行效率,与“分别为各属性赋值”相比,要高出许多倍,特别是在循环中。推荐使用。]
  8、调整层次()
  功能:调整控件所处层次。
  语法:控件名称.调整层次([欲调整到的层次])
  参数:整数型,可以为以下常量之一: 1、#顶层; 2、#底层; 3、#最高层; 4、#次高层。如果被省略,默认为“#顶层”。
  应用实例:1、_启动窗口.调整层次(#最高层) 或 _启动窗口.调整层次(3)
  2、按钮1.调整层次(#顶层) 或 按钮1.调整层次(1)
  //把“”调整到最高层;把“按钮1”调整到顶层。
  [注:做个实验,在窗口上画一个“按钮1”,再画一个“按钮2”,然后把“按钮2”拖到“按钮1”上,会发现“按钮2”把“按钮1”遮住了!这就说明了两者的层次关系:“按钮2”在“按钮1”的上方,高一个层次。][注:#最高层——机器中所有程序的所有窗口的最前面;#顶层——本程序内所有控件的最前面。#底层与#顶层 相对;#次高层 位于#最高层 下一层。][注:对于普通控件,通常调整到#顶层就可以了;对于窗口这个特殊控件,有时需要调整到#最高层——在所有窗口的最前面。]
  9、弹出菜单()
  功能:弹出菜单(通常是右键菜单)
  语法:控件名称.弹出菜单( 欲弹出的菜单,[水平显示位置],[垂直显示位置])
  参数:第一个参数是欲弹出的菜单;后两个是菜单弹出后左上角的横纵坐标,如省略将自动使用当前鼠标位置。
  应用实例:1、弹出菜单(文件,,)
  //在当前鼠标所在位置弹出“文件”菜单。这种写法最常见。这行代码通常都放在某控件的“鼠标右键被按下”或“鼠标右键被放开”事件处理子程序中。弹出菜单()前面通常不必带控件名称。
  10、发送信息()、投递信息()
  功能:将指定信息发送到控件。
  语法:控件名称.发送信息(信息值,参数1,参数2)
  控件名称.投递信息(信息值,参数1,参数2)
  参数:第一个参数是欲发送或投递的信息值;后两个是辅助信息。
  应用实例:1、编辑框1.发送信息(769,0,0) //复制“编辑框1”中被选中的文本。
  2、编辑框1.发送信息(770,0,0) //把剪贴板中的文本粘贴到“编辑框1”。
  [注:发送信息、投递信息的区别:前者并等待且取回信息反馈值;后者不等待直接返回。]
  11、取标记单元()
  功能:前窗口中具有指定标记数值文本的单元(控件)。
  语法:控件名称.取标记单元(标记数值)
  参数:整数型,欲寻找单元的“标记”属性的数值形式。(“123”->123)
  应用实例:1、取标记单元(123)
  //如果此前令“按钮1”的“标记”属性为“123”,则上述代码的返回值为“按钮1”。
  三、控件的通用“事件”
  控件的通用“事件”主要有:1、鼠标左键被按下;2、鼠标左键被放开;3、被双击;4、鼠标右键被按下;5、鼠标右键被放开;6、鼠标位置被移动;7、按下某键;8、放开某键;9、字符输入;10、获得焦点;11、失去焦点。易语言中的可视控件,都有上述事件。除了这些通用事件,控件一般都还有自己的专有事件。
  事件的产生由易语言系统全权负责。当某一事件产生时,系统将自动调用该事件所对应的“事件处理子程序”。编程者所要做的,只是根据需要选择要响应的事件,并在该事件的“事件处理子程序”中输入代码即可。
  每一个事件都有它的产生时机。有的事件其产生时机非常明显,如鼠标左键被按下、鼠标左键被放开……等,就是在鼠标左键被按下或放开时产生;而有的事件其产生时机就不太明显,这个到时我会分别介绍。
  在《易语言知识库》中,除了获得焦点和失去焦点,对其它事件的解释都有这么一句:“处理本事件的子程序如果返回假,则取消本事件,不再将此事件传递到所属对象上去;如果不返回值或返回真,则将此事件继续传递到所属对象上去。” 相信大家会比较迷惑,让我们做个试验:在设计窗口中放一个编辑框控件,在“_编辑框1_鼠标右键被放开”中输入: 鸣叫() 再加一行代码:返回(假) 运行程序,在编辑框中按右键时,只会有喇叭或音箱叫一声,却不再弹出快捷菜单了。(我们都知道,在编辑框中按下鼠标右键并放开时,通常会弹出一快捷菜单。)分析一下为什么会这样呢?因为编辑框的“鼠标右键被放开”事件被我们半路拦截了,编辑框根本没有收到“鼠标右键被放开”事件,也就是说,被我们做了手脚,它还蒙在鼓里呢^_^ (再考虑一下,如果前面代码只写鸣叫()而不加返回(假)呢?结果是,在编辑框中右键放开时,先叫一声再弹出菜单。不信您试一试!例程)
  下面逐个讲解控件的通用“事件”:
  1、鼠标左键被按下
  事件的产生时机:鼠标左键被按下时。
  语法:逻辑型 _控件名称_鼠标左键被按下(横向位置,纵向位置,功能键状态)
  参数:前两个参数指示当前鼠标相对控件左上角的横纵坐标;最后一个参数“功能键状态”描述事件产生时功能键(Ctrl,Shift,Alt)的状态,其值可能为以下之一或之和:1、#Ctrl键状态; 2、#Shift键状态; 4、#Alt键状态。要判断是否同时按下了某个功能键,在此参数的值与想要得知的功能键的状态常量值之间使用“位与”命令进行比较。如果所得的结果不为零,则表示同时按下了此功能键。例程。
  2、鼠标左键被放开
  事件的产生时机:鼠标左键被放开时。
  语法/参数:同上
  3、被双击
  事件的产生时机:被鼠标双击时。
  语法/参数:同上
  4、鼠标右键被按下
  事件的产生时机:鼠标右键被按下时。
  语法/参数:同上
  5、鼠标右键被放开
  事件的产生时机:鼠标右键被放开时。
  语法/参数:同上
  //通过在此事件中,用弹出菜单()“方法”弹出右键菜单。例程。
  6、鼠标位置被移动
  事件的产生时机:鼠标位置被移动时。
  语法/参数:同上
  //当鼠标指针在控件上移动时,将连续产生一系列本事件。例程。
  7、按下某键
  事件的产生时机:用户按下键盘上的任意键时。
  语法:逻辑型 _控件名称_按下某键(键代码,功能键状态)
  参数:“键代码”——被按下的键的ASCII码,均已被定义为常量,见常量表。
  “功能键状态”——见“鼠标左键被按下”事件中的描述。
  //常量表:见《易语言知识库》或 系统支持库。
  8、放开某键
  事件的产生时机:用户放开键盘上的任意键时。
  语法:逻辑型 _控件名称_按下某键(键代码,功能键状态)
  参数:同上
  9、字符输入
  事件的产生时机:用户按下键盘上的可打印字符键(包括回车、退格键)时。
  语法:整数型 _控件名称_字符输入(字符代码)
  参数:“字符代码”——被按下的字符键的ASCII码,均已被定义为常量,见常量表。
  //本事件与按下某键、放开某键的区别:前者只接受可打印字符键;而后两者可接受所有键。
  //“在用户事件处理子程序中,将事件处理完毕后可返回一个字符代码,用于替换将继续传递到所属对象上字符键事件中的字符代码;如果返回 0 ,则取消此事件,不再将此事件传递到所属对象上去;如果事件处理完毕后没有返回值,则将本字符键事件继续原样传递到所属对象上去。”——这是《易语言知识库》中的原话,不易理解。Liigo给大家举个例子:扔一个香蕉给猴子,它会高兴的大叫。但如果这个香蕉在半空被程咬金拦截了呢,猴子还会高兴的大叫吗?显然不会,而且它什么反应也没有,因为它压根儿就不知道有香蕉扔过来。有兴趣的请看例程。
  10、获得焦点
  事件的产生时机:当控件获得输入焦点时。
  语法:_控件名称_获得焦点()
  //如果按钮上有一个黑色细点组成的虚框,或者编辑框中有光标在闪烁,表示它正在拥有输入焦点。其它控件类似。一台机器上的所有程序的所有窗口中,同一时刻有且只有一个控件拥有输入焦点。
  //本事件和下面失去焦点的事件一样,只有“可停留焦点的”控件才拥有,如:编辑框、画板、按钮、选择框、单选框、组合框、列表框、选择列表框、横向滚动条、纵向滚动条、滑块条、日期框、月历、驱动器框、目录框、文件框、颜色选择器、超级链接框、调节器、表格、数据源、图形按钮等。
  11、失去焦点
  事件的产生时机:当控件失去输入焦点时。
  语法:_控件名称_失去焦点()