文档库 最新最全的文档下载
当前位置:文档库 › IDL入门教程十三

IDL入门教程十三

IDL入门教程十三
IDL入门教程十三

附录A 组件的事件结构

事件结构的定义

事件结构包含了特定组件的相关信息。每个事件都产生于它自身的、特定的事件结构中,然后被发送到事件处理模块。事件结构可以是命名的也可以是匿名的IDL结构变量。使事件结构与其它结构区分开来的是,事件结构有ID、Top和Handler三个字段。这三个字段都是长整型。下面列举了由IDL组件创建或返回的事件结构。

公共字段的定义

字段ID,通常是长整型,是产生事件的组件的唯一标示符,

产生事件的组件通常是组件层次结构中的一部分。那么字段Top就是该层次结构中顶级base的唯一标示符,它通常也是一个长整型的数。

事件产生的事件结构都要发送到事件处理程序中。每个事件处理程序都与某一个组件联系在一起。而字段Handler,就是那个与事件处理程序相联系的组件的标识符。它通常是个长整型的数.

这些公共字段的详细信息以及它们是如何定义的,请参阅256页的“事件结构中的公共字段”

基本组件的事件结构

base组件

{WIDGET_BASE, ID:0L, Top:0L, Handler:0L, X:0, Y:0}

只有顶级base,并且是在用户改变其大小的情况下才会产生事件。要产生事件,那么关键字TLB_Size_Events必须被显式地指定。字段X和Y是顶级base的尺寸大小,以像素为单位。Base的尺寸大小并不包含窗口的任何边框。

按钮组件

{WIDGET_BUTTON, ID:0L, Top:0L, Handler:0L, Select:0}

如果按钮被选中,那么字段Select被设置为1;如果按钮被释放,那么就被设为0。一般的按钮在被释放时并不产生事件,因此Select字段一直为1。然而,单选按钮对选中和释放动作会分别产生事件。

{WIDGET_DRAW, ID:0L, Top:0L, Handler:0L, Type:0, X:0, Y:0, Press:0, Release:0,Clicks:0}

字段Type将告诉事件的类型,它可能的值有:鼠标按下(0);鼠标松开(1);鼠标移动(2);视点滚动(3)和显示(4)。上面所有的事件都必须显式地指定,否则相应的事件是不会产生的。

字段X和Y给出了事件发生时的设备或屏幕坐标,绘图组件的左下角为坐标原点。字段Press和Release都是位掩码,当鼠标被按下或释放时,它们的值就分别存在了。其中1表示鼠标左键,2表示鼠标中键,4表示鼠标右键。如果是个鼠标移动事件,那么Press和Release都被设置为0。

当鼠标单击时,字段Clicks返回1,双击时返回2。

下拉式列表组件

{WIDGET_DROPLIST, ID:0L, Top:0L, Handler:0L, Index:0L}

字段Index返回所选择列表项的索引号。通过它,可以对最初赋予该下拉式列表的数组进行引用。(数组应该存放于组件的用户值中或其他什么地方。)

标签组件

标签组件本身并不产生事件,但可以通过它来设置Timer事件。

列表组件

{WIDGET_LIST, ID:0L, Top:0L, Handler:0L, Index:0L, Clicks:0L }

字段Index返回所选项的索引号,通过索引号,可以对最初赋予给列表的数组进行引用。字段Clicks返回1或2,这取决于列表项是如何选择的。如果列表项被双击选中,Clicks 返回2。主意,在事件处理程序中,单击和双击的信息都可以获得。

滑动条组件

{WIDGET_SLIDER, ID:0L, Top:0L, Handler:0L, Value:0, Drag:0}

字段Value返回滑动条的新值。当滑动条在拽动过程中,字段Drag返回1,拽动操作结束,则Drag返回0。注意,只有在UNIX操作系统上,并且设置了Drag关键字,滑动条才会产生Drag事件。

插入单个字符事件

{WIDGET_TABLE_CH, ID:0L, Top:0L, Handler:0L, Type:0, Offset:0L, CH:0B, X: 0L, Y:0L}

字段Offset是包含的是一个以0为基数的插入点位置,插入的字符在插入点之后。字段Ch是当前插入字符的ASCII码,字段X和Y,则表示的是当前单元格在表单中的位置,也是以0为基数的。

插入字符串事件

{WIDGET_TABLE_STR, ID:0L, Top:0L, Handler:0L, Type:1, Offset:0L, Str:’’, X: 0L, Y:0L }

字段Str是要插入的字符串。

删除字符串事件

