LB Booster
Programming >> Liberty BASIC language >> Is this a dumb idea?
http://lbb.conforums.com/index.cgi?board=lblang&action=display&num=1488922632

Is this a dumb idea?
Post by Alincon on Mar 7th, 2017, 8:37pm

I wanted to enter a date by clicking, not typing.
I was unable to get a combo box to show 31 days, so I tried ranges.
You have to click once for range and once for item within range to choose days and years.

Code:
nomainwin
    dim months$(12), days$(11)
    for n = 1 to 12 : months$(n) = right$("0"+str$(n),2) : next
    days$(1) = "01-10":days$(2) = "11-20":days$(3) = "21-31"
    for n = 1 to 10 step 1: years$(n) = str$(n*10+1910)+"'s" : next

    WindowWidth = 400  :      WindowHeight = 400

    statictext #student.statictext6, "Date of Birth", 100,  5,  99,  20
    statictext #student.statictext7, "Mo        Day             Year", 70,  20,  160,  40

    combobox #student.mocb, months$(,[mos],60,40,40,60
    combobox #student.dacb, days$(,[days],107,40,50,50
    combobox #student.yrcb, years$(,[years],165,40,60,300

    open "Enter Date" for window as #student
    #student, "font ms_sans_serif 8"

    #student, "trapclose [studentEnd]"
    wait

 [studentEnd]
    #student.mocb, "selection? mx$"
    #student.dacb, "selection? dx$"
    #student.yrcb, "selection? decade$"
    notice mx$;" ";dx$;" ";decade$
    close #student
    end

 [mos]
    #student.mocb, "selection? mx$"
    wait

 [days]
    #student.dacb, "selection? da$"
    if instr(da$,"-") = 0 then wait
    #student.dacb, "selectionindex? dx"
    select dx
      case 1 : m = 0  : p = 10
      case 2 : m = 10  : p = 10
      case 3 : m = 20 : p = 11
    end select
    for n = 1 to p
        days$(n) = right$("0"+str$(n+m),2)
    next
    #student.dacb, "selectindex 0"
    #student.dacb,"reload"
    #student.dacb,"!";da$ 
    wait

 [years]
    #student.yrcb,"selection? decade$"
    if right$(decade$,1) <> "s" then wait
    decade = val(left$(decade$,4))
    for n = 1 to 10 :years$(n) = str$(decade+n-1):next
    #student.yrcb, "selectindex 0"
    #student.yrcb,"reload"
    #student.yrcb,"!";decade$ 
    wait

 

Re: Is this a dumb idea?
Post by Richard Russell on Mar 7th, 2017, 10:51pm

on Mar 7th, 2017, 8:37pm, Alincon wrote:
I was unable to get a combo box to show 31 days

What was the problem? I don't see any issues here with a combobox displaying 31 days. Admittedly a scrollbar is needed, by default, but you can override that so that all 31 days are shown if you want to (and your screen height is sufficient):

Code:
    nomainwin
    dim days$(31)
    for n = 1 to 31 : days$(n) = right$("0"+str$(n),2) : next

    WindowWidth = 400  :      WindowHeight = 400

    combobox #student.dacb, days$(),[days],107,40,50,200
    open "Enter Date" for window as #student
    #student, "font ms_sans_serif 8"
    #student, "trapclose [quit]"
    hdacb = hwnd(#student.dacb)
    calldll #user32, "SendMessageA", hdacb as ulong, _CB_SETMINVISIBLE as long, _
        31 as long, 0 as long, ret as void
    wait

[quit]
    close #student
    end 

Richard.

Re: Is this a dumb idea?
Post by Alincon on Mar 8th, 2017, 1:10pm

I was not aware of the _CB_SETMINVISIBLE call - good to know.

But LB4.5 seems not to be aware of it either.

r.m.

Re: Is this a dumb idea?
Post by Richard Russell on Mar 8th, 2017, 4:15pm

on Mar 8th, 2017, 1:10pm, Alincon wrote:
But LB4.5 seems not to be aware of it either.

Not my problem! Indeed not a problem at all, so long as you know the numeric value (which LBB will tell you). grin

Richard.
Re: Is this a dumb idea?
Post by Alincon on Mar 8th, 2017, 7:10pm

Agree that LB4.5 problems are not your problem.
At your suggestion, I printed the value of the constant in LBB
It's 5889, and that does work in LB4.5.

But back to the title question: is a two-step process for choosing date components too cumbersome? Choosing a year from 100 entries would involve more than one step, too.

I also wondered if anyone else would want to use combo boxes this way.

r.m.
Re: Is this a dumb idea?
Post by Richard Russell on Mar 8th, 2017, 9:18pm

on Mar 8th, 2017, 7:10pm, Alincon wrote:
But back to the title question: is a two-step process for choosing date components too cumbersome?

I wouldn't say it's "cumbersome" but personally I think it could be improved by automatically presenting the second list, without the user having to click again:

Code:
    nomainwin
    dim months$(12), days$(11)
    for n = 1 to 12 : months$(n) = right$("0"+str$(n),2) : next
    days$(1) = "01-10":days$(2) = "11-20":days$(3) = "21-31"
    for n = 1 to 10 step 1: years$(n) = str$(n*10+1910)+"'s" : next

    WindowWidth = 400  :      WindowHeight = 400

    statictext #student.statictext6, "Date of Birth", 100,  5,  99,  20
    statictext #student.statictext7, "Mo        Day             Year", 70,  20,  160,  40

    combobox #student.mocb, months$(,[mos],60,40,40,60
    combobox #student.dacb, days$(,[days],107,40,50,50
    combobox #student.yrcb, years$(,[years],165,40,60,300

    open "Enter Date" for window as #student
    #student, "font ms_sans_serif 8"

    #student, "trapclose [studentEnd]"
    wait

 [studentEnd]
    #student.mocb, "selection? mx$"
    #student.dacb, "selection? dx$"
    #student.yrcb, "selection? decade$"
    notice mx$;" ";dx$;" ";decade$
    close #student
    end

 [mos]
    #student.mocb, "selection? mx$"
    wait

 [days]
    #student.dacb, "selection? da$"
    if instr(da$,"-") = 0 then wait
    #student.dacb, "selectionindex? dx"
    select dx
      case 1 : m = 0  : p = 10
      case 2 : m = 10  : p = 10
      case 3 : m = 20 : p = 11
    end select
    for n = 1 to p
        days$(n) = right$("0"+str$(n+m),2)
    next
    #student.dacb, "selectindex 0"
    #student.dacb,"reload"
    #student.dacb,"!";da$ 
    hdacb = hwnd(#student.dacb)
    calldll #user32, "SendMessageA", hdacb as ulong, _CB_SHOWDROPDOWN as long, _
        1 as long, 0 as long, ret as void
    wait

 [years]
    #student.yrcb,"selection? decade$"
    if right$(decade$,1) <> "s" then wait
    decade = val(left$(decade$,4))
    for n = 1 to 10 :years$(n) = str$(decade+n-1):next
    #student.yrcb, "selectindex 0"
    #student.yrcb,"reload"
    #student.yrcb,"!";decade$ 
    hyrcb = hwnd(#student.yrcb)
    calldll #user32, "SendMessageA", hyrcb as ulong, _CB_SHOWDROPDOWN as long, _
        1 as long, 0 as long, ret as void
    wait 

Richard.

Re: Is this a dumb idea?
Post by Alincon on Mar 9th, 2017, 12:22am

Nice improvement. Thanks
I didn't know the _CB_SHOWDROPDOWN call either.

r.m.