BaaNIv ListBox

#include <bic_event>
    #include <bic_gc>
    #include <bic_gpart>
    #include <bic_process>
    #include <bic_window>
    #include <bic_menu>
    #include <bic_object>
    #include <bic_key>

    #define  MAXWIDTH       600
    #define  MAXHEIGHT      500
    #define  ABORT.MENU     10
    #define  END.MENU       11
    #define  END.BUTTON     20
    #define  ABORT.BUTTON   21

    #define  motif.blue     RGB(0x78,0xa9,0xff)

    long     toplevel

    long     cmap(256)
    long     cmap_sz
    string   imap(1)   based
long listbox
    long     icon_w
    long     icon_h
    long     valid.icon

function main()
{

show.mwindow()

|view.gwindow()

 


   long rowcol
   rowcol = create.object(DsCrowColumn, toplevel,
                  DsNvspace,        10,
                  DsNhspace,        10,
                  DsNnumColumns,     3,
                  DsNfixedDimension, DSHORIZONTAL )

 
 listbox = Create.Object(DsClistBox,  rowcol,
    DsNallowMultiSelection, FALSE,
    DsNbackground,      motif.blue,
    DsNforeground,      RGB.WHITE,
    DsNfocusColor, motif.blue, 
    DsNminWidth,        80,
    DsNeventMask,  EVTLISTBOXSELECTMASK,
    DsNjustify,  DSJUSTIFYLEFT,
    DsNselectedId, 5,
    DsNborderColor,     RGB.WHITE,
    DsNborderWidth,     2,
    DsNmaxWindowSize,   200,
    DsNspace,           0,
    DsNx,               10,
    DsNy,               60)
    Update.Object(listbox)
  
 AddItem.To.ListBox("liu")
 AddItem.To.ListBox("gang")
 AddItem.To.ListBox("zxx")
handle.event.loop()
  

}

 

Function AddItem.To.ListBox(String users)
{
long listboxitem
listboxitem =Create.Sub.Object(listbox, DsClistBoxItem, DsNstring, users, DsnItemcount)
}

function long create.old.style.menu(long mwin)
    {
    long barmenu, pdmenu1, pdmenu2
    long casbutt1, casbutt2
    long nop

    barmenu = create.object(DsCbarMenu,   mwin,
    DsNsetState,      DSRAISE)

    pdmenu1 = create.object(DsCpulldownMenu, barmenu)
    casbutt1 = create.sub.object(barmenu, DsCcascadeButton,
    DsNsubmenu,       pdmenu1,
    DsNname,          "File")

    nop = create.sub.object(pdmenu1,      DsCmenubutton,
    DsNname,          "Abort",
    DsNreturnValue,   ABORT.MENU)

    nop = create.sub.object(pdmenu1,      DsCmenubutton,
    DsNname,          "Exit",
    DsNreturnValue,   END.MENU)

    pdmenu2 = create.object(DsCpulldownMenu, barmenu)

    casbutt2 = create.sub.object(barmenu, DsCcascadeButton,
    DsNsubmenu,       pdmenu2,
    DsNname,          "View")

    nop = create.sub.object(pdmenu2,      DsCmenubutton,
    DsNname,          "First")

    nop = create.sub.object(pdmenu2,      DsCmenubutton,
    DsNname,          "Last")

    nop = create.sub.object(pdmenu2,      DsCmenubutton,
    DsNname,          "Prev")

    nop = create.sub.object(pdmenu2,      DsCmenubutton,
    DsNname,          "Next")

    return(barmenu)
    }

    function long create.new.style.menu(long mwin)
    {
    long barmenu, size
    string menudata(1) based

    alloc.mem(menudata, 3000)
    size = 1

    | write header info to buffer
    store.long(1, menudata(size))      | version is 1
    size = size + 4
    store.long(8, menudata(size))      | menu contains 8 entries
    size = size + 4

    | create the File submenu
    write.menu.entry(menudata, size, 1, 0, "&File", 0)
    write.menu.entry(menudata, size, 2, ABORT.MENU, "Abort", 0)
    write.menu.entry(menudata, size, 2, END.MENU, "E&xit    Alt+F4", 0)
    | create the View submenu
    write.menu.entry(menudata, size, 1, 0, "&View", 0)
    write.menu.entry(menudata, size, 2, 30, "First", 0)
    write.menu.entry(menudata, size, 2, 31, "Last", 0)
    write.menu.entry(menudata, size, 2, -1, "-", 0)      | separator
    write.menu.entry(menudata, size, 2, 32, "Prev", 0)
    write.menu.entry(menudata, size, 2, 33, "Next", 0)

    barmenu = create.object(DsCbarMenu,   mwin,
    DsNmenuData,      menudata, size-1,
    DsNsetState,      DSRAISE)

    return(barmenu)
    }

    function write.menu.entry(ref string menudata(), ref long size,
    long level, long id, const string name(), long flags)
    {
    store.long(level, menudata(size))
    size = size + 4
    store.long(id, menudata(size))
    size = size + 4
    menudata(size) = name
    size = size + len(name)
    store.byte(0, menudata(size))      | terminate string with 0 char.
    size = size + 1
    store.long(flags, menudata(size))
    size = size + 4
    }