{WIDGET_TABLE_DEL, ID:0L, Top:0L, Handler:0L, Type:2, Offset:0L, Length:0L, X: 0L, Y:0L }

字段Offset是要删除的第一个字符所在的位置,它是以0为基数的。同时它也是下一个字符的插入点。字段Length表示删除字符的个数。

选择文本是事件

{WIDGET_TABLE_TEXT_SEL, ID:0L, Top:0L, Handler:0L, Type:3, Offset:0L, Length:0L, X: 0L, Y:0L }

当插入点的位置发生变化时,这个事件就会被引发。字段Offset是所选文本的第一个字符的位置,以0为基数。字段Length为所选字符的个数。如果Length为0,则表明没有选中,且字符插入点也被设置为Offset值。

选择单元事件

{WIDGET_TABLE_CELL_SEL, ID:0L, Top:0L, Handler:0L, Type:4, Sel_Left:0L, Sel_Top:0L, Sel_Right:0L, Sel_Bottom:0L}

当前所选择的单元格发生变化时,这个事件会被引发。所选择的单元格范围由字段Sel_Left、Sel_Top、Sel_Right和Sel_Bottom确定,它们都是以0为基数。当所选择的单元格在取消选择的事件发生时(选择发生改变或点击表单左上角会导致这个事件的发生),字段Sel_Left、Sel_Top、Sel_Right和Sel_Bottom的值都为-1。

注意,这就意味着,当选择焦点从一个已选中的单元格到一个新单元格时,会产生两次WIDGET_TABLE_CELL_SEL事件。在程序中,要将选择和取消选择区分开来。

改变行高事件

{WIDGET_TABLE_ROW_HEIGHT, ID:0L, Top:0L, Handler:0L, Type:6, Row:0L, Height:0L}

当用户改变表单给定行的高度时会引发这个事件。字段Row包含了所选定行的值(以0 为基数),字段Height包含的是改变后的高度。

改变列宽事件

{WIDGET_TABLE_COLUMN_WIDTH, ID:0L, Top:0L, Handler:0L, Type:7, Column:0L, Width:0L}

当用户改变表单给定列的宽度时会引发这个事件。字段Column包含了所选定列的值(以0 为基数),字段Width包含的是改变后的高度。

无效数据事件

{WIDGET_TABLE_INVALID_DATA, ID:0L, Top:0L, Handler:0L, Type:8, Str:’’, X:0L ,Y:0L}

当这个事件发生时,所在的单元格的数据保持不变。用户输入的无效数据保存在字段Str 中。单元格的位置由字段X和Y来确定。

文本组件

插入字符事件

{WIDGET_TEXT_CH,ID:0L, Top:0L, Handler:0L, Type:0, Offset:0L, Ch:0B}

字段Offset是当前插入点的位置(以0为基数)。字符Ch为插入字符的ASCII码。

插入字符串事件

{WIDGET_TEXT_STR,ID:0L, Top:0L, Handler:0L, Type:1, Offset:0L, Str:’’ }

字段Str为插入的字符串。

删除字符串事件

{WIDGET_TEXT_STR,ID:0L, Top:0L, Handler:0L, Type:2, Offset:0L, Length:0L } 字段Offset为要删除的第一个字符串的位置(以0为基数),它同时也是下一个字符的插入点。字段Length为要删除的个数。

文本选择事件

{ WIDGET_TEXT_STR,ID:0L, Top:0L, Handler:0L, Type:3, Offset:0L, Length:0L } 插入点的改变会引发这个事件的产生。字段Offset为所选择的第一个字符的位置(以0为基数)。字段Length为要所选择字符的个数。Length表明没有选中字符,并且插入点被设置为Offset的值。

复合组件的事件结构

CW_Animate

{ID:0L, Top:0L, Handler:0L, Action:0L}

字段Action中唯一允许的字符串就是“DONE”

CW_Arcball

{ ID:0L, Top:0L, Handler:0L, Value:FltArr(3,3)}

字段Value包含了新的旋转矩阵。

CW_BGroup

{ ID:0L, Top:0L, Handler:0L, Select:0, Value:*}

字段Select包含了新的旋转矩阵。字段Value可以是按钮的Index、ID、Name和按钮用户值,这取决于组件创建时情况。

CW_Clr_Index

{CW_COLOR_INDEX, ID:0L, Top:0L, Handler:0L, Value:0}

字段Value为所选择的颜色的索引号。

CW_Color_Sel

{COLORSEL_EVENT, ID:0L, Top:0L, Handler:0L, Value:0}

字段Value为所选择的颜色的索引号。

CW_DefROI

这个复合组件有内部事件处理程序,并且不会产生任何外部事件。

CW_Field

{ ID:0L, Top:0L, Handler:0L, Value:’’,Type:0, Update:0}

字段Value包含了文本组件中的值。字段Type指定了数据的类型,它可能的值有:0(字符串),1(浮点数),2(整数)或3(长整型)。如果没有更新,则字段Update返回0,否则返回1。

CW_Form

{ ID:0L, Top:0L, Handler:0L, Tag:’’,Value:0, Quit:0}

字段Tag包含了那些发生了变化的字段标签。字段Value则是包含了变化后的新值;字段;如果Quit被设置,那么Quit返回0,否则返回1。

CW_Flisder

{ ID:0L, Top:0L, Handler:0L,Value:0.0, Drag:0}

字段Value返回滑动条的当前值。当滑动条在拽动过程中,字段Drag返回1,拽动操作结束,则Drag返回0。

CW_Orient

当组件内部不同子组件改变变换矩阵时,这个复合组件产生不同的事件。一般来讲,这个组件在字段ID第一次发生变化时,将内部组件所产生的的事件直接传送到本组件的顶级base中。大多数事件处理程序都忽略该复合组件的事件,因为系统变量!P.T在任何时候都是自动更新的。

CW_PDMenu

{ID:0L, Top:0L, Handler:0L, Value:*}

字段Value既可以是按钮组件的Index、ID、Name,也可以是按钮的Full_Name,这取决于按钮组件是如何创建的。

CW_RGBSlider

{ID:0L, Top:0L, Handler:0L, R:0B, G:0B, B:0B}

字段R、G、B分别代表所选择颜色的红、绿、蓝的值。

CW_Zoom

{ZOOM_EVENT,ID:0L, Top:0L, Handler:0L, XSize:0L, Ysize:0L,

X0:0L, Y0:0L, X1:0L, Y1:0L }

字段Xsize和Ysize包含了缩放后图像的大小,字段X0,Y0,X1,Y1分别包含了原始图像左下角和右上角的坐标。

组件程序的事件结构

Xcolors

{XCOLORS_LOAD, ID:0L, Top:0L, Handler:0L, R:BytArr(!D.Table_Size), G:BytArr(!D.Table_Size), B:BytArr(!D.Table_Size), Index:0}

Xcolors将向由NotifyID所标识的组件发送事件。字段R、G、B分别包含了当前颜色表的红、绿、蓝的向量值。字段Index设置为-1,或者在载入了颜色表后设置为颜色表的索引值。

其他组件的事件结构

下面所列出的是组件产生的其他事件。

键盘焦点事件

{WIDGET_KBRD_FOCUS, ID:0L, Top:0L, Handler:0L, Enter:0L}

某些组件,如文本框,在设置了关键字KBRD_FOCUS_EVENTS后可以产生键盘焦点事件。当这些组件获得键盘焦点时(字段Enter设置为1)或失去键盘焦点时(字段Enter 设置为0)会产生这个事件。

组件退出请求事件

{WIDGET_KILL_REQUEST, ID:0L, Top:0L, Handler:0L}

设置了关键字TLB_KILL_REQUEST_EVENTS的顶级base在窗口管理器销毁该组件(比如,用户用鼠标关闭窗口,而不是点击Quit按钮)时就会接收到这个事件。不管销毁事件是来自Quit按钮,还是来自窗口管理器,调用CleanUp过程来处理任何组件的销毁事件会更加简单。(CleanUp过程的详细信息请参阅278页的“使用CleanUp过程来防止内存泄漏”)

组建计时器事件

{WIDGET_TIMER, ID:0L, Top:0L, Handler:0L}

事件处理程序在接收到计时器事件时可以做任何事情。字段ID是用来标识设置计时器的组件。

组件跟踪事件

{WIDGET_TRACKING, ID:0L, Top:0L, Handler:0L, Enter:0}

每次鼠标进入到组件(字段Enter设置为1)或从组件出来(字段Enter设置为0)时都产生这个事件。对于指定的组件,如果要产生这个事件,则必须设置关键字Tracking_Events。注意,在Windows操作系统下,跟踪事件运行得不是很好。

附录B 数据文件描述

在这里,列举了本书所涉及到的有关数据文件。这些文件可以从下面网站中下载到:ftp://https://www.wendangku.net/doc/9a7552816.html,/pub/dfanning/outgoing/coyote

相关文档