• 通用右键弹出菜单/及调用代码


    菜单:
    $PBExportHeader$m_compopup.srm
    $PBExportComments$通用右键弹出菜单 common popup menu.Create by lenya on 2010/9/30
    forward
    global type m_compopup from menu
    end type
    type m_item1 from menu within m_compopup
    end type
    type m_item2 from menu within m_compopup
    end type
    type m_item3 from menu within m_compopup
    end type
    type m_item4 from menu within m_compopup
    end type
    type m_item5 from menu within m_compopup
    end type
    type m_item6 from menu within m_compopup
    end type
    type m_item7 from menu within m_compopup
    end type
    type m_item8 from menu within m_compopup
    end type
    type m_item9 from menu within m_compopup
    end type
    type m_item10 from menu within m_compopup
    end type
    type m_item11 from menu within m_compopup
    end type
    type m_item12 from menu within m_compopup
    end type
    type m_item13 from menu within m_compopup
    end type
    type m_item14 from menu within m_compopup
    end type
    type m_item15 from menu within m_compopup
    end type
    global type m_compopup from menu
    m_item1 m_item1
    m_item2 m_item2
    m_item3 m_item3
    m_item4 m_item4
    m_item5 m_item5
    m_item6 m_item6
    m_item7 m_item7
    m_item8 m_item8
    m_item9 m_item9
    m_item10 m_item10
    m_item11 m_item11
    m_item12 m_item12
    m_item13 m_item13
    m_item14 m_item14
    m_item15 m_item15
    end type
    end forward
    
    type items from structure
        string        sname
        string        stext
        string        sevent
    end type
    
    global type m_compopup from menu
    m_item1 m_item1
    m_item2 m_item2
    m_item3 m_item3
    m_item4 m_item4
    m_item5 m_item5
    m_item6 m_item6
    m_item7 m_item7
    m_item8 m_item8
    m_item9 m_item9
    m_item10 m_item10
    m_item11 m_item11
    m_item12 m_item12
    m_item13 m_item13
    m_item14 m_item14
    m_item15 m_item15
    end type
    global m_compopup m_compopup
    
    type variables
    PRIVATE:
    CONSTANT UINT ITEMCOUNT = 15 //菜单总项数目.
    
    graphicobject igo_parent //弹出菜单所属的parentwindow
    
    
    end variables
    
    forward prototypes
    public function integer setitemenabled (unsignedinteger ai_itemorder, boolean ab_enable)
    public function integer setitemvisible (unsignedinteger ai_itemorder, boolean ab_visible)
    public function integer setitemchecked (unsignedinteger ai_itemorder, boolean ab_checked)
    public function integer initmenu (graphicobject ago_parent, string as_items)
    public function integer initmenu (graphicobject ago_parent, string as_items, string as_eventnames)
    end prototypes
    
    public function integer setitemenabled (unsignedinteger ai_itemorder, boolean ab_enable);/////////////////////////////////////////////////////////////////////////
    //
    // Function:  public setitemenabled(unsignedinteger ai_itemorder, boolean ab_enable) returns integer
    //
    // Purpose:   设置菜单项Enabled.
    //            
    // Args:      unsignedinteger ai_itemorder 菜单序号
    //            boolean ab_enable  Enabled = ab_enable
    //
    // Return:    成功,返回1;出错,返回-1.
    //
    // Log:
    // 
    // Create by lenya on 2010/10/6
    //
    ///////////////////////////////////////////////////////////////////////////
    if ai_itemorder > ITEMCOUNT then return -1
    This.item[ai_itemorder].Enabled = ab_enable
    
    return 1
    
    end function
    
    public function integer setitemvisible (unsignedinteger ai_itemorder, boolean ab_visible);/////////////////////////////////////////////////////////////////////////
    //
    // Function:  public setitemvisible(unsignedinteger ai_itemorder, boolean ab_visible) returns integer
    //
    // Purpose:   设置菜单项Enabled.
    //            
    // Args:      unsignedinteger ai_itemorder 菜单序号
    //            boolean ab_visible  Visible = ab_visible
    //
    // Return:    成功,返回1;出错,返回-1.
    //
    // Log:
    // 
    // Create by lenya on 2010/10/6
    //
    ///////////////////////////////////////////////////////////////////////////
    if ai_itemorder > ITEMCOUNT then return -1
    This.item[ai_itemorder].Visible = ab_visible
    
    return 1
    
    end function
    
    public function integer setitemchecked (unsignedinteger ai_itemorder, boolean ab_checked);/////////////////////////////////////////////////////////////////////////
    //
    // Function:  public setitemchecked(unsignedinteger ai_itemorder, boolean ab_checked) returns integer
    //
    // Purpose:   设置菜单项Checked or UnChecked.
    //            
    // Args:      unsignedinteger ai_itemorder 菜单序号
    //            boolean ab_checked  true 为Checked, false 为UnChecked
    //
    // Return:    成功,返回1;出错,返回-1.
    //
    // Log:
    // 
    // Create by lenya on 2010/10/6
    //
    ///////////////////////////////////////////////////////////////////////////
    if ai_itemorder > ITEMCOUNT then return -1
    This.item[ai_itemorder].Checked = ab_checked
    
    return 1
    
    end function
    
    public function integer initmenu (graphicobject ago_parent, string as_items);/////////////////////////////////////////////////////////////////////////
    //
    // Function:  public initmenu(graphicobject ago_parent, string as_items) returns integer
    //
    // Purpose:   通用右键菜单的初始化,包括显示Text,EventName,Enabled,Visible.
    //            
    // Args:      graphicobject ago_parent    //菜单依附的图形对象
    //            string as_items  //Text{tag}|Text{tag}|Text{tag}的格式,
    //                             //其中Text显示菜单文本,Tag为要触发的事件名称.
    //
    // Return:    成功,返回1;出错,返回-1.
    //
    // Log:
    // 
    // Create by lenya on 2010/10/6
    //
    ///////////////////////////////////////////////////////////////////////////
    
    if not isvalid(ago_parent) then return -1
    igo_parent = ago_parent
    if isnull(as_items) or len(as_items) = 0 then return -1
    
    UINT itemnum, curitemcnt
    UINT pos_start, pos_end, pos_len
    string ls_items[]
    
    n_cst_string lo_string
    curitemcnt = lo_string.of_parsetoarray(as_items,"|",ls_items[])
    if curitemcnt > 0 and curitemcnt <= ITEMCOUNT then
        for itemnum=1 to curitemcnt    //设置菜单显示及事件名称关联,如:"全选{ue_all}|全否{ue_nall}"
            pos_start = Pos(ls_items[itemnum], "{")
            pos_end = Pos(ls_items[itemnum], "}")
            if pos_end - pos_start > 0 then
                This.item[itemnum].Tag = Mid(ls_items[itemnum], pos_start + 1, pos_end - pos_start - 1)
                This.item[itemnum].Text = Replace(ls_items[itemnum], pos_start, pos_end - pos_start + 1, "")
            else
                This.item[itemnum].Text = ls_items[itemnum]
            end if
            This.item[itemnum].Visible = True
            This.item[itemnum].Enabled = True
        next
        for itemnum=curitemcnt+1 to ITEMCOUNT    //设置不可用项
            This.item[itemnum].Visible = FALSE
            This.item[itemnum].Enabled = FALSE
        next
    else
        return -1
    end if
    
    return 1
    
    end function
    
    public function integer initmenu (graphicobject ago_parent, string as_items, string as_eventnames);/////////////////////////////////////////////////////////////////////////
    //
    // Function:  public initmenu(graphicobject ago_parent, string as_items) returns integer
    //
    // Purpose:   通用右键菜单的初始化,包括显示Text,EventName,Enabled,Visible.
    //            
    // Args:      graphicobject ago_parent    //菜单依附的图形对象
    //            string as_items  //Text|Text|Text的格式,其中Text显示菜单文本
    //            String as_eventnames//格式:eventname|eventname|,菜单项要触发的事件名称.
    //
    // Return:    成功,返回1;出错,返回-1.
    //
    // Log:
    // 
    // Create by lenya on 2010/10/6
    //
    ///////////////////////////////////////////////////////////////////////////
    
    if not isvalid(ago_parent) then return -1
    igo_parent = ago_parent
    if isnull(as_items) or len(as_items) = 0 then return -1
    
    UINT itemnum, curitemcnt, curevencnt
    string ls_items[]
    String ls_eventname[]
    
    n_cst_string lo_string
    curitemcnt = lo_string.of_parsetoarray(as_items,"|",ls_items[])
    curevencnt = lo_string.of_parsetoarray(as_eventnames,"|",ls_eventname[])
    
    if curitemcnt > 0 and curitemcnt <= ITEMCOUNT then
        for itemnum=1 to curitemcnt    //设置菜单显示文本及事件名称
            This.item[itemnum].Text = ls_items[itemnum]
            if curevencnt >= itemnum then
                This.item[itemnum].Tag = ls_eventname[itemnum]
            else
                This.item[itemnum].Tag = "ue_item"+string(itemnum) //设置默认事件名称,如"ue_item1"
            end if
            This.item[itemnum].Visible = True
            This.item[itemnum].Enabled = True
        next
        for itemnum=curitemcnt+1 to ITEMCOUNT    //设置不可用项
            This.item[itemnum].Visible = FALSE
            This.item[itemnum].Enabled = FALSE
        next
    else
        return -1
    end if
    
    return 1
    
    end function
    
    on m_compopup.create
    m_compopup=this
    call super::create
    this.text = "m_compopup"
    this.m_item1=create m_item1
    this.m_item2=create m_item2
    this.m_item3=create m_item3
    this.m_item4=create m_item4
    this.m_item5=create m_item5
    this.m_item6=create m_item6
    this.m_item7=create m_item7
    this.m_item8=create m_item8
    this.m_item9=create m_item9
    this.m_item10=create m_item10
    this.m_item11=create m_item11
    this.m_item12=create m_item12
    this.m_item13=create m_item13
    this.m_item14=create m_item14
    this.m_item15=create m_item15
    this.Item[UpperBound(this.Item)+1]=this.m_item1
    this.Item[UpperBound(this.Item)+1]=this.m_item2
    this.Item[UpperBound(this.Item)+1]=this.m_item3
    this.Item[UpperBound(this.Item)+1]=this.m_item4
    this.Item[UpperBound(this.Item)+1]=this.m_item5
    this.Item[UpperBound(this.Item)+1]=this.m_item6
    this.Item[UpperBound(this.Item)+1]=this.m_item7
    this.Item[UpperBound(this.Item)+1]=this.m_item8
    this.Item[UpperBound(this.Item)+1]=this.m_item9
    this.Item[UpperBound(this.Item)+1]=this.m_item10
    this.Item[UpperBound(this.Item)+1]=this.m_item11
    this.Item[UpperBound(this.Item)+1]=this.m_item12
    this.Item[UpperBound(this.Item)+1]=this.m_item13
    this.Item[UpperBound(this.Item)+1]=this.m_item14
    this.Item[UpperBound(this.Item)+1]=this.m_item15
    end on
    
    on m_compopup.destroy
    call super::destroy
    destroy(this.m_item1)
    destroy(this.m_item2)
    destroy(this.m_item3)
    destroy(this.m_item4)
    destroy(this.m_item5)
    destroy(this.m_item6)
    destroy(this.m_item7)
    destroy(this.m_item8)
    destroy(this.m_item9)
    destroy(this.m_item10)
    destroy(this.m_item11)
    destroy(this.m_item12)
    destroy(this.m_item13)
    destroy(this.m_item14)
    destroy(this.m_item15)
    end on
    
    type m_item1 from menu within m_compopup
    end type
    
    on m_item1.create
    call super::create
    this.tag = "event"
    this.visible = false
    this.text = "item1"
    end on
    
    on m_item1.destroy
    call super::destroy
    end on
    
    event clicked;igo_parent.TriggerEvent(Tag)
    
    end event
    
    type m_item2 from menu within m_compopup
    end type
    
    on m_item2.create
    call super::create
    this.tag = "event"
    this.visible = false
    this.text = "item2"
    end on
    
    on m_item2.destroy
    call super::destroy
    end on
    
    event clicked;igo_parent.TriggerEvent(Tag)
    
    end event
    
    type m_item3 from menu within m_compopup
    end type
    
    on m_item3.create
    call super::create
    this.tag = "event"
    this.visible = false
    this.text = "item3"
    end on
    
    on m_item3.destroy
    call super::destroy
    end on
    
    event clicked;igo_parent.TriggerEvent(Tag)
    
    end event
    
    type m_item4 from menu within m_compopup
    end type
    
    on m_item4.create
    call super::create
    this.tag = "event"
    this.visible = false
    this.text = "item4"
    end on
    
    on m_item4.destroy
    call super::destroy
    end on
    
    event clicked;igo_parent.TriggerEvent(Tag)
    
    end event
    
    type m_item5 from menu within m_compopup
    end type
    
    on m_item5.create
    call super::create
    this.tag = "event"
    this.visible = false
    this.text = "item5"
    end on
    
    on m_item5.destroy
    call super::destroy
    end on
    
    event clicked;igo_parent.TriggerEvent(Tag)
    
    end event
    
    type m_item6 from menu within m_compopup
    end type
    
    on m_item6.create
    call super::create
    this.tag = "event"
    this.visible = false
    this.text = "item6"
    end on
    
    on m_item6.destroy
    call super::destroy
    end on
    
    event clicked;igo_parent.TriggerEvent(Tag)
    
    end event
    
    type m_item7 from menu within m_compopup
    end type
    
    on m_item7.create
    call super::create
    this.tag = "event"
    this.visible = false
    this.text = "item7"
    end on
    
    on m_item7.destroy
    call super::destroy
    end on
    
    event clicked;igo_parent.TriggerEvent(Tag)
    
    end event
    
    type m_item8 from menu within m_compopup
    end type
    
    on m_item8.create
    call super::create
    this.tag = "event"
    this.visible = false
    this.text = "item8"
    end on
    
    on m_item8.destroy
    call super::destroy
    end on
    
    event clicked;igo_parent.TriggerEvent(Tag)
    
    end event
    
    type m_item9 from menu within m_compopup
    end type
    
    on m_item9.create
    call super::create
    this.tag = "event"
    this.visible = false
    this.text = "item9"
    end on
    
    on m_item9.destroy
    call super::destroy
    end on
    
    event clicked;igo_parent.TriggerEvent(Tag)
    
    end event
    
    type m_item10 from menu within m_compopup
    end type
    
    on m_item10.create
    call super::create
    this.tag = "event"
    this.visible = false
    this.text = "item10"
    end on
    
    on m_item10.destroy
    call super::destroy
    end on
    
    event clicked;igo_parent.TriggerEvent(Tag)
    
    end event
    
    type m_item11 from menu within m_compopup
    end type
    
    on m_item11.create
    call super::create
    this.tag = "event"
    this.visible = false
    this.text = "item11"
    end on
    
    on m_item11.destroy
    call super::destroy
    end on
    
    event clicked;igo_parent.TriggerEvent(Tag)
    
    end event
    
    type m_item12 from menu within m_compopup
    end type
    
    on m_item12.create
    call super::create
    this.tag = "event"
    this.visible = false
    this.text = "item12"
    end on
    
    on m_item12.destroy
    call super::destroy
    end on
    
    event clicked;igo_parent.TriggerEvent(Tag)
    
    end event
    
    type m_item13 from menu within m_compopup
    end type
    
    on m_item13.create
    call super::create
    this.tag = "event"
    this.visible = false
    this.text = "item13"
    end on
    
    on m_item13.destroy
    call super::destroy
    end on
    
    event clicked;igo_parent.TriggerEvent(Tag)
    
    end event
    
    type m_item14 from menu within m_compopup
    end type
    
    on m_item14.create
    call super::create
    this.tag = "event"
    this.visible = false
    this.text = "item14"
    end on
    
    on m_item14.destroy
    call super::destroy
    end on
    
    event clicked;igo_parent.TriggerEvent(Tag)
    
    end event
    
    type m_item15 from menu within m_compopup
    end type
    
    on m_item15.create
    call super::create
    this.tag = "event"
    this.visible = false
    this.text = "item15"
    end on
    
    on m_item15.destroy
    call super::destroy
    end on
    
    event clicked;igo_parent.TriggerEvent(tag)
    
    end event

    调用:

    string ls_Band
    ls_Band    = GetBandAtPointer()
    
    if Pos(ls_Band,"detail")>0 or Pos(ls_Band,"background")>0 then //只有在"数据"区域才弹出右键
        m_compopup lm_pop
        
        if GetRow() <> Row Then SetRow(row) 
        if GetColumn() <> GetClickedColumn() Then SetColumn(GetClickedColumn())
    
        lm_pop = Create m_compopup
        if 1 = lm_pop.initmenu(This,"复制(&C)|-|查看所有记录|-|撤销(&U)", + &
                                        "ue_copy|-|ue_ret_bigmk|-|ue_cancel") then
            lm_pop.setitemenabled(1,Len(This.SelectedText())>0)//设置"复制"Enabled属性.
            lm_pop.setitemenabled(5,m_third.m_handle.m_unto.Enabled)//设置"撤销"Enabled属性.
        
            lm_pop.PopMenu(w_main.pointerx(),w_main.pointerY())
        end if
        destroy lm_pop
    end if
  • 相关阅读:
    php操作mysql数据库
    Java获得某目录下文件总大小
    Flex Air 主窗口和多个子窗口从属显示 拂晓风起
    actionscript AES 加密 解密 拂晓风起
    Flex 可以拖出窗口的panel 拖动panel变为窗口 拂晓风起
    Flash builder打包as actionscript代码,发布swc 拂晓风起
    网站安全登录 web应用安全登录 密码 防截获 拂晓风起
    Flex透明窗体做法 spark的Window加Skin 拂晓风起
    PHP开发环境搭建 (XAMPP+Xdebug+netbeans,配置调试) 拂晓风起
    SSH 项目过程中遇到的问题和解决方法汇总 struts2 spring hibernate 拂晓风起
  • 原文地址:https://www.cnblogs.com/djd66/p/16205488.html
Copyright © 2020-2023  润新知