function show.mwindow()
{
long flags, server.data(9)
long barmenu, butt1, butt2
long rowcol

flags = DSSTATUSOFF + DSBUTTONBAROFF + DSNORMALSTATE + DSIGNOREINTERRUPT

toplevel = create.object( DsCmwindow, current.mwindow(),
DsNtitle,         "MWindow",
DsNprocessgroup,  get.pgrp(pid),
DsNbackground,    RGB.BLACK,
DsNx,             10,
DsNy,             10,
DsNminWidth,      500,
DsNminHeight,     400,
DsNmaxWidth,      MAXWIDTH,
DsNmaxHeight,     MAXHEIGHT,
DsNmode,          DSPIXELBASED,
DsNflags,         flags )
get.display.data(server.data)
if srv.type(server.data) = DSBW then
barmenu = create.new.style.menu(toplevel)
else
barmenu = create.old.style.menu(toplevel)
endif

    change.object( toplevel,
    DsNbarMenu,       barmenu )

    rowcol = create.object(DsCrowColumn,  toplevel,
    DsNbackground,    motif.blue,
    DsNpacking,       DSPACKNONE,
    DsNborderWidth,   0,
    DsNnumRows,       1,
    DsNnumColumns,    5,
    DsNx,             0,
    DsNy,             0,
    DsNwidth,         500,
    DsNheight,        20,
    DsNfixedDimension, DSHORIZONTAL )

    butt1 = create.object(DsCpushButton,  rowcol,
    DsNbackground,    motif.blue,
    DsNforeground,    RGB.BLACK,
    DsNstring,        "Abort",
    DsNx,             0,
    DsNy,             0,
    DsNreturnValue,   ABORT.BUTTON)

    butt2 = create.object(DsCpushButton,  rowcol,
    DsNbackground,    motif.blue,
    DsNforeground,    RGB.BLACK,
    DsNstring,        "End",
    DsNx,             50,
    DsNy,             0,
    DsNreturnValue,   END.BUTTON)

    update.object(toplevel)
    }

    function fill.work.area()
    {
    long label, combox, listboxitem1, listboxitem2, listboxitem3
    long listboxitem4, listboxitem5, listboxitem6

    label = create.object(DsClabel,         toplevel,
    DsNbackground,      RGB.BLACK,
    DsNforeground,      RGB.WHITE,
    DsNx,               20,
    DsNy,               40,
    DsNstring,          "Article" )
    combox = create.object(DsCdDComBox,     toplevel,
    DsNbackground,      motif.blue,
    DsNforeground,      RGB.WHITE,
    DsNminWidth,        80,
    DsNborderColor,     RGB.WHITE,
    DsNborderWidth,     2,
    DsNmaxWindowSize,   25,
    DsNspace,           2,
    DsNx,               80,
    DsNy,               40,
    DsNstring,          "Combox" )

    change.object(combox,
    DsNeditable, FALSE)

    listboxitem1 = create.sub.object(combox, DsClistBoxItem,
    DsNstring,           "article1" )

    listboxitem2 = create.sub.object(combox, DsClistBoxItem,
    DsNstring,           "article2" )

    listboxitem3 = create.sub.object(combox, DsClistBoxItem,
    DsNstring,           "article3" )

    listboxitem4 = create.sub.object(combox, DsClistBoxItem,
    DsNstring,           "article4" )

    listboxitem5 = create.sub.object(combox, DsClistBoxItem,
    DsNstring,           "article5" )

    listboxitem6 = create.sub.object(combox, DsClistBoxItem,
    DsNstring,           "article6" )

    update.object(toplevel)
    }

    function view.gwindow()
    {
    long gc.id, gwin, rect
    string file(128)
    string bufr(1)  based
    long buflen, fp, retv
    long idc, idp, image

    gc.id = create.object(DsCgc,          toplevel,
    DsNgcBackground,  RGB.RED,
    DsNgcCapStyle,    GCCAPBUTT,
    DsNgcLineWidth,   0 )

    gwin = create.object(DsCgwindow,      toplevel,
    DsNbackground,    motif.blue,
    DsNx,             300,
    DsNy,             250,
    DsNwidth,         100,
    DsNheight,        80,
    DsNpointerCursor, DSCHAND,
    DsNeventMask,     EVTALLEVENTMASK )

    rect = create.sub.object(gwin,        DsCgpRectangle,
    DsNgc,            gc.id,
    DsNgcBackground,  RGB.WHITE,
    DsNx,             0,
    DsNy,             0,
    DsNwidth,         25,
    DsNheight,        25 )

    file = "${BSE}/gif/desktop.gif/tools1"
    fp = seq.open(file, "r")

    buflen = seq.seek(0, 2, fp)
    alloc.mem(bufr, buflen)
    seq.rewind(fp)
    seq.read(bufr, buflen, fp)
    seq.close(fp)

    if get.pixmap.info(bufr, cmap_sz, icon_w, icon_h) then
    alloc.mem(imap, icon_w * icon_h)
    valid.icon = decompress.pixmap(bufr, cmap, imap)
    cmap(1) = rgb(191,191,191)
    endif

    free.mem(bufr)

    idc = create.object(DsCcolormap,      current.display(),
    DsNcolorTable,    cmap, cmap_sz )

    idp = create.object(DsCpixmap,        current.display(),
    DsNcolormap,      idc,
    DsNwidth,         icon_w,
    DsNheight,        icon_h,
    DsNdata,          imap, icon_w * icon_h,
    DsNdataType,      DSPIXMAP8 )

    image = create.sub.object(gwin,       DsCgpImage,
    DsNpixmap,        idp,
    DsNx,             0,
    DsNy,             0 )

    update.object(toplevel)
    |change_this_picture( cmap, cmap_sz, imap, icon_w, icon_h )
    | defined by the user

    fp = seq.open(file, "w")
    if fp >= 1 then
    buflen = 3 * cmap_sz + icon_w * icon_h + 50
    alloc.mem(bufr, buflen)
    retv = compress.pixmap( cmap, cmap_sz, imap, icon_w, icon_h,
    bufr, buflen)
    if retv then
    seq.write(bufr, buflen, fp)
    endif
    seq.close(fp)
    free.mem(bufr)
    endif

    free.mem(imap)
    }

    function handle.event.loop()
    {
    long event(EVTMAXSIZE)

    while TRUE
    next.event(event)

    on case evt.type(event)
    case EVTMENUSELECT:
    if ( evt.menu.return(event) = ABORT.MENU OR
    evt.menu.return(event) = END.MENU ) then
    return
    endif
    break
    case EVTPUSHBUTTON:
    if ( evt.button.return(event) = END.BUTTON OR
    evt.button.return(event) = ABORT.BUTTON ) then
    return
    endif
    break
    default:
    break
    endcase
    endwhile

    }

    function destroy.objects()
    {
    destroy.object(toplevel)
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值