Re: Where do I call setHint for statusbar?

new topic     » goto parent     » topic index » view thread      » older message » newer message

Actually the Win32lib is reasonable extendable. Here is a simple Fake StatusBar
subsystem...

----- sb.e ---------
include Win32lib.ew as win
without warning

sequence vWINList
sequence vSBList
sequence vFLDList
sequence vFLDIDList

vWINList = {}
vSBList = {}
vFLDList = {}
vFLDIDList = {}


-- Ensure 'statusbar' always spans the window.
with trace
procedure Resize_Window(integer self, integer event, sequence parms)
    integer id
    sequence lRect

    id = find(self, vWINList)
    if id = 0 then
        return
    end if

    id = vSBList[id]
    lRect = win:getRect(id)
    lRect[4] -= lRect[2]
    win:setRect(id, 0, {w32AltEdge, -lRect[4]},
                       0.99999,lRect[4], 1)
end procedure


global function create(integer pParent, integer pHeight, object pFields)
    integer id
    integer sbHeight
    sequence lRect
    integer x
    integer lType
    integer lWidth
    integer lHeight


    id = find(pParent, vWINList)
    if id != 0 then
        return 0
    end if

    if pHeight <= 0 then
        lHeight = win:getTextHeight(pParent, "M") + 10
    else
        lHeight = pHeight
    end if

    id = win:createEx(Label, "", pParent, 0, 0, 0, lHeight, 
                      WS_BORDER, WS_EX_CLIENTEDGE)
    win:setHandler(pParent, w32HResize, routine_id("Resize_Window"))
    vWINList &= pParent
    vSBList  &= id
    vFLDList &= {pFields}
    vFLDIDList &= {{}}

    if atom(pFields) then
        return id
    end if


    x = 0
    for i = 1 to length(pFields) do
        if atom(pFields[i]) then
            lType = Label
            lWidth = pFields[i]
        else
            lType = pFields[i][1]
            lWidth = pFields[i][2]
        end if
        vFLDIDList[$] &= win:createEx(lType, "", id,  x, -1,
                        lWidth, lHeight - 4, WS_BORDER, WS_EX_STATICEDGE)
        x += lWidth + 2
    end for
    return id
end function

global function getFlds(integer sb)

    integer id

    id = find(sb, vSBList)
    if id = 0 then
        return {}
    end if

    return vFLDIDList[id]
end function
--------------


And here is how is could be used ...

----------------
include sb.e as sb

include Win32lib.ew
without warning

--  Window Window1
constant Window1 = createEx( Window, "Window1", 0, Default, Default, 400, 300,
0, 0 )
constant FakeSB = sb:create(Window1, 0, {100, {Button,100}, {CheckBox, 80}})
constant FakeSBFlds = sb:getFlds(FakeSB)

setText(FakeSBFlds[1], "First Field")
setText(FakeSBFlds[2], "Second Field")
setText(FakeSBFlds[3], "Third Field")

setHint ( FakeSBFlds[1],"Content of field1" )
setHint ( FakeSBFlds[2],"Content of field2" )
setHint ( FakeSBFlds[3],"Content of field3" )

setWindowBackColor(FakeSB, Blue)

setWindowBackColor(FakeSBFlds[1], BrightCyan)
setTextColor(FakeSBFlds[1], Brown)

setWindowBackColor(FakeSBFlds[3], Yellow)
setTextColor(FakeSBFlds[3], Red)

procedure Clicker(integer self, integer event, sequence parms)
   setVisible(FakeSBFlds[2], not isChecked(self))
end procedure
setHandler(FakeSBFlds[3], w32HClick, routine_id("Clicker"))

WinMain( Window1,Normal )
----------------


This can be extended to do all sort of neat stuff. Let me know if you find it
useful and what else you would like to do with status bars?

-- 
Derek Parnell
Melbourne, Australia
Skype name: derek.j.parnell

new topic     » goto parent     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu