| WideStudio Programming Guide | WideStudio Index Table of contents

> ## 标签事件过程范例

> ### 通过鼠标选择标签

> 以下是事件过程中最基本的鼠标动作的范例。每次鼠标被单击时，在标签上就显示被点击数。

>     # 在标签实例中设置WSEV_MOUSE_PRESS(MOUSE-PRESS)触发器
>     import mpfc

>     def cbop(object):
>       #(0)如果点击的是鼠标按键1以外的按键，立即返回
>       if ((mpfc.WSGIappMouse().getMouseStatus() & mpfc.WS_MOUSE_BTN1) == 0):
>         return;

>       # (A)获取 userValue 属性值
>       value = object.getProperty("userValue");
>       # (B)累加该属性值
>       val = value.getLong() + 1;
>       # (C)显示数值结果
>       object.setProperty("labelString",val);
>       # (D)保存修改后的 userValue 属性值
>       object.setProperty("userValue",val);
>       return
>     mpfc.WSGFfunctionRegister("chop",chop)

> 首先，在这个事件过程，对WSCvbtn，WSCvlabel 等拥有labelString 属性的项目进行MOUSE-PRESS 触发器设定。 每次鼠标键单击该项目时，该事件过程函数将被启动。事件过程被启动后，以(0)进行鼠标键的判断。如果鼠标键 为1以外，则按钮回车。请参照鼠标键判断的处理方法。
> 然后，(A)处取得userValue 的属性数字。userValue 属性初始值为0，用户可自由指定初期值并进行保持。 在这里，让项目记忆该数字是为了当多项项目被处理时，不发生各自的标签数字混乱。反过来，使用静态变量等 制作的话，全部的标签可利用同一个计数器进行显示。
> 然后，(B)处追加点击数，并在(C)进行显示。在(D)中将显示的数字作为userValue的 属性数进行保存，预备 下一个事项过程的启动。
> 如果触发器适用MOUSE-IN的话，应该可以显示鼠标出入回数。

> ### 通过鼠标选择标签

> 以下，我们试着制作可以选择的标签。当标签被选择时，颜色将发生变化。 这次，使用set/getUserData(函数)代替userValue 属性来保持选择状态。

>     # 设置 WSEV_MOUSE_PRESS(MOUSE-PRESS) 触发器
>     import mpfc

>     def cbop(object):
>       #(A)通过 getVariantData() 取值
>       value =  object.getVariantData("STATUS");
>       #(B) value 值如果是0返回被选择状态，如果是1则返回原来的显示状态
>       if (value.getLong() == 0):
>         #(C)将原来的颜色值保存在 userString 中
>         color = object.getProperty("backColor");
>         object.setProperty("userString",color);
>         #(D)设置为被选择状态
>         object.setProperty("backColor","slategray4");
>         #(E)保存状态
>         object.setVariantData("STATUS",1);
>       else:
>         #(F)获取原来的颜色
>         color =  object.getProperty("userString");
>         #(G)设置为原来的颜色
>         object.setProperty("backColor",color);
>         #(H)保存状态
>         object.setVariantData("STATUS",0);
>       return
>     mpfc.WSGFfunctionRegister("chop",chop)

> 在这个事件过程，对WSCvbtn，WSCvlabel 等具用labelString属性的项目，设定MOUSE-PRESS 触发器。
> 事件过程被启动时，在(A)处取得以setVariantData()函数记忆的数字。set/setVariantData()函数的初始值为0， 用户可自由指定或保持其值。可使用喜欢的名称，用void*进行保持。
> 然后，在(B)处辨别该值，在(C)处将原来的颜色保存于属性 userString，以便下次显示原来颜色的使用。 (D)处，显示所选择的颜色。(E)处，再次重新保持选择状态。
> 将颜色恢复到原来状态时，首先在(F)处取得保持的原来颜色，然后在(G)处显示该颜色。 最后在(H)处再次保持选择状态。

> ### 制作加亮鼠标标签

> 以下制作通过鼠标的进入及离开，显示加亮标签的事项过程。 当鼠标进入项目上时，标签加亮；当鼠标离开项目时，标签显示恢复。
> 这里重要的步骤是，设定鼠标进入时发生的触发器和鼠标出来时发生的触发器。
> 当事件过程被初始化启动时，可通过设定新事件过程的方法，实现一个事件过程中设定多个事件过程的处理。

>     import mpfc
>     #子过程1 //移入鼠标
>     def subop1(object):
>         #(A)userString 属性保存原来的颜色
>         color = object.getProperty("backColor");
>         object.setProperty("userString",color);
>         #(B)设置为被选择状态
>         object.setProperty("backColor","slategray4");
>         return
>     mpfc.WSGFfunctionRegister("subop1",subop1)

>     #子过程2 //移出鼠标
>     def subop2(object):
>         #(C)获取原来的颜色
>         color = object.getProperty("userString");
>         #(D)设置为原来的颜色
>         object.setProperty("backColor",color);
>     mpfc.WSGFfunctionRegister("subop2",subop2)

>     #设置 WSEV_INIT(INITIALIZE) 触发器
>     def cbop(object):
>        #在初始化触发器处理过程中，设置新的事件过程
>        #(E)设置新的事件过程  //子过程1
>        #过程名称="Highlight1"  函数名称=subop1  启动触发器=WSEV_MOUSE_IN
>        object.addProcedure("Highlight1","subop1",mpfc.WSEV_MOUSE_IN);
>        #(F)设置新的事件过程 //子过程2
>        #过程名称="Highlight2"  函数名称=subop2 启动触发器=WSEV_MOUSE_OUT
>        object.addProcedure("Highlight2","subop2",mpfc.WSEV_MOUSE_OUT);
>     mpfc.WSGFfunctionRegister("chop",chop)

> 通过子过程1，将鼠标界内的触发器启动，把标签的背景显示颜色做为加亮颜色。 子过程2，鼠标出界的触发器启动，把标签的背景显示颜色恢复为原来的颜色。 事件过程的实体，被初始化触发器设定在项目中，并通过(E)，(F)设定子过程1,2。 以后，当鼠标点入时，设定在新程序中的子过程将被实行。

> ### 制作可用鼠标选择的组化标签

> 对于同样区域上可配置的标签，可做成用鼠标选择可能的组化标签事项过程。 在该选择状态里用鼠标选择标签，即可保持该区域中被选择的标签。

>     import mpfc

>     # 设置 WSEV_MOUSE_PRESS(MOUSE-PRESS) 触发器
>     def cbop(object):
>       #(A)将 userValue 属性值作为标识符ID
>       val = object.getProperty("userValue");
>       #(B)设置为被选择状态(凹陷状态)
>       object.setProperty("shadowType",mpfc.WS_SHADOW_IN);
>       #(C)获得父对象中上次被选择的对象
>       parent = object.getParent();
>       target = parent.getVariantData("SelectedItem");
>       #(D)设置被选择的对象为原来的状态(突起状态)
>       if (mpfc.WSGIappObjectList().existInstance(target.getInstancePtr()) != mpfc.False):
>         target.getInstancePtr().setProperty("shadowType",mpfc.WS_SHADOW_OUT);
>       if (mpfc.WSGIappObjectList().existInstance(target.getInstancePtr()) != mpfc.False and
>           target.getInstancePtr().getInstanceName() == object.getInstanceName()):
>         #(E)判断是否双击选择对象
>         #双击选择时，清除被选择状态
>         parent.setVariantData("GroupValue",0);
>         parent.setVariantData("SelectedItem",0);
>       else:
>         #(F)单击选择时，在父对象中注册为被选择的对象
>         parent.setVariantData("GroupValue",val);      # ID
>         parent.setVariantData("SelectedItem",mpfc.WSCvariant(object));  # WSCbase 实例
>     mpfc.WSGFfunctionRegister("chop",chop)

> 对组化标签，各自需具有可供识别的ID,并设置为 userValue 属性的值。
> (A) 取得userValue 属性中设置的 ID 。
> (B)为了表现可进入选择，显示选择状态。
> (C)取得被选择的对象。这个范例中，首先选择组化标签共有的父对象。
> (D)将被选择对象的显示状态恢复到未选择状态。
> (E)被选择的对象(target)和已经被选择的对象(object)相同的情况，即选择2次时，选择状态被解除。 父对象中所设定的值和项目将初期化。
> (F)在父对象中设置被重新选择的对象。

Document Release 3.70 for WideStudio ver 3.70, May 2004

WideStudio documents index | Table of contents

Copyright(C) WideStudio Development Team, 1999-2004 | Last modified: May 25, 2004