Author |
Topic: Grid of Textboxes using Windows API (Read 67 times) |
|
Richard Russell
Administrator
member is offline


Posts: 1348
|
 |
Re: Grid of Textboxes using Windows API
« Reply #7 on: Jul 23rd, 2016, 09:59am » |
|
on Jul 23rd, 2016, 09:05am, RNBW wrote:| You misunderstand my reasons for investigating using the Windows API... my challenge was to produce a grid based on simple Windows and using simple code in LB to get over the problem. |
|
Having designed LBB to overcome the problem of creating controls in a loop, there is a degree of frustration in seeing workarounds still being developed for LB (and then having them posted in this forum because they don't work in LBB!).
If LB was more competently implemented I could understand why people might not want to 'burn their boats' by committing to LBB. But really LB (4.04, and even more so 4.5.0) is awful! The slowness, the bloat, the bugs, the incompatibility with DEP, the insecurity - for me these and other shortcomings far outweigh loyalty to Carl Gundel (which I don't think he deserves anyway).
Richard.
|
|
Logged
|
|
|
|
RNBW
Full Member
member is offline


Gender: 
Posts: 106
|
 |
Re: Grid of Textboxes using Windows API
« Reply #8 on: Jul 23rd, 2016, 11:55am » |
|
on Jul 23rd, 2016, 09:59am, Richard Russell wrote:Having designed LBB to overcome the problem of creating controls in a loop, there is a degree of frustration in seeing workarounds still being developed for LB (and then having them posted in this forum because they don't work in LBB!).
If LB was more competently implemented I could understand why people might not want to 'burn their boats' by committing to LBB. But really LB (4.04, and even more so 4.5.0) is awful! The slowness, the bloat, the bugs, the incompatibility with DEP, the insecurity - for me these and other shortcomings far outweigh loyalty to Carl Gundel (which I don't think he deserves anyway).
Richard. |
|
Richard
The reason I did what I did was because I saw code produced by Cundo on a grid of textboxes, which whilst it did the job, produced what I considered a more complicated way off achieving the result. Because I normally work with LBB, I tried the code on LBB and it didn't work. I their posted the code on LBB and you corrected it. Your corrections were very much on lines I had tried earlier but showed up errors in LB. Having previously posted the code on LB (which strangely did work), I felt it only right to post correct code.
I have been working for several weeks on Freebasic, helping the author of WinGUI.bi (a Windows API library that can only be used for simple code - we know there are things not technically correct). Having gained this knowledge, I wanted to see if I could use it to get over some of LB's problems. You did it with LBB. Surely I should be able to do it for a particular problem also.
I am progressing it slowly. It might work. It might not.
I don't intend to use it on a permanent basis. I use LBB and see no reason to revert to LB, which doesn't provide me with the solutions I want. I will continue to use LBB, which is superior to LB in most respects. In particular, it is supported by BBC Basic that is known to be stable and more powerful than LB. It is also relatively bug free and bugs are quickly resolved (these are few and far between).
As I said, it it's a challenge to me. As always I am grateful for the help you have provided. I know how you feel about LB and it's administrators (language and forum). You could always release a new language based on LBB and BBC Basic and I am aware of some of the reasons that you don't.
My actions are not intended to be critical of LBB, yourself and all others who support LBB.
Rant over. I'm going back to watching the cricket. Woakes has just lost his wicket caught and bowled for 58.
LBB for ever!
Ray
|
|
Logged
|
|
|
|
CryptoMan
New Member
member is offline


Gender: 
Posts: 46
|
 |
Re: Grid of Textboxes using Windows API
« Reply #9 on: Aug 16th, 2016, 9:14pm » |
|
This is a very nice grid.
However, in order make it more usable it should move to the next cell with a TAB or with ENTER key, and able to navigate with arrow keys.
How can we do this?
Earlier grid examples was able to do this.
I remember making a grid on LB very painfully. This looks quite elegant in coding.
|
|
Logged
|
|
|
|
Richard Russell
Administrator
member is offline


Posts: 1348
|
 |
Re: Grid of Textboxes using Windows API
« Reply #10 on: Aug 16th, 2016, 11:39pm » |
|
on Aug 16th, 2016, 9:14pm, CryptoMan wrote:| However, in order make it more usable it should move to the next cell with a TAB or with ENTER key, and able to navigate with arrow keys. How can we do this? |
|
I would prefer not to discuss the LB-compatible approach here. LBB has a much easier way of creating grids of controls so can we please concentrate on that.
Richard.
|
|
Logged
|
|
|
|
Alincon
Full Member
member is offline


Posts: 147
|
 |
Re: Grid of Textboxes using Windows API
« Reply #11 on: Aug 17th, 2016, 8:42pm » |
|
This code works to create grids of textboxes for one window, but I want to generalize, and use it for several windows. But it seems that the actual window name is required in the three statements containing "tmp". Is there any way around this? r.m.
Code:
call tbNumberCG "#cogs.tb", 6,185,40,10,60,25
.......
sub tbNumberCG x$,lmt,j,k,l,m,n
for x = 1 to lmt
var$ = x$ + "0"+right$(str$(x),2)
textbox #cogs.tmp, j, (k*x)+l0, m, n
stylebits #cogs.tmp, _ES_NUMBER, 0, 0, 0
maphandle #cogs.tmp, var$
next x
end sub
|
|
Logged
|
|
|
|
Richard Russell
Administrator
member is offline


Posts: 1348
|
 |
Re: Grid of Textboxes using Windows API
« Reply #12 on: Aug 17th, 2016, 10:51pm » |
|
on Aug 17th, 2016, 8:42pm, Alincon wrote:But it seems that the actual window name is required in the three statements containing "tmp". Is there any way around this? |
|
In just the same way as you initially give your controls the same temporary name (later using maphandle to change them to the required names) you can initially give your multiple windows the same temporary name too! That should hopefully solve your problem, because now the window name you specify in your sub can be the same for all the windows. Something like this:
Code: call tbNumberCG "#cogs", 6,185,40,10,60,25
open "Window 1 (#cogs)" for window as #tmp
maphandle #tmp, #cogs
call tbNumberCG "#wheel", 6,185,40,10,60,25
open "Window 2 (#wheel)" for window as #tmp
maphandle #tmp, #wheel
#cogs.tb03 "Hello "
#wheel.tb04 "world!"
wait
sub tbNumberCG x$,lmt,j,k,l,m,n
for x = 1 to lmt
var$ = x$ + ".tb0" + right$(str$(x),2)
textbox #tmp.tmp, j, (k*x)+l0, m, n
stylebits #tmp.tmp, _ES_NUMBER, 0, 0, 0
maphandle #tmp.tmp, var$
next x
end sub Richard.
|
|
Logged
|
|
|
|
Alincon
Full Member
member is offline


Posts: 147
|
 |
Re: Grid of Textboxes using Windows API
« Reply #13 on: Aug 18th, 2016, 01:48am » |
|
So the one maphandle statement takes care of several textboxes? (the '6' in the call statement below is the count of textboxes) r.m.
Code:
call tbNumberCG "#cogs", 6,185,40,10,60,25
open "Window 1 (#cogs)" for window as #tmp
maphandle #tmp, #cogs
|
|
Logged
|
|
|
|
Richard Russell
Administrator
member is offline


Posts: 1348
|
 |
Re: Grid of Textboxes using Windows API
« Reply #14 on: Aug 18th, 2016, 09:37am » |
|
on Aug 18th, 2016, 01:48am, Alincon wrote:| So the one maphandle statement takes care of several textboxes? |
|
No, in LBB each maphandle affects only one window or control. That's why maphandle is called 14 times in all in the code I listed (once for each textbox and once for each window).
Did you not run the code I listed? Unlike your snippet, mine was a complete self-contained program: I always prefer that complete programs be posted, rather than extracts that don't actually do anything in isolation.
Richard.
|
|
|
|
Alincon
Full Member
member is offline


Posts: 147
|
 |
Re: Grid of Textboxes using Windows API
« Reply #15 on: Aug 18th, 2016, 2:21pm » |
|
I meant to ask if only one maphandle statement was required for each window, after the maphandle statements for the individual controls for that window were done. I think I've got it now.
r.m.
|
|
Logged
|
|
|
|
Alincon
Full Member
member is offline


Posts: 147
|
 |
Re: Grid of Textboxes using Windows API
« Reply #16 on: Aug 18th, 2016, 2:28pm » |
|
I also wanted to show this code that creates either one or two rows of four textboxes r.m.
Code:
for x = 1 to 4 + (4 * (filStat = 2))
a$ = "0" + str$(x)
var$ = "#ssb.tb" + a$
textbox #ssb.tmp, 200 + (100 * (x > 4)), (30*x)+30 - (120 * (x > 4)), 60, 25
stylebits #ssb.tmp, _ES_NUMBER, 0, 0, 0
maphandle #ssb.tmp, var$
next x
|
|
Logged
|
|
|
|
Alincon
Full Member
member is offline


Posts: 147
|
 |
Re: Grid of Textboxes using Windows API
« Reply #17 on: Aug 18th, 2016, 2:54pm » |
|
It appears that the 'window' maphandle command must occur before any other controls are created - is that right?
r.m.
|
|
Logged
|
|
|
|
Richard Russell
Administrator
member is offline


Posts: 1348
|
 |
Re: Grid of Textboxes using Windows API
« Reply #18 on: Aug 18th, 2016, 4:21pm » |
|
on Aug 18th, 2016, 2:54pm, Alincon wrote:| It appears that the 'window' maphandle command must occur before any other controls are created - is that right? |
|
The 'window' MAPHANDLE must come after the OPEN, whereas all the controls for that window must be created before the OPEN (this is the case in LB and LBB); so I'm not really following what you mean. If by "other" controls you mean controls which aren't shared between multiple windows, here's an example (I've added a checkbox to window 2):
Code: call tbNumberCG "#cogs", 6,185,40,10,60,25
open "Window 1 (#cogs)" for window as #tmp
maphandle #tmp, #cogs
call tbNumberCG "#wheel", 6,185,40,10,60,25
checkbox #tmp.cb, "Checkbox", [], [], 185, 275, 100, 25
open "Window 2 (#wheel)" for window as #tmp
maphandle #tmp.cb, #wheel.cb
maphandle #tmp, #wheel
#cogs.tb03 "Hello "
#wheel.tb04 "world!"
#wheel.cb "set"
wait
sub tbNumberCG x$,lmt,j,k,l,m,n
for x = 1 to lmt
var$ = x$ + ".tb0" + right$(str$(x),2)
textbox #tmp.tmp, j, (k*x)+l0, m, n
stylebits #tmp.tmp, _ES_NUMBER, 0, 0, 0
maphandle #tmp.tmp, var$
next x
end sub Richard.
|
|
Logged
|
|
|
|
Alincon
Full Member
member is offline


Posts: 147
|
 |
Re: Grid of Textboxes using Windows API
« Reply #19 on: Aug 18th, 2016, 11:41pm » |
|
The 'window' maphandle must be AFTER the window is open! That's what I missed. Thanks.
r.m.
|
|
Logged
|
|
|
|
Alincon
Full Member
member is offline


Posts: 147
|
 |
Re: Grid of Textboxes using Windows API
« Reply #20 on: Aug 19th, 2016, 12:37am » |
|
Please look at this code. (It is a complete program.) r.m.
Code:
nomainwin
WindowWidth = 380 : WindowHeight = 450
'putting the two commands in this locations works
call tbNumberCG "#cogs.tb", 6,185,40,10,60,25
maphandle #dmy, #cogs
statictext #cogs.statictext3, "Starting Inventory", 65, 50, 102, 20
statictext #cogs.statictext9, "Purchases", 100, 90, 64, 20
statictext #cogs.statictext12, "Cost of Labor", 80, 130, 99, 20
statictext #cogs.statictext15, "Materials, Supplies", 40, 170, 123, 20
statictext #cogs.statictext18, "Other Costs", 90, 210, 90, 20
statictext #cogs.statictext21, "Ending Inventory", 65, 250, 120, 20
statictext #cogs.statictext8, "C O G S", 105, 290, 99, 20
statictext #cogs.cogs, "0", 185, 290, 60, 25
'putting the two commands in this location, the statictexts do not show up
' call tbNumberCG "#cogs.tb", 6,185,40,10,60,25
' maphandle #dmy, #cogs
button #cogs.buOkay, " Accept ",[cogsAccept],UL,185,330
button #cogs.buExit, " End ",[cogsEnd],UL,185,370
Stylebits #cogs.buClear, 0, _WS_TABSTOP, 0, 0
stylebits #cogs, _DS_CENTER,0,0,0
open "COST OF GOODS SOLD: " + businessPropName$ for dialog_modal as #cogs
#cogs, "trapclose [cogsClose]"
#cogs, "font ms_sans_serif 10"
'putting this command here does not work - the textboxes do not show up
' maphandle #dmy, #cogs
#cogs.tb01, "!setfocus"
wait
sub tbNumberCG x$,lmt,j,k,l,m,n
for x = 1 to lmt
var$ = x$ + "0"+right$(str$(x),2)
textbox #dmy.tmp, j, (k*x)+l0, m, n
stylebits #dmy.tmp, _ES_NUMBER, 0, 0, 0
maphandle #dmy.tmp, var$
next x
end sub
[cogsClose]
close #cogs
end
|
|
Logged
|
|
|
|
Richard Russell
Administrator
member is offline


Posts: 1348
|
 |
Re: Grid of Textboxes using Windows API
« Reply #21 on: Aug 19th, 2016, 08:57am » |
|
on Aug 19th, 2016, 12:37am, Alincon wrote:| Please look at this code. |
|
You have put the window's MAPHANDLE before the OPEN (I explicitly told you that it must go after the OPEN). If it works it's only 'by accident' and I don't guarantee it will be reliable (LBB was not designed to support that method, and it won't work at all in LB).
I presume the reason you did it that way is that by doing so you save a lot of MAPHANDLE statements. I can see why that would be tempting, but by using undocumented features of the language you risk your code failing in the future.
So obviously it's up to you how you write your own programs but here is the code modified to work the way my example showed and the way LBB was designed to support (it uses more MAPHANDLEs than yours):
Code: nomainwin
WindowWidth = 380 : WindowHeight = 450
' it makes no difference whether you call the sub before the other controls:
call tbNumberCG "#cogs.tb", 6,185,40,10,60,25
statictext #dmy.statictext3, "Starting Inventory", 65, 50, 102, 20
statictext #dmy.statictext9, "Purchases", 100, 90, 64, 20
statictext #dmy.statictext12, "Cost of Labor", 80, 130, 99, 20
statictext #dmy.statictext15, "Materials, Supplies", 40, 170, 123, 20
statictext #dmy.statictext18, "Other Costs", 90, 210, 90, 20
statictext #dmy.statictext21, "Ending Inventory", 65, 250, 120, 20
statictext #dmy.statictext8, "C O G S", 105, 290, 99, 20
statictext #dmy.cogs, "0", 185, 290, 60, 25
' or whether you call the sub after the other controls:
' call tbNumberCG "#cogs.tb", 6,185,40,10,60,25
button #dmy.buOkay, " Accept ",[cogsAccept],UL,185,330
button #dmy.buExit, " End ",[cogsEnd],UL,185,370
Stylebits #dmy.buClear, 0, _WS_TABSTOP, 0, 0
stylebits #dmy, _DS_CENTER,0,0,0
open "COST OF GOODS SOLD: " + businessPropName$ for dialog_modal as #dmy
' In LBB you need one MAPHANDLE per control:
maphandle #dmy.statictext3, #cogs.statictext3
maphandle #dmy.statictext9, #cogs.statictext9
maphandle #dmy.statictext12, #cogs.statictext12
maphandle #dmy.statictext15, #cogs.statictext15
maphandle #dmy.statictext18, #cogs.statictext18
maphandle #dmy.statictext21, #cogs.statictext21
maphandle #dmy.statictext8, #cogs.statictext8
maphandle #dmy.buOkay, #cogs.buOkay
maphandle #dmy.buExit, #cogs.buExit
maphandle #dmy.cogs, #cogs.cogs
' The window's MAPHANDLE goes after the OPEN:
maphandle #dmy, #cogs
#cogs, "trapclose [cogsClose]"
#cogs, "font ms_sans_serif 10"
#cogs.tb01, "!setfocus"
wait
sub tbNumberCG x$,lmt,j,k,l,m,n
for x = 1 to lmt
var$ = x$ + "0"+right$(str$(x),2)
textbox #dmy.tmp, j, (k*x)+l0, m, n
stylebits #dmy.tmp, _ES_NUMBER, 0, 0, 0
maphandle #dmy.tmp, var$
next x
end sub
[cogsClose]
close #cogs
end Richard.
|
|
Logged
|
|
|
|
|